2008-08-06 5 views
13

Я пытаюсь написать некоторый 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 загруженным-файл]: не удалось открыть поток: Разрешение отклонено в 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 разрешений.

Любые идеи?

ответ

8

Как и в Windows, нет реальных 777. Если вы используете chmod, проверьте комментарии, связанные с Windows.

Убедитесь, что учетная запись IIS может получить доступ (чтение, запись, изменение) эти две папки:

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ 
C:\WINDOWS\Temp\ 
1

Предупреждение: move_uploaded_file() [function.move-uploaded-file]: Невозможно переместить 'C: \ WINDOWS \ Temp \ phpA30E.tmp' в './people.xml' в E: \ inetpub \ vhosts \ mywebsite.com \ httpdocs \ свалка \ upload.php на линии 3

является важным направлением он говорит, что вы не можете поместить файл, где вы хотите, и это обычно означает, что проблемы с правами доступа

проверки запущенного процесса приложение (обычно процесс webservers для php) имеет права на запись там файла.

EDIT:

повесить на немного я поторопился немного есть путь к файлу в первой строке правильно?

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; 
} 
?> 
17

OMG

move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']); 

Не делай этого. $_FILES['file']['name'] может быть ../../../../boot.ini или любое количество плохих вещей. Вы не должны доверять этому имени. Вы должны переименовать файл в другое место и связать исходное имя со своим случайным именем. При минимальном использовании basename($_FILES['file']['name']).

1

Другие думает, чтобы наблюдать это ваш разделитель каталогов, вы используете/в коробке Windows, ..

1

Добавьте пользователь IIS в группах безопасности persmissions сбрасывающих папок, и дать ему доступ на чтение/записи.

0

Создайте папку с именем "образ" с разрешения папки 777

<?php 
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']); 
?>