Разное поведение при подключении файла

Вероломство

В /public/index.php есть некоторые константы

PHP:
  1. define(‘D_S’, DIRECTORY_SEPARATOR);
  2. define(‘D_R’, dirname(__DIR__) . D_S);
  3. define(‘APP’, D_R . ‘app’ . D_S);

Теперь:

PHP:
  1. // Всё нормально
  2. require_once APP . ‘views’ . D_S . ‘layouts’ . D_S . ‘infoPanel.php’;
  3.  
  4. // ошибка в имени папки views — БРАУЗЕР выкидывает ошибку 500
  5. require_once APP . ‘view’ . D_S . ‘layouts’ . D_S . ‘infoPanel.php’;
  6.  
  7. // ТА ЖЕ ошибка в имени папки views — ошибка перехвачена обработчиком ошибок (файл не найден) всё нормально
  8. require APP . ‘view’ . D_S . ‘layouts’ . D_S . ‘infoPanel.php’;

Почему при ошибке с require_once не ловится ошибка обработчиком, а выдаётся самим браузером?

 

miketomlin

Не браузером, а пыхом/require(_once). А должна ловиться? Где об этом написано? Как понять, что третья перехвачена? Может, до третьей команды просто дело не доходит? ;)

 

Вероломство

@miketomlin это же не 3 команды — это три варианта одной и той же команды :)

вот с ошибкой в имени папки

PHP:
  1. require_once APP . ‘view’ . D_S . ‘layouts’ . D_S . ‘infoPanel.php’;

https://ibb.co/W2Kbdcr

PHP:
  1. require APP . ‘view’ . D_S . ‘layouts’ . D_S . ‘infoPanel.php’;

https://ibb.co/TLNmNvh

 

miketomlin

Одной и той же команды в одном и том же месте? Если да, то не знаю. Я вообще думал, что любые ошибки require(_once) не перехватываются.

 

Вероломство

:) лови отлов

PHP:
  1. spl_autoload_register(function ($class) {
  2.     $file = D_R . str_replace(‘\’, D_S, $class) . ‘.php’;
  3.  
  4.     if (is_file($file)){
  5.         require_once $file;
  6.     }
  7. });
  8.  
  9. Debug::run(true, false);
  10.  
  11. new A();
  12.  
  13. die();

https://ibb.co/1zQYpMV

PHP:
  1. spl_autoload_register(function ($class) {
  2.     $file = D_R . str_replace(‘\’, D_S, $class) . ‘.php’;
  3.  
  4.     require_once $file;
  5. });
  6.  
  7. Debug::run(true, false);
  8.  
  9. new A();
  10.  
  11. die();

https://ibb.co/k29PWx8

В обоих случаях использовалась require_once, но во втором случае без проверки существования файла.

Вот и вопрос: почему в вопросе при отсутствии файла (ошибка в имени папки) обработчик не отловил ошибку require_once?

У меня обработчик написан на отлов всего: исключения, ошибки, фатальные ошибки, неперехваченные ошибки )))

Какая-то супернеперехваченная ошибка та, что в вопросе? :)

 

Вероломство

короче в чём прикол: браузер Edge выкидывает свою страницу 500, когда срабатывает обработчик ошибок, там я устанавливаю код 500 и подключаю лог-страницу, так вот браузер не даёт отобразить её, тупо клюёт на установку кода 500, пока У ПОДКЛЮЧАЕМОЙ ЛОГ-СТРАНИЦЫ используется require_once, после изменения в обработчике подключения на require всё нормально

ну и вообще мне посоветовали: если с функционалом страницы, то юзать require_once, если шаблоны-виды, то require

ну вот пока я в подключении ошибку не сделал, то и не замечал, всё на require_once работало

 

Добавить комментарий

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