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 .
error_log
(PHP 4, PHP 5)
error_log — Stocke un message d'erreur
Description
bool error_log
( string $message
[, int $message_type
[, string $destination
[, string $extra_headers
]]] )
Envoie un message d'erreur à l'historique du serveur web, à un port TCP ou un fichier.
Liste de paramètres
- message
-
Le message d'erreur qui doit être stocké.
- message_type
-
Spécifie la destination du message d'erreur. Les types possibles de messages sont :
error_log() log types 0 message est envoyé à l'historique PHP, qui est basé sur l'historique système ou un fichier, en fonction de la configuration de error_log. C'est l'option par défaut. 1 message est envoyé par email à l'adresse destination . C'est le seul type qui utilise le quatrième paramètre extra_headers . 2 N'est plus une option. 3 message est ajouté au fichier destination . Une nouvelle ligne est automatiquement ajoutée à la fin de la chaîne message . - destination
-
La destination. Cela dépend du paramètre message_type décrit ci-dessus.
- extra_headers
-
Les en-têtes supplémentaires. Ils sont utilisés lorsque le paramètre message_type est défini à 1. Ce type de message utilise la même fonction interne que la fonction mail().
Valeurs de retour
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
Exemples
Exemple #1 Exemples avec error_log()
<?php
// Envoie une notification par l'historique du serveur web,
// si la connexion à la base de données est impossible.
if (!Ora_Logon($username, $password)) {
error_log("Base Oracle indisponible !", 0);
}
// Indiquer à l'administrateur, par email, qu'il n'y a plus de FOO
if (!($foo = allocate_new_foo())) {
error_log("Aya!, Il ne reste plus de FOO disponibles !", 1,
"operateur@example.com");
}
// D'autres manières d'appeler error_log():
error_log("Grosse bourde !", 3, "/var/tmp/mes-erreurs.log");
?>
error_log
m308
16-Nov-2008 05:20
16-Nov-2008 05:20
eguvenc at gmail dot com
28-Oct-2008 05:03
28-Oct-2008 05: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
?>
paul dot chubb at abs dot gov dot au
17-Jun-2008 07:37
17-Jun-2008 07: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);
}
i dot buttinoni at intandtel dot com
16-Feb-2008 12:32
16-Feb-2008 12: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 :)
SJL
01-Jan-2008 03:16
01-Jan-2008 03: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.
larry.kooper at gmail dot com
12-Oct-2007 12:00
12-Oct-2007 12: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.
stepheneliotdewey at GmailDotCom
27-Jun-2007 03:05
27-Jun-2007 03: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.
frank at booksku dot com
03-Nov-2006 12:28
03-Nov-2006 12: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!
p dot lhonorey at nospam-laposte dot net
28-Aug-2006 12:33
28-Aug-2006 12: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 !
marques at displague dot com
26-Aug-2005 10:52
26-Aug-2005 10: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.
php at kennel17 dot NOSPAM dot co dot uk
25-Jul-2005 11:04
25-Jul-2005 11: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.
kazezb at nospam dot carleton dot edu
21-Jul-2005 07:39
21-Jul-2005 07: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.
franz at fholzinger dot com
20-Apr-2005 06:21
20-Apr-2005 06: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
28-Mar-2003 11:14
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
