Ошибка 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 в строке 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 разрешений.

Есть идеи?

6.08.2008 16:13:02
8 ОТВЕТОВ
РЕШЕНИЕ

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

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

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
7
6.08.2008 16:16:01

Предупреждение: 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), имеет права на запись файла туда.

РЕДАКТИРОВАТЬ:

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

1
6.08.2008 16:15:21

Попробуйте добавить путь. Следующий код работает для меня:

<?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;
}
?>
3
7.08.2008 12:06:45

О, мой бог

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

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

16
30.06.2015 04:09:19

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

1
12.02.2009 17:14:23

Добавьте пользователя IIS в группу разрешений безопасности папок «dump» и предоставьте ему права на чтение и запись.

1
3.12.2009 04:12:43

Создайте папку с именем «изображение» с разрешением папки 777

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
0
27.06.2016 14:32:01

Мы нашли, используя путь ниже

{['DOCUMENT_ROOT'] + 'path to folder'

и предоставление всем полного доступа к папке решило проблему.

Убедитесь, что не указали местоположение в адресной строке. Нет смысла отдавать местоположение.

0
5.12.2019 18:17:51