Проблема: я не могу переименовать файл независимо от того, какой метод я найду на любом сайте. Я всегда получаю эту ошибку
Предупреждение: move_uploaded_file (CUSTOM / TestFile.txt): не удалось открыть поток: нет такого файла или каталога в C: \ XAMPP \ htdocs \ CUSTOM \ upload.php в строке 7
Предупреждение: move_uploaded_file (): невозможно переместить ‘C: \ XAMPP \ tmp \ php7AAB.tmp’ в ‘CUSTOM / TestFile.txt’ в C: \ XAMPP \ htdocs \ CUSTOM \ upload.php в строке 7
Если я не пытаюсь переименовать загруженный файл, загрузка прошла успешно, однако файл переименовывается в имя папки (в данном случае «CUSTOM»)
КОНТЕКСТ:
Пусть навсегда удача будет на том, кто найдет решение.
<?php
$fname = $_FILES['file']['name'];
$ftemp = $_FILES['file']['tmp_name'];
$location = "CUSTOM/";
move_uploaded_file($ftemp, $location.$fname);
?>
<html>
<body><form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" ><br/>
<input type="submit" value="Upload File">
</form></body>
</html>
Это не ваша проблема:
Warning: move_uploaded_file(): Unable to move 'C:\XAMPP\tmp\php7AAB.tmp'
Но это:
to 'CUSTOM/TestFile.txt'
Потому что:
in C:\XAMPP\htdocs\CUSTOM\upload.php on line 7
Вы пытаетесь переместить временный файл в CUSTOM/CUSTOM/TestFile.txt
. Ваш скрипт загрузки, о котором вы должны были упомянуть, уже находится в CUSTOM
, Который, таким образом, является текущим рабочим каталогом. Поэтому пытается записать в файл с другим родственник префикс пути из CUSTOM/
«удвоит» предполагаемое целевое имя каталога.
Кстати, клиент поставляется name
может быть что-нибудь — четное index.php
или перезаписать upload.php
или, возможно, даже ../../boot.ini
, Не просто примите любой пользовательский ввод. По крайней мере применить basename
, белый список, когда это возможно, использовать целевую папку, отличную от того, где находятся сценарии, и запрещать выполнение CGI / PHP в соответствии с .htaccess
и т.п.
Других решений пока нет …