переместить загруженный файл() не удалось открыть поток: такого файла или каталога нет
Я выполнил ваши стандартные проверки (есть ли там каталог, установлены ли достаточно слабые разрешения), и я почти уверен, что описал ваши стандартные глупые человеческие трюки. Вот код, который терпит неудачу:
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, что еще я могу пропустить?
5 answers
Вам не нужно помещать полный каталог в файл. попробуйте удалить /public_html/flashsale/
из вашей ссылки и посмотрите, сработает ли это.
Кроме того, файлу не нужно иметь разрешение 777, я сам загружаю файлы в папки с разрешениями 755.
Кроме того, вы можете использовать getcwd();
в каталоге, к которому вы стремитесь. функция предоставит вам каталог, который вам нужно использовать для перемещения вашего файла. источник
Проблема
$dirpath = dirname(getcwd())
Это то, что я использовал изначально, чтобы получить путь к каталогу в моей папке /public_html/upload. $dirpath будет содержать
/public_html/upload
Решение (На сервере)
$dirpath = realpath(dirname(getcwd()))
Поскольку я нахожусь в среде общего хостинга, правильный способ заставить move_uploaded_file работать - использовать его в качестве места назначения: realpath(имя файла(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
в качестве папки назначения, мне нужна следующая конфигурация.
-
Перейдите во временную папку
cd /opt/lampp/temp/
-
Создайте папку "testupload" в папке /opt/lampp/temp/
sudo mkdir testupload
-
Разрешение на изменение 777
sudo chmod -R 777 /opt/lampp/temp/testupload/
-
PHP-код
move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"])
Решение для Windows и ISS:
Учетной записи IUSR необходимы разрешения в каталоге назначения. Не учетная запись ISS_IUSR, а только учетная запись IUSR.