Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are PHP errors printed twice?

Tags:

php

php-ini

Summary

Amazingly I could find nothing about this on Google or SO. When I throw an exception in PHP it appears in my console twice, complete with error message and stack trace. The first time it's printed it says "PHP Fatal error: ..." and the second time it just says "Fatal error: ...". I haven't tested this is the Apache plugin version.

Example

With some namespaces and paths shortened with '...' for safety:

$ php code/com/.../tabular_data.php PHP Fatal error:  Uncaught exception 'Exception' with message 'File type not supported' in /home/codemonkey/.../tabular_data.php:56 Stack trace: #0 /home/codemonkey/.../tabular_data.php(88): com\...\Tabular_Data->loadFromFile('/home/codemonke...', false) #1 /home/codemonkey/.../tabular_data.php(95): com\...\Tabular_Data::fromFile('/home/codemonke...') #2 {main}   thrown in /home/codemonkey/.../tabular_data.php on line 56  Fatal error: Uncaught exception 'Exception' with message 'File type not supported' in /home/codemonkey/.../tabular_data.php:56 Stack trace: #0 /home/codemonkey/.../tabular_data.php(88): com\...\Tabular_Data->loadFromFile('/home/codemonke...', false) #1 /home/codemonkey/.../tabular_data.php(95): com\...\Tabular_Data::fromFile('/home/codemonke...') #2 {main}   thrown in /home/codemonkey/.../tabular_data.php on line 56 

Question

I assume it has something to do with stderr and stdout both printing the error. In any case how do I ask PHP nicely to only print it once, preferably to stderr?


Version output

PHP 5.3.9 (cli) (built: Jan 11 2012 17:09:48)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

The code

http://pastebin.com/iBUGJ2eY
This is the exact code that displays double exceptions for me, with namespaces and paths edited to foos. Note that I always get double exceptions in the command line on this installation. I'm all but certain that the issue lies in the PHP configuration.

like image 352
Hubro Avatar asked Jan 25 '12 11:01

Hubro


People also ask

What causes php error?

A PHP Error occurs when something is wrong in the PHP code. The error can be as simple as a missing semicolon, or as complex as calling an incorrect variable.


Video Answer


1 Answers

Got it reproduced. The first error message is a result of the log_errors setting and goes to STDERR.

The second is a result of display_errors and goes to STDOUT.

Both settings can be altered during runtime. So in order to "ask PHP nicely", this suffices:

ini_set('log_errors', 1); ini_set('display_errors', 0); 
like image 124
Linus Kleen Avatar answered Oct 08 '22 03:10

Linus Kleen