move_uploaded_file () не удалось открыть поток: нет такого файла или каталога

Я выполнил ваши стандартные проверки (есть ли там каталог, установлены достаточно слабые разрешения), и я уверен, что охватил ваши стандартные глупые трюки с людьми. Вот код, который не работает:

move_uploaded_file($_FILES['image1']['tmp_name'], "/public_html/flashsale/assets/img/products/T".$_FILES['image1']['name']); 

В каталоге есть – я скопировал путь из FileZilla . Я даже установил разрешения 777 , как в FileZilla, так и в диспетчере файлов на панели управления HostGator . Этот код генерирует два предупреждения:

Сообщение: move_uploaded_file (/public_html/flashsale/assets/img/products/Tsirloin.jpg) [function.move-uploaded-file]: не удалось открыть поток: нет такого файла или каталога

Сообщение: move_uploaded_file () [function.move-uploaded-file]: невозможно переместить '/ tmp / phpI5GZ3S' в '/public_html/flashsale/assets/img/products/Tsirloin.jpg'

В этой последовательности. Итак, файл загружается, каталог существует и установлен в 777, что еще я могу пропустить?

вам не нужно помещать полный каталог в файл. попробуйте удалить /public_html/flashsale/ из вашей ссылки и посмотреть, будет ли это работать. Кроме того, у файла нет необходимости иметь разрешение 777, я сам загружаю файлы в папки с 755 правами доступа.

Кроме того, вы можете использовать getcwd(); в каталоге, к которому вы стремились. функция предоставит вам каталог, который вам нужно использовать для перемещения вашего файла. источник

Проблема

 $dirpath = dirname(getcwd()) 

Это то, что я использовал первоначально, чтобы получить путь к каталогу в папку / public_html / upload. $ dirpath будет содержать

 /public_html/upload 

Решение (на сервере)

 $dirpath = realpath(dirname(getcwd())) 

Поскольку я нахожусь в среде общего хостинга, правильный способ заставить move_uploaded_file работать – использовать это как назначение: realpath (dirname (getcwd ())) возвращает что-то вроде:

 /home/cpanelusername/public_html/upload 

Убедитесь, что вы проходите путь. public_html не требуется

 $image=basename($_FILES['file']['name']); $image=str_replace(' ','|',$image); $tmppath="images/".$image; if(move_uploaded_file($_FILES['file']['tmp_name'],$tmppath)) { echo "success"; } else { echo "fail"; } 

Надеюсь это поможет

Для Ubuntu 14.04 с XAMPP у меня также есть проблемы с загрузкой, но после того, как я исправил назначение sudo chmod -R 777 destination , он работает хорошо.

Вот что я сделал:

Временная папка для загрузки в моем Ubuntu 14.04 XAMPP есть / opt / lampp / temp /. Если я хочу, чтобы мои файлы /opt/lampp/temp/testupload в /opt/lampp/temp/testupload качестве папки назначения, мне нужна конфигурация ниже.

  1. Перейти в папку temp

     cd /opt/lampp/temp/ 
  2. Создайте папку «testupload» в / opt / lampp / temp /

     sudo mkdir testupload 
  3. Изменить разрешение 777

     sudo chmod -R 777 /opt/lampp/temp/testupload/ 
  4. PHP-код

     move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"]) 

Решение для Windows и ISS:

Для учетной записи IUSR необходимы разрешения в каталоге назначения. Не учетная запись ISS_IUSR, а только учетная запись IUSR.