@danilduck

Из-за чего может не работать move_uploaded_file в PHP?

Пытаюсь настроить загрузку файлов на сервере с php 5.6, но не получается переместить файл с помощью move_uploaded_file, есть предупреждения:
Warning: move_uploaded_file(/index_img/newepisodes/m8tp4/oh7n9/3764g.jpg): failed to open stream: No such file or directory in /var/www/loader.php on line 12
Warning: move_uploaded_file(): Unable to move '/tmp/phpUiBl5O' to '/index_img/newepisodes/m8tp4/oh7n9/3764g.jpg' in /var/www/loader.php on line 12

Права доступа к папке, куда пытаюсь загрузить 777.
В коде ошибок, вроде, нет:
error_reporting(E_ALL);
ini_set("display_errors", 1);
function getRandString($length, $alphabet = '1234567890qwertyuiopasdfghjklzxcvbnm')
{
    $alphabet = str_repeat($alphabet, (int)($length / mb_strlen($alphabet)) + 1);
    return mb_substr(str_shuffle($alphabet), 0, $length);
}

$uploadfile = '/index_img/newepisodes/' . getRandString(5) . '/' . getRandString(5) . '/' . getRandString(5) . '.jpg';

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "Все окей.\n";
} else {
    echo "Чет не очень\n";
}


В php.ini настройки проставил:
54721b1b8ce74fd7a0645adda9fbcafa.png
  • Вопрос задан
  • 3564 просмотра
Решения вопроса 1
@Wexter
$uploadfile = '/index_img/newepisodes/' . getRandString(5) . '/' . getRandString(5) . '/' . getRandString(5) . '.jpg';

а создавать 2 папки с рандомным названием кто будет?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
move_uploaded_file использует абсолютный а не относительный путь. No such file or directory как бэ намекает...
значит так....
для начала var_dump($_FILES);
потом сформировать строку до пункта куда копировать - в идеале отдельная переменная
$path = $_SERVER['DOCUMENT_ROOT']."/"; которую тоже можно проверить и посмотреть.
Ответ написан
netcrox
@netcrox
Всё время женат
Можно еще проверить владельца папки. Если не совпадает с владельцем скрипта — ничего не выйдет.
Рекурсивно сменить через консоль можно так:

chown -R пользователь:группа /место/назначения/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы