PHP via CLI successfully logs errors to /var/log/php_errors.log.
But apache + php does not log errors.
[bla@notebook ~]$ apachectl -v
Server version: Apache/2.2.17 (Unix)
Server built: May 19 2011 03:15:39
[bla@notebook ~]$ php -v
PHP 5.3.6 with Suhosin-Patch (cli) (built: Mar 23 2011 13:28:00)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
In php.ini I have:
display_errors = On
error_reporting = E_ALL | E_STRICT
log_errors = On
error_log = php_errors.log
In httpd.conf:
ErrorLog "/var/log/httpd/error_log"
Permissions:
[bla@notebook /]$ ls -la /var/log/httpd/
-rwxrwxr-x 1 root root 133351 21.11.2011 11:18 access_log*
-rwxrwxr-x 1 root http 1307 21.11.2011 11:18 error_log*
[bla@notebook /]$ ls -la /var/log/php_errors.log
-rwxrwxr-x 1 root http 521 14.11.2011 17:31 /var/log/php_errors.log*
As you can see the Apache daemon has permissions to write into log files.
Still no errors from Apache or PHP in /var/log/php_errors.log and /var/log/httpd/error_log.
UPDATE 1.
Changed this line in php.ini:
error_log = php_errors.log
to full path:
error_log = /var/log/php_errors.log
Permissions were ok. But if someone is also having problems with it, you can debug setting permissions to logfile 0777 or changing file owner.
Enable Error Logging in php. If you want to enable PHP error logging in individual files, add this code at the top of the PHP file. ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); Now, you must enable only one statement to parse the log errors in the php.
Look for the entry Configuration File (php. Find the Error handling and logging section of the php. ini file. Make sure that both display_errors = On, display_startup_errors = On and log_errors = On are present and uncommented. Check the value of error_log - this tells you the location of the file errors are logged to.
By default, whenever an error or exception is thrown, PHP sends the error message directly to the user via STDOUT. In a command-line environment, this means that errors are rendered in the terminal. In a web environment, errors and exceptions get displayed directly in the browser.
There are usually two separate php.ini files for Apache and CLI - are you sure you're looking at the correct one?
Edit:
2 more options that I can think of:
http
user group to write to the logfile - there's probably some suphp-like behaviour and when your script is accessed through the web it is executed with/as the username that is set as it's owner (file owner of the script that is) - try changing it.I had the same problem.
Setting log_errors_max_len = 0
in php.ini worked for me.
PHP manual:
Set the maximum length of log_errors in bytes. In error_log information about the source is added. The default is 1024 and 0 allows to not apply any maximum length at all. This length is applied to logged errors, displayed errors and also to $php_errormsg, but not to explicitly called functions such as error_log().
In the past, I had no error logs in two cases:
php_error_log
file..htaccess
, for example wrong rewrite module settings. In this situation errors are logged to Apache error_log
file.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With