skip to Main Content

Test php code

<?php 
ini_set('error_reporting',E_ALL);
ini_set('display_errors','1');

echo 'test';
echo $x; //undeclared variable
echo 'test2';
?>

This code on IIS6/PHP5.3.6 outputs “test Notice: Undefined variable: x in …test.php on line 8 test2”

On IIS8.5/PHP5.5.21 (also running plesk 12) it outputs only the error message.

Is there any way to get it to output all content with the errror message inline with the content?

I have checked all settings (ini, iis, plesk) I could think of to no avail, is this a design change in php 5.5, or is there a setting I missed?

Thank you

P.S. This is only for debugging purposes.

2

Answers


  1. Chosen as BEST ANSWER

    I found the configuration setting that causes the changed behavior.

    It is a FastCGI configuration setting "Standard error mode" https://technet.microsoft.com/en-us/library/hh831548.aspx

    In IIS Manager, click on the server node and find the FastCGI Settings (In the IIS group), You will see one ore more defined applications, click on the php application and click 'edit' on the action menu to change the setting. (to see the errors inline with the content, select 'IgnoreAndReturn200'. (as noted in the technet document, this setting is intended for debugging purposes)


  2. You can refer to: http://php.net/manual/en/function.set-error-handler.php

    Example (from php website):

    <?php
    // error handler function
    function myErrorHandler($errno, $errstr, $errfile, $errline)
    {
        if (!(error_reporting() & $errno)) {
            // This error code is not included in error_reporting
            return;
        }
    
        switch ($errno) {
        case E_USER_ERROR:
            echo "<b>My ERROR</b> [$errno] $errstr<br />n";
            echo "  Fatal error on line $errline in file $errfile";
            echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />n";
            echo "Aborting...<br />n";
            exit(1);
            break;
    
        case E_USER_WARNING:
            echo "<b>My WARNING</b> [$errno] $errstr<br />n";
            break;
    
        case E_USER_NOTICE:
            echo "<b>My NOTICE</b> [$errno] $errstr<br />n";
            break;
    
        default:
            echo "Unknown error type: [$errno] $errstr<br />n";
            break;
        }
    
        /* Don't execute PHP internal error handler */
        return true;
    }
    
    // function to test the error handling
    function scale_by_log($vect, $scale)
    {
        if (!is_numeric($scale) || $scale <= 0) {
            trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", E_USER_ERROR);
        }
    
        if (!is_array($vect)) {
            trigger_error("Incorrect input vector, array of values expected", E_USER_WARNING);
            return null;
        }
    
        $temp = array();
        foreach($vect as $pos => $value) {
            if (!is_numeric($value)) {
                trigger_error("Value at position $pos is not a number, using 0 (zero)", E_USER_NOTICE);
                $value = 0;
            }
            $temp[$pos] = log($scale) * $value;
        }
    
        return $temp;
    }
    
    // set to the user defined error handler
    $old_error_handler = set_error_handler("myErrorHandler");
    
    // trigger some errors, first define a mixed array with a non-numeric item
    echo "vector an";
    $a = array(2, 3, "foo", 5.5, 43.3, 21.11);
    print_r($a);
    
    // now generate second array
    echo "----nvector b - a notice (b = log(PI) * a)n";
    /* Value at position $pos is not a number, using 0 (zero) */
    $b = scale_by_log($a, M_PI);
    print_r($b);
    
    // this is trouble, we pass a string instead of an array
    echo "----nvector c - a warningn";
    /* Incorrect input vector, array of values expected */
    $c = scale_by_log("not array", 2.3);
    var_dump($c); // NULL
    
    // this is a critical error, log of zero or negative number is undefined
    echo "----nvector d - fatal errorn";
    /* log(x) for x <= 0 is undefined, you used: scale = $scale" */
    $d = scale_by_log($a, -2.5);
    var_dump($d); // Never reached
    ?>
    

    Which gives a example output of:

    vector a
    Array
    (
        [0] => 2
        [1] => 3
        [2] => foo
        [3] => 5.5
        [4] => 43.3
        [5] => 21.11
    )
    ----
    vector b - a notice (b = log(PI) * a)
    <b>My NOTICE</b> [1024] Value at position 2 is not a number, using 0 (zero)<br />
    Array
    (
        [0] => 2.2894597716988
        [1] => 3.4341896575482
        [2] => 0
        [3] => 6.2960143721717
        [4] => 49.566804057279
        [5] => 24.165247890281
    )
    ----
    vector c - a warning
    <b>My WARNING</b> [512] Incorrect input vector, array of values expected<br />
    NULL
    ----
    vector d - fatal error
    <b>My ERROR</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br />
      Fatal error on line 35 in file trigger_error.php, PHP 5.2.1 (FreeBSD)<br />
    Aborting...<br />
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search