2016-09-28 4 views
1

Guten Tag alle, ich möchte das Hochladen einer Datei verhindern, wenn der Name und die Dateierweiterung mit einem der gespeicherten Datensätze übereinstimmen. Mein Code unten funktioniert, aber wie kann ich doppelte Einträge vermeiden?Wie vermeidet man doppelte Dateien beim Hochladen mit PHP?

"My sample array" 
Array 
(
    [upload-file] => Array 
     (
      [name] => Penguins.jpg 
      [type] => image/jpeg 
      [tmp_name] => C:\xampp\tmp\phpC87.tmp 
      [error] => 0 
      [size] => 777835 
     ) 

) 

case 'upload-file': 

    $arr = [ 
     ":userid" => $_SESSION['loggedIn_PH'][0]['user_id'], 
     ":filename" => $_FILES['upload-file']['name'], 
     ":filelink" => $_FILES['upload-file']['tmp_name'] 
     ]; 

     $allowed = array('xls','xlsx'); 
     $filename = $_FILES['upload-file']['name']; 
     $ext = pathinfo($filename, PATHINFO_EXTENSION); 

     if(!in_array($ext,$allowed)) { 
      $response_code = -1; 
     }else{ 
      $response_code = 1; 
      $folder = time(); 
      mkdir("path/".$folder); 
      $file = "path".DIRECTORY_SEPARATOR.$folder.DIRECTORY_SEPARATOR.$_FILES['upload-file']['name']; 
        move_uploaded_file($_FILES['upload-file']['tmp_name'], $file); 

     $query = "INSERT INTO file_rec_tbl (`file_name`, `file_datetime`,`file_link`, `user_id`) 
        VALUES (:filename, '".date('Y-m-d H:i:s')."',:filelink,:userid)"; 

     $stmt = $con -> prepare($query); 
     $stmt -> execute($arr); 

    } 

    exit(json_encode(array('r_code' => $response_code))); 
    break; 
+0

Öffnen Sie den Ordner, in dem Sie Ihre Dateien speichern möchten, und fragen, ob eine Datei mit diesem Namen existiert, wenn seine wahre dann speichern Sie es nicht –

+0

Werden Sie ein Beispielcode zeigen? Im Neuling .. –

+1

Ihr Skript ist ziemlich unsicher. Ich schlage vor, Sie werfen einen Blick auf meine Antwort auf diese Frage: http://stackoverflow.com/questions/38509334/full-secure-image-upload-script Es generiert eindeutige Dateinamen für hochgeladene Dateien, aber noch wichtiger, es lehrt Sie Wie schreibe ich ein sicheres Upload-Skript? – icecub

Antwort

1
<?php 
$file='file-to-check.ext'; 
if (file_exists($file)) { 
    echo "exists"; 
} else { 
    echo "not exist"; 
} 
?> 

Werke für mich - natürlich könnte die $ file auch ein Weg - das Skript überprüft nur den aktuellen Ordner

+0

aber ich stimme mit @icecub überein, es ist mehr Arbeit an Ihrem Skript erforderlich. – kerry

+0

Vielen Dank für die Antwort. –

0

einfachen Code Mag könnte: Neben

$file_name = 'path/to/file_name.ext'; 
if (file_exist($file_name)) { 
    return true; 
} else { 
    move_uploaded_file($_FILES['upload-file']['tmp_name'], $file_name); 
    insert into database; 
    return true; 
} 

, Sie sollten zwei Dateien nicht mit dem Dateinamen vergleichen.

+0

Vielen Dank für die Antwort. –

0
<?php 
case 'upload-file': 

$arr = [ 
    ":userid" => $_SESSION['loggedIn_PH'][0]['user_id'], 
    ":filename" => $_FILES['upload-file']['name'], 
    ":filelink" => $_FILES['upload-file']['tmp_name'] 
    ]; 

    $allowed = array('xls','xlsx'); 
    $filename = $_FILES['upload-file']['name']; 
    $ext = pathinfo($filename, PATHINFO_EXTENSION); 

    if(!in_array($ext,$allowed)) { 
     $response_code = -1; 
    }else{ 
     $response_code = -1; 
     $folder = time(); 
     mkdir("path/".$folder); 
     $file = "path".DIRECTORY_SEPARATOR.$folder.DIRECTORY_SEPARATOR.$_FILES['upload-file']['name']; 
if(!file_exists($file)){ 
    $response_code = 1; 
       move_uploaded_file($_FILES['upload-file']['tmp_name'], $file); 

    $query = "INSERT INTO file_rec_tbl (`file_name`, `file_datetime`,`file_link`, `user_id`) 
       VALUES (:filename, '".date('Y-m-d H:i:s')."',:filelink,:userid)"; 

    $stmt = $con -> prepare($query); 
    $stmt -> execute($arr); 
} 

} 

exit(json_encode(array('r_code' => $response_code))); 

?> 
+0

Vielen Dank für die Antwort. –

Verwandte Themen