Page 1 of 1

php page level error handling

Posted: Wed Oct 11, 2006 5:09 pm
by murlopaz
Hi. I am trying to set the error handling directives through init_set() so that I can see php errors. This option is turned off by default
in php.ini.

I tried this, but it didn't help

Code: Select all

<?
ini_set('error_reporting', E_ALL);
error_reporting(E_ALL);
ini_set('display_errors',TRUE);
$a = 1/0;
?>

Posted: Wed Oct 11, 2006 5:11 pm
by feyd
Run the following in a new file and tell us the results please.

Code: Select all

<?php

$neg = array('off', 0, false, '', null);
$flags = array(
	'Register Globals' => 'register_globals',
	'Short Tags' => 'short_open_tag',
	'Display Errors' => 'display_errors',
	'Magic Quotes GPC' => 'magic_quotes_gpc',
	'Magic Quotes Runtime' => 'magic_quotes_runtime',
	'Magic Quotes Sybase' => 'magic_quotes_sybase',
);
$ve = phpversion();
$os = PHP_OS;
$er = intval(error_reporting());
foreach ($flags as $n => $v)
{
	$flags[$n] = (in_array(strtolower(ini_get($v)), $neg) ? 'Off' : 'On');
}
$cli = (php_sapi_name() == 'cli');
$eol = "\n";

$gle = get_loaded_extensions();
$rows = array();
$le = '';
$wide = 4;
$j = count($gle);
$pad = $wide - $j % $wide;
$len = max(array_map('strlen', $gle));
$func = create_function('$a', 'return str_pad($a, ' . intval($len) . ');');
$gle = array_map($func, $gle);
for($i = 0; $i < $j; $i += $wide)
{
	$le .= '   ' . implode('   ', array_slice($gle, $i, $wide)) . $eol;
}

$ec = array(
	'E_STRICT' => 2048, 'E_ALL' => 2047, 'E_USER_NOTICE' => 1024,
	'E_USER_WARNING' => 512, 'E_USER_ERROR' => 256, 'E_COMPILE_WARNING' => 128,
	'E_COMPILE_ERROR' => 64, 'E_CORE_WARNING' => 32, 'E_CORE_ERROR' => 16,
	'E_NOTICE' => 8, 'E_PARSE' => 4, 'E_WARNING' => 2, 'E_ERROR' => 1,
);

$e = array();
$t = $er;
foreach ($ec as $n => $v)
{
	if (($t & $v) == $v)
	{
		$e[] = $n;
		$t ^= $v;
	}
}
if (ceil(count($ec) / 2) + 1 < count($e))
{
	$e2 = array();
	foreach ($ec as $n => $v)
	{
		if (!in_array($n, $e) and $n != 'E_ALL')
		{
			$e2[] = $n;
		}
	}
	$er = $er . ' ((E_ALL | E_STRICT) ^ ' . implode(' ^ ', $e2) . '))';
}
else
{
	$er = $er . ' (' . implode(' | ', $e) . ')';
}

if (!$cli)
{
	echo '<html><head><title>quick info</title></head><body><pre>', $eol;
}

echo 'PHP Version: ', $ve, $eol;
echo 'PHP OS: ', $os, $eol;
echo 'Error Reporting: ', $er, $eol;
foreach ($flags as $n => $v)
{
	echo $n, ': ', $v, $eol;
}
echo 'Loaded Extensions:', $eol, $le, $eol;

if (!$cli)
{
	echo '</pre></body></html>', $eol;
}

?>

Posted: Wed Oct 11, 2006 5:13 pm
by volka
hm strange, works fine for me. The output is
Warning: Division by zero in filename on line x

Posted: Wed Oct 11, 2006 5:15 pm
by murlopaz
This is what I got.
FYI: I am using the godaddy hosting service, error displaying is turned off by default.

Code: Select all

PHP Version: 4.3.11
PHP OS: WINNT
Error Reporting: 2047 (E_ALL)
Register Globals: Off
Short Tags: Off
Display Errors: Off
Magic Quotes GPC: Off
Magic Quotes Runtime: Off
Magic Quotes Sybase: Off
Loaded Extensions:
   standard    bcmath      calendar    ctype    
   com         ftp         mysql       odbc     
   overload    pcre        session     tokenizer
   xml         wddx        zlib        ISAPI    
   domxml      gd          gettext     ming     
   xmlrpc      xslt

I guess it doesn't allow ini_set() for some reason?

Posted: Wed Oct 11, 2006 6:52 pm
by feyd
If ini_set() is in fact turned off, then you may need to use an .htaccess file to set it (if they allow those) or potentially find new hosting. Although you should be able to test most of everything from a local (your computer) server.

Code: Select all

<?php

ini_set('display_errors', 1);

$zero = 0;
$one = 1;

$error = $one / $zero;

?>

Posted: Wed Oct 11, 2006 7:31 pm
by RobertGonzalez
murlopaz wrote:FYI: I am using the godaddy hosting service, error displaying is turned off by default.

I guess it doesn't allow ini_set() for some reason?
If you are on a Windows server their PHP installs are heavily restricted. If you are on a linux server, you should have no problem using ini_set().