Php include file fatal error

В include выдаёт ошибку

Все файлы в инклуде лежат рядом с index.php. И ещё какой-то колл ошибку вызывает. Вот код index.php:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 error_reporting(E_ALL^E_NOTICE); define ( 'TIMER',microtime(1)); define ( 'SAMP_STATS',true ); define ( 'ROOT_DIR',dirname ( 'index.php' ) ); define ( 'SAMP_STATSRU',ROOT_DIR .'/engine'); session_start(); include '/core.php'; include '/gzdoc.php'; $main->tpl->set('',$main->tpl->head()); $main->tpl->set('',$main->tpl->ajax()); $main->tpl->set('',$u_panel); $main->tpl->set('',$tags); $main->tpl->set('',$main->tpl->titla()); $main->tpl->set('',$language); $main->tpl->set('',' 
cache_update(\''.$game.'\');
'
); $main->tpl->set('',$nav); $main->tpl->parse(); $main->tpl->fill(); $main->db->close(); gzdocout(); ?>

Источник

Есть ли способ пропустить фатальную ошибку из файла include в php?

Если я включаю файл в php. Если в этом php есть какая-то фатальная ошибка, есть ли способ пропустить это.

Мне нужно включить этот файл somefile.php. Он может вернуть фатальную ошибку для некоторых хостов. Я хочу пропустить этот файл для этого хоста.

С помощью этого вы можете определить свою собственную функцию продолжения, которая будет принята в случае фатальной ошибки. Это использует register_shutdown_function() , чтобы перехватить фатальную ошибку.

function my_continuation_func($filename, $arg2) < // On fatal error during include, continue script execution from here. // When this function ends, or if another fatal error occurs, // the execution will stop. >include_try('my_continuation_func', array($filename, $arg2)); $data = include($filename); $error = include_catch(); 

Если возникает фатальная ошибка (например, ошибка синтаксического анализа), выполнение script будет продолжено с my_continuation_func() . В противном случае include_catch() возвращает true , если во время разбора произошла ошибка.

Любой вывод (например, echo ‘something’; ) из include() рассматривается как ошибка. Если вы не включили вывод, передав true в качестве третьего аргумента include_try() .

Этот код автоматически позаботится о возможных изменениях рабочего каталога в функции выключения.

Вы можете использовать это для любого количества включений, но вторая фатальная ошибка, которая возникает, не может быть перехвачена: выполнение остановится.

Функции, которые необходимо включить:

function include_try($cont_func, $cont_param_arr, $output = false) < // Setup shutdown function: static $run = 0; if($run++ === 0) register_shutdown_function('include_shutdown_handler'); // If output is not allowed, capture it: if(!$output) ob_start(); // Reset error_get_last(): @user_error('error_get_last mark'); // Enable shutdown handler and store parameters: $params = array($cont_func, $cont_param_arr, $output, getcwd()) $GLOBALS['_include_shutdown_handler'] = $params; >function include_catch() < $error_get_last = error_get_last(); $output = $GLOBALS['_include_shutdown_handler'][2]; // Disable shutdown handler: $GLOBALS['_include_shutdown_handler'] = NULL; // Check unauthorized outputs or if an error occured: return ($output ? false : ob_get_clean() !== '') || $error_get_last['message'] !== 'error_get_last mark'; >function include_shutdown_handler() < $func = $GLOBALS['_include_shutdown_handler']; if($func !== NULL) < // Cleanup: include_catch(); // Fix potentially wrong working directory: chdir($func[3]); // Call continuation function: call_user_func_array($func[0], $func[1]); >> 

Fatal означает смертельный…
Невозможно оправиться от фатальной ошибки.

PHP не будет терпеть с Fatal Errors. Лучше всего проверить включенный файл и решить его.
На самом деле вы можете попробовать register-shutdown-function, но не рекомендуется убегать от ваших проблем.

 register_shutdown_function(function () < $error = error_get_last(); // to make sure that there is any fatal error if (isset($error) && ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR || $error['type'] == E_CORE_ERROR)) < echoOk(); >>); include "somefile.php"; echoOk(); 

Но вы можете сделать это только один раз. Любая дальнейшая фатальная ошибка прекратит выполнение.

edit: я пропустил слово со смертельным исходом. Как уже говорилось, вы не можете восстановить фатальную ошибку. Если это всего лишь исключение, то будет работать поспешный ответ ниже.

Включение другого php-модуля совпадает с тем, что этот код вставлен в строку, поэтому простой оператор try-catch должен работать:

 catch (Exception $e) < echo 'Caught exception: ', $e->getMessage(), "\n"; > echo "OK"; ?> 

Попробуйте установить функцию set_error_handler(), которая не умирает от фатальных ошибок, но вместо этого Apache разбился. Другими словами, PHP должен умереть, так что система не работает.

Неустранимая ошибка означает, что что-то серьезно не так с кодом включения. Как сказал @Orangepill, нет способа остановить это фатальное сообщение об ошибке. Пожалуйста, просмотрите свое кодирование и найдите ошибку.

Да, есть. Это можно сделать с помощью простого оператора if

Источник

Читайте также:  Footer php для wordpress
Оцените статью