WordPress не сохраняет временные файлы, что делать?
Почему-то при отправке формы с сайта на WP - не сохраняются временные файлы, пути корректные, массив $_FILES приходит с нужными данными, но вот именно временного файла нет, проверял через file_exists, да и ошибка указывает на то, что file_get_contents не может найти временный файл
Но если я создам на главной странице новый файл, пихну туда форму и такой же обработчик как и на основной форме - всё работает, поэтому я и предположил, что дело мб в Wordpress, раз уж на обычной форме работает.
Форма сделана на contact form как я понимаю
Дополнительно:
Текст ошибки показывай.
И рассказывай как форма сделана, какой плагин.
Отредактируй вопрос.
[21-Aug-2023 11:02:52 UTC] PHP Warning: file_get_contents(/home/c75466/****.ru/tmp/php/uploads/phpl5e9Zl): failed to open stream: No such file or directory in /home/c75466/****.ru/www/wp-content/themes/****/functions.php on line 863 |
[21-Aug-2023 11:02:52 UTC] PHP Warning: file_get_contents(/home/c75466/****.ru/tmp/php/uploads/phpl5e9Zl): failed to open stream: No such file or directory in /home/c75466/****.ru/www/wp-content/themes/****/functions.php on line 863
Ответы:
[21-Aug-2023 11:02:52 UTC] PHP Warning: file_get_contents(/home/c75466/****.ru/tmp/php/uploads/phpl5e9Zl): failed to open stream: No such file or directory in /home/c75466/****.ru/www/wp-content/themes/****/functions.php on line 863
У тебя не правильно настроен временный каталог. См в настройках php.
Но прежде посмотри в конфиге ВП директиву WP_TEMP_DIR
Или же в твоей самописной форме косяк.
И вообще пихать форму в тему - моветон. Делай плагином. А лучше - используй готовые.
-
upload_tmp_dir = "/home/c75466/***.ru/tmp/php/uploads"
upload_tmp_dir = "/home/c75466/***.ru/tmp/php/uploads"
- из настроек php
А вот константы WP_TEMP_DIR я не нашел - Ну вот и настрой/удали эту чушь из настроек php.
Или создай такой каталог с полными правами. Но это будет дыра.
- Refguser, Почему это чушь из настроек? Обычная директива куда временные файлы должны попадать. Я конечно могу догадываться, что временные файлы падают в просто /tmp, так как sys_get_temp_dir() показал просто /tmp папку, и функция tmpfile() тоже создает в /tmp. Сейчас попробую так
- Refguser, но каталог есть, значит по логике он должен сохранять временные файлы, разве нет?
- crack_user,
Почему это чушь
Потому что временный каталог должен быть системный. А не внутри сайта.
но каталог есть, значит по логике он должен сохранять временные файлы, разве нет?
Будет сохранять, если будут соответствующие права. Ошибка говорит, что таких прав нет
- Refguser, А настройки php не являются что ли системными?
Да и разве отдельная страница(обычный html/php), с формой - без прав смогла бы сохранить временные файлы? Я думаю если бы прав не было, то и эта форма не смогла бы загрузить временные файлы, а так - она смогла - crack_user, почитай и переведи/погугли текст ошибки.
Ещё раз - или его нет или нет прав в него писать. Всё.Откуда вообще такого бредовый путь взялся? Ты его создавал? Права назначал?
- Refguser, Он был изначально как я понимаю, права да, назначал
- Refguser, Так почему тогда с таким же обработчиком, но только в другом файле (html/php) - всё работает? Я не думаю, что если бы не было прав, или его нет - он бы работал
- crack_user,
Он был изначально как я понимаю,
Нет такого бредового пути в ВП. И быть не может.
Так почему тогда с таким же обработчиком, но только в другом файле (html/php) - всё работает?
Мне отсюда не видно где это. но каталога "html" вообще нет пути этого сайта. Значит там скорее всего работает другой временный каталог.
Но пожалуй хватит. Уже всё рассказано и разжевано,
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если
$_FILESприходит, но временный файл уже не существует, проблема обычно в неправильном временном каталоге PHP, правах на него или в том, что файл обрабатывается слишком поздно. Временный файл из$_FILES['...']['tmp_name']живёт только в рамках текущего запроса, его нельзя читать потом после завершения обработки формы.Сначала проверьте PHP-настройку
upload_tmp_dirи существование каталога:var_dump(ini_get('upload_tmp_dir')); var_dump(is_writable(ini_get('upload_tmp_dir')));
Если в ошибке путь вида
/home/.../tmp/php/uploads/phpXXXX, убедитесь, что каталог существует и доступен пользователю PHP-FPM/Apache. Если каталог задан неправильно, его нужно исправить в настройках PHP хостинга или убрать кастомное значение, чтобы PHP использовал системный temp.В WordPress можно явно задать временный каталог в
wp-config.php:define('WP_TEMP_DIR', __DIR__ . '/wp-content/uploads/tmp');
Каталог нужно создать и дать ему права на запись. Но для загрузок через Contact Form 7 лучше использовать его hooks и штатную обработку файлов, а не читать временный файл произвольно в
functions.php. Проверяйте файл сразу в обработчике отправки, используйтеis_uploaded_file(),move_uploaded_file()или API WordPress для загрузок.