Ошибка PHP - загрузка файла
Я пытаюсь написать некоторый 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 on строка 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 разрешений.
Любые идеи?
Ответы
Ответ 1
Как и в Windows, нет реальных 777. Если вы используете chmod, проверьте комментарии к Windows.
Убедитесь, что учетная запись IIS может получать доступ (чтение, запись, изменение) этих двух папок:
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
Ответ 2
OMG
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
Не делай этого. $_FILES['file']['name']
может быть ../../../../boot.ini
или любое количество плохих вещей. Вы не должны доверять этому имени. Вы должны переименовать файл в другое место и связать исходное имя со своим случайным именем. При минимальном использовании basename($_FILES['file']['name'])
.
Ответ 3
Попробуйте добавить путь. Для меня работает следующий код:
<?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;
}
?>
Ответ 4
Предупреждение: move_uploaded_file() [function.move-uploaded-file]: Невозможно переместить 'C:\WINDOWS\Temp\phpA30E.tmp' в './people.xml' в E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php в строке 3
- важная строка, в которой говорится, что вы не можете поместить файл туда, где хотите, и это обычно означает проблему с разрешениями
проверить процесс запуска приложения (обычно процесс веб-серфинга для php) имеет права на запись там файла.
EDIT:
немного повиснуть
Я немного подпрыгнул от пистолета, правильно ли был путь к файлу в первой строке?
Ответ 5
Еще один пример для наблюдения - это ваш разделитель каталогов, вы используете/в окне Windows.
Ответ 6
Добавьте пользователя IIS в группу "persmissions security" папок "дамп" и дайте ему доступ для чтения/записи.
Ответ 7
Создайте папку с именем "образ" с разрешением папки 777
<?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>