Не доверяйте расположению временной папки, предоставленному sys_get_temp_dir
, если вы находитесь в среде общего хостинга.
Вот еще одна вещь, которую нужно проверить, которая еще не упоминалась ...
Естественно, я предположил, что папка, в которой мой PHP-скрипт хранил временные загрузки файлов, была /tmp
.Эта вера была подкреплена тем фактом, что echo sys_get_temp_dir() . PHP_EOL;
возвращает /tmp
.Кроме того, echo ini_get('upload_tmp_dir');
ничего не возвращает.
Чтобы убедиться, что загруженный файл действительно ненадолго появляется в моей папке /tmp
, я добавил оператор sleep(30);
в свой сценарий (как предложено здесь ) и переместился в мою папку /tmp
в диспетчере файлов cPanel, чтобы найти файл.Однако, несмотря ни на что, загруженный файл нигде не был найден.
Я потратил часы, пытаясь определить причину этого, и реализовал каждое предложение, которое было предложено здесь.
Наконец,после поиска файлов моего веб-сайта по запросу tmp
я обнаружил, что мой сайт содержит другие папки с именем tmp
в разных каталогах.Я понял, что мой PHP-скрипт фактически записывал загруженные файлы в .cagefs/tmp
. (для просмотра этой папки в cPanel должна быть включена настройка «Показать скрытые файлы» ).
Итак, почему функция sys_get_temp_dir
возвращает неточную информацию?
Вот объяснение с веб-страницы PHP.net для sys_get_temp_dir
(т. Е. Верхний комментарий):
Если работает в системе Linux, где systemdимеет PrivateTmp = true (который используется по умолчанию в CentOS 7 и, возможно, в других новых дистрибутивах), эта функция просто возвращает "/ tmp", а не истинный, гораздо более длинный, несколько динамический путь.
ЭтоТАК сообщение также углубляется в проблему: