在PHP中重定向解析错误

时间:2015-07-23 03:18:38

标签: 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;
?>

1 个答案:

答案 0 :(得分:2)

PHP不会呈现具有解析错误的代码。在命令行中使用PHP的-l(小写L)选项很容易捕获解析错误:

$ php -l myfile.php

这不会运行代码,只会报告任何解析错误。

编辑:我不建议使用代码来检测解析错误,但只是为了在他说“无法完成”时证明Hobo错误,如果检测到解析错误,以下函数(虽然不推荐)会重定向在包含文件中。请注意,此解决方案要求在服务器上安装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()
    }
}