Я выполнил ваши стандартные проверки (есть ли там каталог, установлены достаточно слабые разрешения), и я уверен, что охватил ваши стандартные глупые трюки с людьми. Вот код, который не работает:
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
качестве папки назначения, мне нужна конфигурация ниже.
Перейти в папку 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.