#php #file-upload
#php #загрузка файла
Вопрос:
Я создаю приложение, которое позволяет пользователям загружать файл в каталог с помощью PHP.
У меня возникли проблемы, потому что это не позволяет мне перезаписывать файлы с тем же именем. Например, у меня есть файл под названием text.php и я загружаю его, теперь, когда я возвращаюсь и изменяю содержимое файла text.php и я загружаю его снова на сервер, у меня все еще есть версия без изменений. Однако, если я загружаю другой файл, он работает. Итак, я просто не могу перезаписать файлы.
if ($_POST["greg"]=='true'){
// Set local PHP vars from the POST vars sent from our form using the array
// of data that the $_FILES global variable contains for this uploaded file
$fileName = $_FILES["file1"]["name"]; // The file name
$fileTmpLoc = $_FILES["file1"]["tmp_name"]; // File in the PHP tmp folder
$fileType = $_FILES["file1"]["type"]; // The type of file it is
$fileSize = $_FILES["file1"]["size"]; // File size in bytes
$fileErrorMsg = $_FILES["file1"]["error"]; // 0 for false... and 1 for true
// Specific Error Handling if you need to run error checking
if (!$fileTmpLoc) { // if file not chosen
echo "ERROR: Please browse for a file before clicking the upload button.";
exit();
} else if($fileSize > 90000000000000) { // if file is larger than we want to allow
echo "ERROR: Your file was larger than 50kb in file size.";
unlink($fileTmpLoc);
exit();
} else if (!preg_match("/.(doc|docx|xls)$/i", $fileName) ) {
// This condition is only if you wish to allow uploading of specific file types
echo "ERROR: Your file is not the right format contact the master of the page for clarification.";
unlink($fileTmpLoc);
exit();
}
// Place it into your "uploads" folder mow using the move_uploaded_file() function
move_uploaded_file($fileTmpLoc, "documenti/$fileName");
// Check to make sure the uploaded file is in place where you want it
if (!file_exists("documenti/$fileName")) {
echo "ERROR: File not uploaded<br /><br />";
echo "Check folder permissions on the target uploads folder is 0755 or looser.<br /><br />";
echo "Check that your php.ini settings are set to allow over 2 MB files, they are 2MB by default.";
exit();
}
// Display things to the page so you can see what is happening for testing purposes
echo "The file named <strong>$fileName</strong> uploaded successfuly.<br /><br />";
echo "It is <strong>$fileSize</strong> bytes in size.<br /><br />";
echo "It is a <strong>$fileType</strong> type of file.<br /><br />";
echo "The Error Message output for this upload is: <br />$fileErrorMsg";
}
Как я могу изменить этот код, чтобы при загрузке файла с тем же именем он перезаписывал существующий файл?
Комментарии:
1. Вы уверены, что он не перезаписывается, с вашим кодом стандартное поведение на сервере, подобном LAMP, заключается в том, что файл будет перезаписан. ПОЭТОМУ убедитесь, что ваш CHMOD равен 777
2. Нет, просто перейдите к своим файлам с помощью FTP и щелкните правой кнопкой мыши и установите filerights на максимум (который равен 777)
Ответ №1:
Попробуйте это (поместите это перед загрузкой файла)
//checking if file exsists
if(file_exists("documenti/$fileName")) unlink("documenti/$fileName");
//Place it into your "uploads" folder mow using the move_uploaded_file() function
move_uploaded_file($fileTmpLoc, "documenti/$fileName");
Комментарии:
1. sry, но доза не работает, и я не знаю, как настроить разрешение 777
Ответ №2:
Возможно, у скрипта нет прав на перезапись? Попробуйте изменить каталог на 777 и протестируйте еще раз. Если это сработает, вы сможете определить правильное значение, которое вам нужно
Комментарии:
1. я делаю это в файле php.ini
Ответ №3:
if (file_exists("documenti/$fileName"))
{
unlink("documenti/$fileName");
echo "<font face='Verdana' size='2' >Last Uploaded File has been removed from uploads folder<br>back to uploadform agian and upload your file<br>";// now your file which uploaded before was deleted from uploads folder you can open it and check if it removed or not , so no you should go back to uploadform again and import your file which will uploaded correctly
echo "<font face='Verdana' size='2' ><BR><BR><BR><a href='upform.php'>Back to upform</a><BR>";
}
Ответ №4:
Вы пробовали проверять, существует ли файл, и удалять его, если существует, перед перемещением временного файла в постоянное хранилище?
Комментарии:
1. Это должен быть комментарий, а не ответ.
2. нет, я не новичок в php, поэтому я не уверен, как это сделать, но я собираюсь разобраться в этом, спасибо за совет
3. Это не должно публиковаться как ответ. Согласен с @Bojangles.
Ответ №5:
$filePathAndName = "documenti/$fileName";
//check file exists
if(file_exists($filePathAndName))
{
unlink($filePathAndName);
}
//move_uploaded_file() function
move_uploaded_file($fileTmpLoc, $filePathAndName);