1

さて、私は.phpファイル(uploader.php)で処理するhtmlアップロードフォームを持っています。これは、複数ファイルにアップロードされたコードです。

したがって、アップロード時に、すべてのファイルは個々のファイル名でアップロードディレクトリに移動します。例:abc.jpg、abc2.jpgなど。

しかし、誰かが同じ名前のファイルをアップロードした場合、それは既存のファイルをovrwriteします。そのため、アップロードしたファイルに一意の名前が必要です。一意のランダムな名前でファイルの名前を変更する方法はありますか?例:12545454.jpge、234324324.jpge、323453253.jpgなど。

PHPコード:

<?php
if (isset($_POST['Submit'])) {
$number_of_file_fields = 0;
$number_of_uploaded_files = 0;
$number_of_moved_files = 0;
$uploaded_files = array();
$upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory


/**
 * we get a $_FILES['images'] array ,
 * we procee this array while iterating with simple for loop
 * you can check this array by print_r($_FILES['images']);
 */
for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
    $number_of_file_fields++;
    if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
        $number_of_uploaded_files++;
        $uploaded_files[] = $_FILES['images']['name'][$i];
        if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . 
$_FILES['images']['name'][$i])) {
            $number_of_moved_files++;
        }

    }

}
echo "Number of File fields created $number_of_file_fields.<br/> ";
echo "Number of files submitted $number_of_uploaded_files . <br/>";
echo "Number of successfully moved files $number_of_moved_files . <br/>";
echo "File Names are <br/>" . implode(',', $uploaded_files);
}
?>  
4

3 に答える 3

3

uniqid()を使用します。このために作られています。

于 2012-11-19T09:25:49.230 に答える
1

time();ワームヒットで提案されているようにsession_id()uniqid()各ファイルの名前に対して連結することも非常に良い考えです。

以下のコードを使用します。

<?php
$target_path = "images/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}
//$upload_directory = ''.uniqid().'_'.dirname(__file__) . '/uploaded/'; //set upload directory

$uploaded_file="".$upload_directory ."/".uniqid()."_".$_FILES['images']['name'][$i]."";

if (move_uploaded_file($_FILES['images']['tmp_name'][$i],$uploaded_file)) {
            $number_of_moved_files++;
        }
?>


<?php
if (isset($_POST['Submit'])) {
$number_of_file_fields = 0;
$number_of_uploaded_files = 0;
$number_of_moved_files = 0;
$uploaded_files = array();
$upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory


/**
 * we get a $_FILES['images'] array ,
 * we procee this array while iterating with simple for loop
 * you can check this array by print_r($_FILES['images']);
 */
for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
    $number_of_file_fields++;
    if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not

        $uploaded_file="".$upload_directory ."".uniqid()."_".$_FILES['images']['name'][$i]."";

        $number_of_uploaded_files++;
        $uploaded_files[] = $_FILES['images']['name'][$i];
        if (move_uploaded_file($_FILES['images']['tmp_name'][$i],$uploaded_file)) {
            $number_of_moved_files++;
        }

    }

}
echo "Number of File fields created $number_of_file_fields.<br/> ";
echo "Number of files submitted $number_of_uploaded_files . <br/>";
echo "Number of successfully moved files $number_of_moved_files . <br/>";
echo "File Names are <br/>" . implode(',', $uploaded_files);
}
?> 
于 2012-11-19T09:20:30.277 に答える
0

これを使用できます

 $ext = pathinfo($file_name, PATHINFO_EXTENSION);
 $newfilename = substr( sha1(uniqid (rand())), 0, 10). '.'.$ext;
于 2012-11-19T09:25:24.527 に答える