ini_set() выдает 500, которые не регистрируются в журнале ошибок Apache

#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 , который, если не перехвачен, приводит к строке like PHP Error: Uncaught TypeError ... in file ... on line .... . Может быть, где-то есть пользовательский обработчик исключений, который его улавливает и не регистрирует в обычном журнале?

2. Определенно подумал, что это странно. Обработчика нет, только пользовательский путь. Возможно, он действует так, как будто игнорирует настройки ini?, Мне просто не хотелось отлаживать этот аспект, как только у меня появилось решение выше.

3. Обработчик может быть где угодно в приложении — либо с set_exception_handler помощью, либо просто try { ... } catch(Throwable $e) { ... } где-то.

4. Это может быть последнее, хотя я бы подумал (?), Что это подавит 500.

5. Зависит от того, что делает обработчик; он вполне может вызвать сам статус 500 (например, с помощью вызова header() или какого-либо специфичного для фреймворка механизма), а затем отобразить пользовательскую страницу ошибок, а не пустой белый экран PHP по умолчанию.