Вопрос

Я пытаюсь написать 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 emp\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 emp\phpA30E.tmp» в «./people.xml» в E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php в строке 3.

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

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

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

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

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

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

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

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top