#php
#php
Вопрос:
Следующий вызов ini_set()
выдает ошибку 500, которая не зарегистрирована в журнале ошибок Apache. Почему это происходит?
ini_set('session.cookie_secure', 1);
Ответ №1:
Это связано с другой директивой дальше. Это воспроизводимый пример:
<?php
declare(strict_types=1);
ini_set('session.cookie_secure', 1);
В ini_set()
документации указано, что свойство ini должно быть строкой:
ini_set ( string $varname , string $newvalue ) : string
Следовательно, комбинация заканчивается на 500. При запуске Apache наш сервер не регистрирует ошибку там, где я ожидаю. Возможно, это связано с ini_set()
ошибкой, наш журнал ошибок представляет собой пользовательский путь к файлу, поэтому, возможно, он где-то зарегистрирован или что-то еще.
Вот как устранить ошибку:
<?php
declare(strict_types=1);
ini_set('session.cookie_secure', '1'); // Must be string
Надеюсь, это поможет кому-то найти ответ на этот немного странный сценарий.
Комментарии:
1. Странно, что вы не видите зарегистрированной ошибки; это должно выдать a
TypeError
, который, если не перехвачен, приводит к строке likePHP Error: Uncaught TypeError ... in file ... on line ....
. Может быть, где-то есть пользовательский обработчик исключений, который его улавливает и не регистрирует в обычном журнале?2. Определенно подумал, что это странно. Обработчика нет, только пользовательский путь. Возможно, он действует так, как будто игнорирует настройки ini?, Мне просто не хотелось отлаживать этот аспект, как только у меня появилось решение выше.
3. Обработчик может быть где угодно в приложении — либо с
set_exception_handler
помощью, либо простоtry { ... } catch(Throwable $e) { ... }
где-то.4. Это может быть последнее, хотя я бы подумал (?), Что это подавит 500.
5. Зависит от того, что делает обработчик; он вполне может вызвать сам статус 500 (например, с помощью вызова
header()
или какого-либо специфичного для фреймворка механизма), а затем отобразить пользовательскую страницу ошибок, а не пустой белый экран PHP по умолчанию.