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


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

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

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

Сообщение: перемещение_загруженный_файл(/public_html/flashsale/assets/img/products/Tsirloin.jpg) [функция.переместить загруженный файл]: не удалось открыть поток: Такого файла или каталога нет

Сообщение: move_uploaded_file() [функция.переместить загруженный файл]: Не удается переместить '/tmp/PHPI5GZ3S' в '/public_html/flashsale/assets/img/products/Tsirloin.jpg '

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

Author: Vic Seedoubleyew, 2013-01-30

5 answers

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

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

 13
Author: shnisaka, 2013-01-30 04:52:05

Проблема

$dirpath = dirname(getcwd())

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

/public_html/upload

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

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

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

/home/cpanelusername/public_html/upload
 6
Author: UWU_SANDUN, 2015-11-22 09:52:29

Убедитесь, что вы проходите путь. 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";
        }

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

 2
Author: Ramaraju.d, 2013-01-30 04:58:46

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

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

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

  1. Перейдите во временную папку

    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"])
    
 1
Author: Pao Im, 2016-02-16 09:50:51

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

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

 0
Author: Hackmodford, 2016-06-28 14:54:32