Возникли проблемы при загрузке файла - PullRequest
1 голос
/ 30 апреля 2010

У меня проблемы с загрузкой файла. Прежде всего у меня есть класс:

class upload

{
private $name;
private $document;
public function __construct($nme,$doc)
{
    $this->setName($nme);
    $this->setDocument($doc);
}
public function setName($nme)
{
    $this->name = $nme;
}
public function setDocument($doc)
{
    $this->document = $doc;
}
public function fileNotPdf()
{
    /* Was the file a PDF? */
    if ($this->document['type'] != "application/pdf") 
        {
            return true;
        }
        else
        {
            return false;
        }
}
public function fileNotUploaded()
{
    /* Make sure that the file was POSTed. */
    if (!(is_uploaded_file($this->document['tmp_name'])))
    {
        return true;
    }
    else
    {
        return false;
    }
}
public function fileNotMoved($repositry)
{
        /* move uploaded file to final destination. */
        $result = move_uploaded_file($this->document['tmp_name'],
        "$repositry/$this->name.pdf");

        if($result)
        {
            return false;
        }
        else
        {
            return true;
        }
}
}

Теперь для моей главной страницы:

$docName = $_POST['name'];

$page = $_FILES['doc'];

if($_POST['submit'])

{
/* Set a few constants */
$filerepository = "np";
$uploadObj = new upload($docName, $page);
if($uploadObj->fileNotUploaded()) 
{
    promptUser("There was a problem uploading the file.","");
}
elseif($uploadObj->fileNotPdf())
{
    promptUser("File must be in pdf format.","");
}
elseif($uploadObj->fileNotMoved($filerepository))
{
    promptUser("File could not be uploaded to final destination.","");
}
else
{       
    promptUser("File has been successfully uploaded.","");
}
}

Ошибки, которые я получаю:

Предупреждение: move_uploaded_file (about.pdf) [function.move-uploaded-file]: не удалось открыть поток: нет такого файла или каталога в ...

Предупреждение: move_uploaded_file () [function.move-uploaded-file]: невозможно переместить 'c: \ xampp \ tmp \ php13.tmp' в 'about.pdf' в ...

Файл не может быть загружен в конечный пункт назначения.

Ответы [ 2 ]

3 голосов
/ 30 апреля 2010

В инструкции написано:

Если имя файла является допустимым файлом загрузки, но не может быть перемещен по какой-либо причине, никаких действий не произойдет, и move_uploaded_file() вернет FALSE. Дополнительно выдается предупреждение.

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

move_uploaded_file() осведомлен как safe mode, так и open_basedir. Однако ограничения налагаются только на путь назначения, чтобы разрешить перемещение загруженных файлов, в которых имя файла может конфликтовать с такими ограничениями. move_uploaded_file() обеспечивает безопасность этой операции, позволяя перемещать только те файлы, загруженные через PHP.

Мой вывод: в вашем коде нет ошибок, ваша конфигурация PHP не позволяет вам переместить файл в целевой каталог. Вам следует изучить ограничения, установленные safe mode и open_basedir, чтобы понять, почему именно операция перемещения не удалась.

2 голосов
/ 30 апреля 2010

Если я загружу файл как «my_file», "$repositry/$this->name.pdf" оценивается как np/my_file.pdf. Это поместит ваш целевой каталог в каталог tmp. Каталог tmp уже должен существовать и быть доступным для записи, поэтому убедитесь, что каталог np находится внутри каталога tmp. Функция move_uploaded_file() не создаст ее автоматически, если она отсутствует. При отсутствии каталога np я получаю те же ошибки, что и вы.

Также обратите внимание, что вы не должны сохранять загруженные файлы в подкаталог каталога tmp. Я использую XAMPP, и когда я запускаю ваш код, загруженный файл перемещается в tmp/np, а затем немедленно удаляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...