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/активы/img/продукты / Tsirloin.формат jpg) [функция.move-uploaded-file]: не удалось открыть поток: нет такого файла или каталог

сообщение: move_uploaded_file() [функция.move-uploaded-file]: невозможно переместить '/tmp / phpI5GZ3S' в '/public_html/flashsale/активы/img/продукты / Tsirloin.в JPG'

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

5 ответов


вам не нужно ставить полный каталог в файл. попробуйте удалить /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 в качестве папки назначения, то мне нужно config ниже.

  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.