2015-07-23 5 views
1

Могу ли я перенаправить на другую страницу, если в PHP-коде есть какая-либо ошибка синтаксического анализа. Установив обработчик ошибок, я могу только переадресовывать предупреждения, уведомлять об ошибках, но не анализировать ошибки. Пожалуйста, помогите мне. мой код: -Ошибка перенаправления парса в PHP

<?php 
    set_error_handler("error_handle"); 
    function getIp(){ 
     if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
      $ip = $_SERVER['HTTP_CLIENT_IP']; 
     } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     } else { 
      $ip = $_SERVER['REMOTE_ADDR']; 
     } 
     return $ip; 
    } 
    function error_handle($errno,$error_message,$error_file,$error_line,$error_context){ 
     ob_start(); 
     session_start(); 
     include 'dbconnection.php'; 
     echo $hash1=$_SESSION['Hash1']; 
     echo $hash3=$_SESSION['Hash3']; 
     $ip=getIp(); 

     header('Location:error.php'); 
    } 

    echo $test; 
?> 
+2

Ошибки анализа не улавливаются. Вы не можете ловить их и обрабатывать ... пока. Посмотрите на PHP 7 –

ответ

2

PHP не будет предоставлять код, который содержит синтаксическую ошибку. Разбираем ошибки очень легко поймать, используя опцию -l (строчная L) с PHP в командной строке:

$ php -l myfile.php 

Это не будет работать код, а просто будет сообщать о любых ошибок синтаксического анализа.

EDIT: Я не рекомендую использовать код для обнаружения ошибок синтаксического анализа, но только для того, чтобы доказать, что Хобо ошибается, когда он говорит, что «это невозможно сделать», следующая функция (хотя и не рекомендуется) будет перенаправляться, если ошибка синтаксического анализа обнаружен во включенном файле. Обратите внимание, что для этого решения требуется, чтобы php-cli был установлен на сервере:

/** 
* @param string $filename 
* @return NULL 
*/ 
function safeInclude($filename) 
{ 

    exec('php -l ' . $filename, $output, $parse_error); 
    if (!$parse_error) 
    { 
     include($filename); 
    } 
    else 
    { 
     // include another file or redirect using header() 
    } 
} 
+0

Это не ловушка ошибок. Это просто использование интерпретатора PHP как linter. OP хочет уловить ошибки синтаксиса и обработать их в коде. Этого нельзя сделать в текущих версиях, но PHP7 предлагает некоторые функции в этой области. –

+0

Спасибо за решение, но я хочу сохранить эту ошибку в базе данных. есть ли какое-либо его решение –

+0

Nimish, массив $ ouptut будет иметь ошибку. Вы можете сохранить содержимое $ output [0] в базу данных перед перенаправлением. –

Смежные вопросы