Я пытаюсь написать PHP, чтобы загрузить файл в папку на моем веб-сервере. Вот что я имею:
<?php if ( !empty($_FILES['file']['tmp_name']) ) { move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']); header('Location: http://www.mywebsite.com/dump/'); exit; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html> <head> <title>Dump Upload</title> </head> <body> <h1>Upload a File</h1> <form action="upload.php" enctype="multipart/form-data" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" /> Select the File:<br /><input type="file" name="file" /><br /> <input type="submit" value="Upload" /> </form> </body> </html>
Я получаю эти ошибки:
Предупреждение: move_uploaded_file (./ test.txt) [function.move-uploaded-file]: не удалось открыть поток: разрешение отклонено в E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php в строке 3
Предупреждение: move_uploaded_file () [function.move-uploaded-file]: Невозможно переместить 'C: \ WINDOWS \ Temp \ phpA30E.tmp' в './test.txt' в E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php в строке 3
Предупреждение: не удается изменить информацию заголовка – уже отправленные заголовки (вывод начался с E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php: 3) в E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php в строке 4
Версия PHP 4.4.7 Запуск IIS в окне Windows. Этот конкретный файл / папка имеет 777 разрешений.
Есть идеи?
Поскольку это Windows, нет реальных 777. Если вы используете chmod , проверьте комментарии, связанные с Windows.
Убедитесь, что учетная запись IIS может получать доступ (чтение, запись и изменение) этих двух папок:
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ C:\WINDOWS\Temp\
О, мой бог
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
Не делай этого. $_FILES['file']['name']
может быть ../../../../boot.ini
или любое количество плохих вещей. Вы не должны доверять этому имени. Вы должны переименовать файл в другое место и связать исходное имя со своим случайным именем. При минимальном использовании используйте basename($_FILES['file']['name'])
.
Попробуйте добавить путь. Для меня работает следующий код:
<?php if ( !empty($_FILES['file']) ) { $from = $_FILES['file']['tmp_name']; $to = dirname(__FILE__).'/'.$_FILES['file']['name']; if( move_uploaded_file($from, $to) ){ echo 'Success'; } else { echo 'Failure'; } header('Location: http://www.mywebsite.com/dump/'); exit; } ?>
Предупреждение: move_uploaded_file () [function.move-uploaded-file]: Не удалось переместить 'C: \ WINDOWS \ Temp \ phpA30E.tmp' в './people.xml' в E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ dump \ upload.php в строке 3
это важная строка, в которой говорится, что вы не можете поместить файл туда, где хотите, и это обычно означает проблему с разрешениями
проверьте процесс запуска приложения (как правило, процесс webservers для php) имеет права на запись там файла.
РЕДАКТИРОВАТЬ:
повесить на немного Я прыгнул пистолет немного путь к файлу в первой строке правильно?
Другое, что нужно наблюдать, это ваш разделитель каталогов, вы используете / в окне Windows.
Добавьте пользователя IIS в группу «persmissions security» папок «дамп» и дайте ему доступ для чтения / записи.
Создайте папку с именем «образ» с разрешением 777
<?php move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']); ?>