If you have a problem with log file permission *silently*
it's best to leave error_log directive unset so errors will be written in your Apache log file for current VirtualHost.
error_log
(PHP 4, PHP 5)
error_log — Enviar un mensaje de error a alguna parte
Descripción
Envía un mensaje de error al registro del servidor web, a un puerto TCP o a un archivo.
Lista de parámetros
- mensaje
-
El mensaje de error a ser registrado.
- tipo_mensaje
-
Indica a dónde debe ir el mensaje. Los tipos de mensaje posibles son los siguientes:
Tipos de registro de error_log() 0 mensaje es enviado al registro de sistema de PHP, usando el mecanismo de registro del Sistema Operativo o un archivo, dependiendo del valor de la directiva de configuración error_log. Esta es la opción predeterminada. 1 mensaje es enviado por correo electrónico a la dirección en el parámetro destino . Este es el único tipo de mensaje en donde el cuarto parámetro, cabeceras_extra , es usado. 2 mensaje es enviado a través de la conexión de depuración de PHP. Esta opción está disponible únicamente si la depuración remota ha sido habilitada. En este caso el parámetro destino indica el nombre de host o dirección IP y, opcionalmente, el número de puerto del socket que recibe la información de depuración. Esta opción sólo está disponible en PHP 3. 3 mensaje es agregado al final del archivo destino . Un salto de línea no es agregado automáticamente al final de la cadena mensaje . - destino
-
El destino. Su significado depende del parámetro tipo_mensaje como se describió anteriormente.
- cabeceras_extra
-
Las cabeceras adicionales. Es usado cuando el parámetro tipo_mensaje es definido a 1. Este tipo de mensaje usa la misma función interna que usa mail().
Valores retornados
Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.
Ejemplos
Example #1 Ejemplos de error_log()
<?php
// Enviar una notificación a través del registro del servidor si no nos
// podemos conectar a la base de datos.
if (!Ora_Logon($nombre_usuario, $contrasenya)) {
error_log("¡La base de datos Oracle no está disponible!", 0);
}
// Notificar al administrador por correo electrónico si se agota FOO
if (!($foo = allocate_new_foo())) {
error_log("¡Problemas, se nos acaban los FOOs!", 1,
"operador@example.com");
}
// otras formas de llamar error_log():
error_log("Ha fallado!", 2, "127.0.0.1:7000");
error_log("Ha fallado!", 2, "host_registro");
error_log("Ha fallado!", 3, "/var/tmp/mis-errores.log");
?>
error_log
01-Sep-2009 12:42
26-Aug-2009 05:22
After scouring the internet for getting event logging to
work in syslog on Windows 2003, I found the following
from this post and was able to successfully get Windows
Event Viewer to log PHP errors/notices:
http://forums.iis.net/p/1159662/1912015.aspx#1913338
1. Copy the PHP 5 binaries to "C:\php".
2. Right-click My Computer and select Properties to bring
up the Computer Properties dialog. Switch to the Advanced
tab and click Environment Variables. Find the system
environment variable PATH, edit it and add ";C:\php"
(without the quotes) to the end.
3. Make sure that the configuration file "php.ini" resides
in the directory "C:\php" and contains the correct path
settings.
4. DELETE any old "php.ini" files from "C:\WINDOWS"
and other directories.
5. Open REGEDIT, navigate to the key
"HKLM\SOFTWARE\PHP" and DELETE the string value
"IniFilePath" from there. It is outdated and no longer
necessary!
6. Modify NTFS security permissions of the directory
"C:\php" to give Read and Execute permissions to (1) the
IIS Guest Account and (2) the group IIS_WPG.
7. Modify NTFS security permissions of the directories
"C:\php\session" and "C:\php\upload" to give additional
Modify permissions to (1) the IIS Guest Account and (2)
the group IIS_WPG.
8. Navigate to the registry key
"HKLM\SYSTEM\CurrentControlSet\Services\Eventlog
\Application" and edit the value "CustomSD" there. Find
the substring "(D;;0xf0007;;;BG)" which Denies access to
the application event log for Builtin Guest accounts (like
the IIS Web User account) and replace this substring with
"(A;;0x3;;;BG)" which allows read and write access. Please
pay attention to leave the rest of the security string intact.
Damaging this value can have dangerous effects!
9. Create or update the registry key
"HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application\
PHP-5.2.0" (adapt the last to your version part
if necessary) with the following values:
* "EventMessageFile" (REG_EXPAND_SZ) = "C:\php\php5ts.dll"
* "TypesSupported" (REG_DWORD) = 7
16-Nov-2008 04:20
If you are trying to capture PHP errors to a text file on IIS ensure that two things are set.
1) Only one error log option is set. IE:
; Log errors to specified file.
error_log = "c:\php\errorlog.txt"
; Log errors to syslog (Event Log on NT, not valid in Windows 95).
;error_log = syslog
2) The IUSR account has write and modify permissions to e rrorlog.txt .
28-Oct-2008 04:03
<?php
//Multiline error log class
// ersin güvenç 2008 eguvenc@gmail.com
//For break use "\n" instead '\n'
Class log {
//
const USER_ERROR_DIR = '/home/site/error_log/Site_User_errors.log';
const GENERAL_ERROR_DIR = '/home/site/error_log/Site_General_errors.log';
/*
User Errors...
*/
public function user($msg,$username)
{
$date = date('d.m.Y h:i:s');
$log = $msg." | Date: ".$date." | User: ".$username."\n";
error_log($log, 3, self::USER_ERROR_DIR);
}
/*
General Errors...
*/
public function general($msg)
{
$date = date('d.m.Y h:i:s');
$log = $msg." | Date: ".$date."\n";
error_log($msg." | Tarih: ".$date, 3, self::GENERAL_ERROR_DIR);
}
}
$log = new log();
$log->user($msg,$username); //use for user errors
//$log->general($msg); //use for general errors
?>
17-Jun-2008 05:37
When logging to apache on windows, both error_log and also trigger_error result in an apache status of error on the front of the message. This is bad if all you want to do is log information. However you can simply log to stderr however you will have to do all message assembly:
LogToApache($Message) {
$stderr = fopen('php://stderr', 'w');
fwrite($stderr,$Message);
fclose($stderr);
}
16-Feb-2008 11:32
Be carefull. Unexpected PHP dies when 2GByte of file log reached (on systems having upper file size limit).
A work aorund is rotate logs :)
01-Jan-2008 02:16
"It appears that the system log = stderr if you are running PHP from the command line"
Actually, it seems that PHP logs to stderr if it can't write to the log file. Command line PHP falls back to stderr because the log file is (usually) only writable by the webserver.
11-Oct-2007 10:00
On a Mac running OS X, for the error logging to work I needed to put this in my php.ini:
error_log = /tmp/php_errors.log
Attempting to put the log in other locations did not work, probably due to permission issues.
27-Jun-2007 01:05
Note that since typical email is unencrypted, sending data about your errors over email using this function could be considered a security risk. How much of a risk it is depends on how much and what type of information you are sending, but the mere act of sending an email when something happens (even if it cannot be read) could itself imply to a sophisticated hacker observing your site over time that they have managed to cause an error.
Of course, security through obscurity is the weakest kind of security, as most open source supporters will agree. This is just something that you should keep in mind.
And of course, whatever you do, make sure that such emails don't contain sensitive user data.
02-Nov-2006 11:28
Beware! If multiple scripts share the same log file, but run as different users, whichever script logs an error first owns the file, and calls to error_log() run as a different user will fail *silently*!
Nothing more frustrating than trying to figure out why all your error_log calls aren't actually writing, than to find it was due to a *silent* permission denied error!
28-Aug-2006 10:33
Hi !
Another trick to post "HTML" mail body. Just add "Content-Type: text/html; charset=ISO-8859-1" into extra_header string. Of course you can set charset according to your country or Env or content.
EG: Error_log("<html><h2>stuff</h2></html>",1,"eat@joe.com","subject :lunch\nContent-Type: text/html; charset=ISO-8859-1");
Enjoy !
26-Aug-2005 08:52
Beware the size of your custom error_log!
Once it exceeds 2GB the function errors, ending your script at the error_log() line. I'm sure this differs from OS to OS, but I have seen it die writing to ext2 under modern Linux systems.
25-Jul-2005 09:04
It appears that the system log = stderr if you are running PHP from the command line, and that often stderr = stdout. This means that if you are using a custom error to both display the error and log it to syslog, then a command-line user will see the same error reported twice.
21-Jul-2005 05:39
It appears that error_log() only logs the first line of multi-line log messages. To log a multi-line message, either log each line individually or write the message to another file.
20-Apr-2005 04:21
In the case of missing your entries in the error_log file:
When you use error_log in a script that does not produce any output, which means that you cannot see anything during the execution of the script, and when you wonder why there are no error_log entries produced in your error_log file, the reasons can be:
- you did not configure error_log output in php.ini
- the script has a syntax error and did therefore not execute
when using error_log to send email, not all elements of an extra_headers string are handled the same way. "From: " and "Reply-To: " header values will replace the default header values. "Subject: " header values won't: they are *added* to the mail header but don't replace the default, leading to mail messages with two Subject fields.
<?php
error_log("sometext", 1, "zigzag@my.domain",
"Subject: Foo\nFrom: Rizzlas@my.domain\n");
?>
---------------%<-----------------------
To: zigzag@my.domain
Envelope-to: zigzag@my.domain
Date: Fri, 28 Mar 2003 13:29:02 -0500
From: Rizzlas@my.domain
Subject: PHP error_log message
Subject: Foo
Delivery-date: Fri, 28 Mar 2003 13:29:03 -0500
sometext
---------------%<---------------------
quoth the docs: "This message type uses the same internal function as mail() does."
mail() will also fail to set a Subject field based on extra_header data - instead it takes a seperate argument to specify a "Subject: " string.
php v.4.2.3, SunOS 5.8
