Я делаю сайт, который позволяет пользователю загружать изображения. Когда я делаю вызов переменной $ _FILE, чтобы переместить изображение в другой каталог, он ничего не делает. Проверка $ _FILE с помощью print_r показывает следующую информацию:
( [pic1] => Array ( [name] => pic1 [type] => [tmp_name] => [error] => 6 [size] => 0 ) )
Кажется, что ошибка 6
UPLOAD_ERR_NO_TMP_DIR Value: 6; Missing a temporary folder. Introduced in PHP 5.0.3.
Но у меня есть большая проблема: я могу получить доступ только к каталогу, в который я помещаю файлы, я не могу проверить, существует ли временная директория или проверить php.ini (сервер от моего клиента, и он не может дать мне доступ к другим каталогам)
К счастью, клиент проверяет эти параметры и рассказывает мне, как они выглядят. Итак, временный каталог (upload_tmp_dir) установлен в / tmp. Каталог / tmp фактически существует и имеет все разрешения:
drwxrwxrwt 34 root root 2832 2014-08-30 00:00 tmp
Я искал причины, почему он показывает ошибку «Отсутствует временная папка», несмотря на ее существование, но я не могу найти причину или решение. Я оставляю здесь pastebin с выходом ini_get_all ()
Если вы можете прокомментировать любое возможное решение, я буду благодарен. Благодарю.
Вы можете изменить, какой каталог является «tmp», используя эту функцию: http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir
но, видимо, вам придется сделать это в основном файле ini: http://www.reddit.com/r/PHP/comments/1c87xk/can_i_use_ini_set_to_set_the_value_of_upload_tmp/
Попросите вашего клиента исправить конфигурацию своего сервера.
Вы ничего не можете сделать, если у них что-то сломано, и я не могу себе представить, что они будут сражаться с вами, если вы это исправите. Это не техническая проблема … вы уже решили техническую часть.
Проверьте наличие open_basedir
. Если он включен, в руководстве по PHP указано:
Если open_basedir включен, то для успешной загрузки должна быть разрешена системная папка по умолчанию.
Также вы можете указать настраиваемый каталог, и вы должны убедиться, что он еще не установлен, но не доступен для записи. Также на этой же странице указано, что если указанный каталог не доступен для записи, PHP возвращается к временному каталогу по умолчанию (/ tmp).
Не знаете, как никто не указал на это. Но насколько я знаю. Никто не запускает php под правами root, у которых папка / tmp имеет корень: root. Я могу только предположить, что если вы будете использовать file_put_contents
или fopen('/tmp/some_new_file')...
это должно привести к fopen('/tmp/some_new_file')...
определенного разрешения или тому подобное. Поэтому вы должны постоянно обновлять php.INI доступной папкой для пользователя php, чтобы избежать повторения ошибки