Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I just did an upgrade of my server to Fedora 17 and merged some configuration files containing .rpmnew into the existing ones. I have been successfully logging my php errors in a separate log file by keeping the following in php.ini:

log_errors = On
error_log = /var/log/php-errors.log

I am not sure why the errors are being logged to /var/log/httpd/error_log after the upgrade despite keeping the settings above.

Also,

$ ls -l /var/log/php-errors.log
-rwxrwxr--. 1 apache myself 232 Dec 13 16:49 /var/log/php-errors.log

shows that apache did own the php error log file.

What could be causing PHP errors to be logged into apache error log file?

share|improve this question

migrated from stackoverflow.com Dec 17 '12 at 16:32

This question came from our site for professional and enthusiast programmers.

    
@DaveRandom, from phpinfo(), it shows the loaded config file to be /etc/php.ini, which is correct. –  Question Overflow Dec 17 '12 at 10:55
    
Have you tried setting the permissions on /var/log/php-errors.log to 666, in case the user/groups are not set up how you think they are? –  DaveRandom Dec 17 '12 at 13:49
    
@DaveRandom, thanks for the suggestion. I tried, and it still send the error to apache error log. Even disabling SELinux does not help a bit :( –  Question Overflow Dec 17 '12 at 13:59

3 Answers 3

PHP itself does not write to error_log since thats handled by Apache. PHP just throws them to Apache. You can set the log path in the .htaccess*

share|improve this answer
1  
PHP just what?? –  Dr. Dan Dec 17 '12 at 10:56
    
A separate error log can be created by setting php.ini. I did that before. –  Question Overflow Dec 17 '12 at 14:04

Try this, Enable PHP Error Logging via htaccess

http://perishablepress.com/how-to-enable-php-error-logging-via-htaccess/

share|improve this answer

I think that here it's just the generic Apache errors that are seen in /var/log/httpd/error_log.

I would insert a call to error_log('test'); into some PHP logic that is known to get interpreted when some specific page is refreshed, and if that's not seen in /var/log/php-errors.log then I'd suspect that the versions upgraded to have some kind of a different config or permissions scheme that made the old config stop working.

I'd recommend going through the 'Error handling and logging' section in /etc/php/php.ini, and checking for proper values for other directives. The directive error_reporting should be set to E_ALL or E_ALL & ~E_DEPRECATED & ~E_STRICT. The directive log_errors should be On.

If just a filename (but no path) is specified for error_log, then the file will appear in the same directory as the PHP script that calls error_log(...).

I'd also recommend specifying /tmp/php_error_log for error_log, refreshing the page, and then ls /tmp to see if the file is there.

If the file is not there, login as root, and do a search for the file name across the whole file system so see where it ended up.

Generally, the proper config to get PHP error log working in a particular directory changes across different versions of Apache, PHP, and various distros.

I can say that on Arch Linux with Apache 2.4, PHP 5.5.11 and systemd version 212-1 the config above will make the PHP error log end up somewhere similar to /tmp/systemd-private-65d4c3e3cc534155bcf3ec708c2362f6-httpd.service-h8MSsD/tmp/php_error_log.

share|improve this answer
    
Nope, those are PHP errors, not general errors. And I did give it a full path instead of a relative path. And it used to work two years ago. –  Question Overflow Apr 5 at 6:45

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.