Вопрос по php, apache, file-upload – PHP: move_uploaded_file () не удалось открыть поток: нет такого файла или каталога

14

Я пытаюсь заставить PHP переместить загруженный файл из каталога tmp в постоянное место на моем веб-сервере. Это кажется достаточно простым, но я получаю эту ошибку:

Unable to move 'C:\UniServer\tmp\php3F62.tmp' to 'static/images/slides/1/1.jpg'

Довольно просто, верно? Он не может найти папку назначения.

Мой вопрос:How do I reference the desired target directory?

Относится ли ссылка к положению скрипта на сервере? Или это относительно URL? ИлиPHP DOCUMENT_ROOT? Или файловая система ОС? Или что-то другое?

Я не могу найти ответ в документации по PHP или даже в подобных вопросах на SO ..

Кто-нибудь может помочь? Благодарю.

Он формирует позицию сценария на сервере. Лучше всего использовать абсолютный путь Pekka 웃
использоватьDIRECTORY_SEPARATOR постоянный путь, чтобы сделать его независимым от платформы. Shiplu Mokaddim
Один часто сталкивается с этой ошибкой, и чтобы быстро устранить ее, выполните следующие действия:stackoverflow.com/a/36577021/2873507 Vic Seedoubleyew

Ваш Ответ

4   ответа
30

шем index.php

define ('SITE_ROOT', realpath(dirname(__FILE__)));

Тогда просто используйте это как:

move_uploaded_file($_FILES['file']['tmp_name'], SITE_ROOT.'/static/images/slides/1/1.jpg');
Здесь есть контрольный список для устранения этой частой ошибки здесь:stackoverflow.com/a/36577021/2873507
просто сомнение ... это не $ _FILES ['file'] ['tmp_name &]; вместо $ _FILES [' file & apos;] ['temp_name & apos;]
Я никогда не использовал его, id использовал его, только если я собирался вывести путь к пользователю. Спасибо за согласие :)
Вот как я это делаю. Это лучше, чем использование корня документа, потому что таким образом вы можете разместить свое приложение в поддиректории.
Это правильное решение, спасибо! (Это немного беспокоит, что несколько человек думали, что DIRECTORY_SEPARATOR поможет, хотя: - /) Chuck Le Butt
0
$destination = dirname(dirname(dirname(dirname(__FILE__))))."/runtime/tmp/";
chown($destination, 0755);
move_uploaded_file($info['tmp_name'], $destination.$info['name']);

я просто использую mkdir, чтобы создать каталог для размещения моей картинки, которую я хочу переместить. Жаль, что это помогает.

0

вам нужно иметь права на запись в эту папку:

'static/images/slides/1/1.jpg'

Вместо этого лучше использовать абсолютный путь следующим образом:

'C:\UniServer\***\static\images\slides\1\1.jpg

Используйте абсолютный путь.

Ах ... Хорошо, тогда.
@DjangoReinhardt Спасибо за информацию, но просто чтобы быть очень осторожным, зная ОС. :)
PHP принимает и \ и / как допустимые разделители пути во всех ОС. Chuck Le Butt
В чем причина понижения голоса?
Не знаю, но, может быть, потому что у вас все еще есть ошибочная информация о Windows? У меня тоже есть отрицательное мнение по этому вопросу. Chuck Le Butt
3

и, возможно, он может вам помочь.

Файл, который я создал, называется & quot; загружает & quot ;.

$uploads_dir = 'uploads/';
$name = $_FILES['userfile']['name'];
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{       
    //in case you want to move  the file in uploads directory
     move_uploaded_file($_FILES['userfile']['tmp_name'], $uploads_dir.$name);
     echo 'moved file to destination directory';
     exit;
}

Похожие вопросы