2014-03-13 5 views
0

에 같은 이름을 가진 사용자가 업로드 파일 (이미지)이 MySQL의 DB를로 FTP 서버에 이미지와 이름을 업로드 내 코드 인 경우 파일의 이름을 변경하는 방법 :FTP 서버

session_start(); 

require 'config2.php'; 
require_once 'user.class.php'; 

$target = "sent/"; 
$target1 = "sent/"; 
$target2 = "sent/"; 
$target3 = "sent/"; 
    $target4 = "sent/"; 
$target5 = "sent/"; 

$target = $target . basename($_FILES['photo']['name']); 
$target1 = $target1 . basename($_FILES['photo1']['name']); 
$target2 = $target2 . basename($_FILES['photo2']['name']); 
$target3 = $target3 . basename($_FILES['photo3']['name']); 
$target4 = $target4 . basename($_FILES['photo4']['name']); 
$target5 = $target5 . basename($_FILES['photo5']['name']); 

//This gets all the other information from the form 
$login = $_SESSION['login'];  
    $name=$_POST['name']; 
$name1 =$_POST['name1']; 
$name2 =$_POST['name2']; 
$name3 =$_POST['name3']; 
$name4 =$_POST['name4']; 
$name5 =$_POST['name5']; 
    $pic=($_FILES['photo']['name']); 
$pic1=($_FILES['photo1']['name']); 
    $pic2=($_FILES['photo2']['name']); 
    $pic3=($_FILES['photo3']['name']); 
    $pic4=($_FILES['photo4']['name']); 
$pic5=($_FILES['photo5']['name']); 

    $id=$_SESSION['id']; 
// Connects to your Database 



    //$op = mysql_query("select id from users where id = '$id' "); 
//Writes the information to the database 
//mysql_query("INSERT INTO users (name, photo, photo1, name1) VALUES ('$name', '$pic' ,'$pic1', '$name1')") ; 


    mysql_query("UPDATE users SET name='$name', name1='$name1', name2='$name2', name3='$name3', name4='$name4', name5='$name5', photo = '$pic', photo1 = '$pic1', photo2 = '$pic2', photo3 = '$pic3', photo4 = '$pic4', photo5 = '$pic5' WHERE login = '$login' "); 


$allowed = array('jpg', 'jpeg', 'gif', 'png'); 

//Writes the photo to the server 
if(move_uploaded_file($_FILES['photo']['tmp_name'] ,$target)) 
{ 




//Tells you if its all ok 
echo "Plik ". basename($_FILES['photo']['name']). " uploaded successfuly"; 
echo implode(', ', $allowed); 
} 


if(move_uploaded_file($_FILES['photo1']['tmp_name'] ,$target1)) 
{ 

//Tells you if its all ok 
echo "Plik ". basename($_FILES['photo1']['name']). " uploaded successfuly"; 
echo implode(', ', $allowed); 
} 

if(move_uploaded_file($_FILES['photo2']['tmp_name'] ,$target2)) 
{ 

//Tells you if its all ok 
    echo "Plik ". basename($_FILES['photo2']['name']). " uploaded successfuly"; 
echo implode(', ', $allowed); 
} 

if(move_uploaded_file($_FILES['photo3']['tmp_name'] ,$target3)) 
{ 

//Tells you if its all ok 
echo "Plik ". basename($_FILES['photo3']['name']). " uploaded successfuly"; 
echo implode(', ', $allowed); 
} 

if(move_uploaded_file($_FILES['photo4']['tmp_name'] ,$target4)) 
    { 

//Tells you if its all ok 
    echo "Plik ". basename($_FILES['photo4']['name']). " uploaded successfuly"; 
echo implode(', ', $allowed); 
} 

if(move_uploaded_file($_FILES['photo5']['tmp_name'] ,$target5)) 
{ 

//Tells you if its all ok 
echo "Plik ". basename($_FILES['photo5']['name']). " uploaded successfuly"; 
echo implode(', ', $allowed); 

이 작업의 고급 . 그러나 이제는 사용자가 동일한 이름의 이미지를 업로드 한 경우 새 이름을 할당하는 코드를 추가하고 싶습니다. 두 개 이상의 이미지 이름이 같을 때 스크립트가 새 이미지로 덮어 씁니다. 그렇다면이 문제에 대한 해결책을 찾을 수 있습니까?

+0

왜 코드가 작동합니까? 당신이 시도한 바가 작동하지 않는다는 것을 보여주십시오 ... –

답변

0

파일 이름에 타임 스탬프를 추가하십시오.

$target = $target . time().basename($_FILES['photo']['name']); 
$target1 = $target1 . time().basename($_FILES['photo1']['name']); 
$target2 = $target2 . time().basename($_FILES['photo2']['name']); 
$target3 = $target3 . time().basename($_FILES['photo3']['name']); 
$target4 = $target4 . time().basename($_FILES['photo4']['name']); 
$target5 = $target5 . time().basename($_FILES['photo5']['name']); 
+0

저에게는 좋은 해결책 인 것처럼 보이지만 그것을 시험해 보았고 db의 파일 이름을 변경하지 않았습니다. – mac

0

대상 파일의 이름 만 바꾸면됩니다. 이 이름을 다음과 같이 설정합니다.

$target = $target . basename($_FILES['photo']['name']); 
$target1 = $target1 . basename($_FILES['photo1']['name']); 
$target2 = $target2 . basename($_FILES['photo2']['name']); 
$target3 = $target3 . basename($_FILES['photo3']['name']); 
$target4 = $target4 . basename($_FILES['photo4']['name']); 
$target5 = $target5 . basename($_FILES['photo5']['name']); 

원하는 모든 문자열로 설정할 수 있습니다. 예를 들어 전역 적으로 고유 한 파일 이름을 만들려면 GUID 또는 일부 unique ID을 전체 파일 이름으로 사용하거나 파일 이름에 추가 할 수 있습니다. 무엇을 "유일 함"의 척도는 당신에게 달려 있습니다. 궁극적으로 귀하의 코드는 이고 명시 적으로은 대상 파일 이름을 설정하므로 명시 적으로을 원하는 값으로 설정할 수 있습니다.

+0

tryed : $ target = $ target.uniqid(). basename ($ _FILES [ 'photo'] [ 'name']); ,하지만 그것은 db에서 파일 이름을 변경하지 않았습니다, colud U이 코드에 무엇이 잘못 되었습니까? – mac

+0

@mac : 그러면 UPDATE 쿼리에서 파일 이름을 변경해야합니다. 그것들은'$ name' 변수에 설정되어있는 것처럼 보입니다. 두 위치에서 동일한 값을 사용하는 것이 좋습니다. 또한 데이터베이스 쿼리가 *** SQL 주입 공격에 *** 활짝 열려 있다는 점도 주목할 가치가 있습니다. 현재 사용자는 서버에서 임의 코드를 실행할 수 있습니다. 그러나 요점으로 돌아가서, 동일한 대답이 적용됩니다. 저장하려는 값을 변경하려면 * 저장할 값을 변경하십시오. – David

0

시도해 보았지만 정상적으로 작동합니다. $target = time().($_FILES['photo']['name']);

예를 들어. // Example of accessing data for a newly uploaded file $fileName = time().$_FILES["pic"]["name"]; $fileTmpLoc = $_FILES["pic"]["tmp_name"];

time()이 함수는 파일의 이름을 동일한 이름으로 변경하고 사용자가 업로드 한 동일한 파일을 유지합니다. 희망이 도움이 될 것입니다. 감사합니다