0

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.

4
  • check this: stackoverflow.com/questions/4261133/… Commented Feb 4, 2015 at 16:50
  • What's does PHP 5.5.21 display? Commented Feb 4, 2015 at 16:51
  • Tested with PHP 5.3.29, PHP 5.4.36, PHP 5.5.14 and PHP 5.6.4 and got the same output for all. Commented Feb 4, 2015 at 16:54
  • @axiac, php 5.5.21 displays just the error message "PHP Notice: Undefined variable: x in ...\httpdocs\wordpress\test.php on line 8" Commented Feb 4, 2015 at 17:33

2 Answers 2

2

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)

Sign up to request clarification or add additional context in comments.

1 Comment

Wow... I had the same issue and it was driving me crazy! Thanks for figuring it out.
0

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 a\n";
$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 warning\n";
/* 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 error\n";
/* 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 />

1 Comment

Thank you, I'm working with existing frameworks (wordpress, magento, etc) so I don't want to add my own error handler, i'm looking for a solution to the default php behavior. Some setting is causing the different behavior on this server and i'm looking for an answer that will identify the setting I need to change.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.