PHP Log All Errors to a Log File to Get Detailed Information

Posted on in Categories Apache, Howto, lighttpd, Linux, php, Security, UNIX last updated August 23, 2017

PPHP offers a simple but effective solution to log all errors to a log file. On all production web server, you must turn off displaying an error to end users via a web browser. Remember PHP gives out lots of information about the path, database schema and all other sorts of sensitive information. You are strongly advised to use error logging in place of error displaying on production web sites. The idea is quite simple only developer should able to see PHP error log.

Find out path to php.ini

The default paths are as follows for popular unix like system:

  • CentOS Linux/RHEL v5.x/6.x/7.x : /etc/php.ini
  • Ubuntu / Debian Linux (PHP 7 fpm) : /etc/php/7.0/fpm/php.ini
  • Ubuntu / Debian Linux (PHP 5.6 fpm) : /etc/php/5.6/fpm/php.ini
  • Ubuntu / Debian Linux (PHP 7 with Apache 2) : /etc/php/5.6/apache2/php.ini
  • Ubuntu / Debian Linux (PHP 5.6 with Apache 2) : /etc/php/7/apache2/php.ini
  • FreeBSD unix server v9.x/10.x/11.x+: /usr/local/etc/php.ini

You can use the following command to find out path to php.ini:
# php5-cgi -i | grep php.ini
Sample outputs:

<tr><td class="e">Loaded Configuration File </td><td class="v">/etc/php5/cgi/php.ini </td></tr>

# php-fpm5.0 -i | grep php.ini
# php-fpm7.0 -i | grep php.ini

Sample outputs:

Configuration File (php.ini) Path => /etc/php/7.0/fpm
Loaded Configuration File => /etc/php/7.0/fpm/php.ini

How do I log all php errors to a log fiie?

Just add following line to /etc/php.ini to log errors to specified file, say /var/log/php-scripts.log or /var/log/httpd/php-error.log:
# vi /etc/php.ini
Find and modify the error_log directive as follows:
error_log = /var/log/php-scripts.log
Make sure display_errors set to Off (no errors to end users):
display_errors = Off
Save and close the file. Restart the Apache web server or restart php7-fpm/php5-fpm service as follows:
# /etc/init.d/httpd restart
OR
# systemctl restart httpd
OR
$ sudo systemctl restart php7.0-fpm.service
OR
$ sudo systemctl restart php-fpm

How do I log errors to syslog or Windows Server Event Log?

Modify error_log as follows :
error_log = syslog

How do I see logs?

Login using ssh or download a log file /var/log/php-scripts.log using sftp client:
$ sudo tail -f /var/log/php-scripts.log
Sample outputs:

Fig.01: PHP error log output
Fig.01: PHP error log output

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

Share this on (or read 32 comments/add one below):

32 comment

  1. Hellow,

    Is it possible to log errors of diffrent websites in different errorfiles?

    I have a server that’s hosting different websites and I want that all of the php-errors are logged in different file. For each website a file.

    Is that possible and how do I do it?

    tnx in advance

  2. I think it would need to enable this tag (log_errors = On) php.ini to get this complete.

    But I suggest it’s not a good Idea to enable on the main configuration file where a server hosted multiple sites. Just add this entries on .htaccess make sense on such case to trouble shoot.

  3. Hey ,

    I think if you are error_log directive is set to syslog, then logs are save at /var/log/message.
    On my server its set to syslog and the file /var/log/message is also updated but I am not able to find any php log data in this file.

    any hint wat’s happening?

  4. It seems, user, under which you run php, does not have write permissions on specified file/directory. Check parent directory permissions, if is it writable.

    I also had the same issue. I had path and settings for logging error file, but saw no file created till I set normal permissions.

  5. If you redirect error output to a custom file, you’d have to care about log rotation yourself or it’ll grow infinitely.
    If error logging is handled by the web server (default), then your web server will likely take care of that.

  6. I I have a live website, indianglassart . com in this site not connect database, and return automatic error_log file. my question for it why reason for not connect database and return error_log fie, please help me…..!

    Thanks !

  7. I have downloaded xampp 5.6.21 on my machine which has windows 7 ultimate . When tried running phpinfo() , I was able to get the path of the error log file in php as C:xamppphplogsphp_error_log . But when i checked out the actual folder through my browser , the logs folder itself was not visible .Is there any way of accessing my error log file ?

  8. Other useful directive is mail.log, see description:
    “The path to a log file that will log all mail() calls. Log entries include the full path of the script, line number, To address and headers.”

Leave a Comment