WordPress не сохраняет временные файлы, что делать?

Ссылка скопирована
1 ответ

Почему-то при отправке формы с сайта на WP - не сохраняются временные файлы, пути корректные, массив $_FILES приходит с нужными данными, но вот именно временного файла нет, проверял через file_exists, да и ошибка указывает на то, что file_get_contents не может найти временный файл
Но если я создам на главной странице новый файл, пихну туда форму и такой же обработчик как и на основной форме - всё работает, поэтому я и предположил, что дело мб в Wordpress, раз уж на обычной форме работает.
Форма сделана на contact form как я понимаю

Дополнительно:

Текст ошибки показывай.
И рассказывай как форма сделана, какой плагин.

Отредактируй вопрос.

  • Refguser,
    [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

  • crack_user, вопрос нужно отредактировать.
  • Ответы:

    [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" вообще нет пути этого сайта. Значит там скорее всего работает другой временный каталог.

      Но пожалуй хватит. Уже всё рассказано и разжевано,

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция DevOps Ответ

    Если $_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')));

    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');

    define('WP_TEMP_DIR', __DIR__ . '/wp-content/uploads/tmp');

    Каталог нужно создать и дать ему права на запись. Но для загрузок через Contact Form 7 лучше использовать его hooks и штатную обработку файлов, а не читать временный файл произвольно в functions.php. Проверяйте файл сразу в обработчике отправки, используйте is_uploaded_file(), move_uploaded_file() или API WordPress для загрузок.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно