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 ниже.
-
перейдите в папку temp
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.