Класс предназначен для удобного выполнения запросов — с помощью расширения curl, а также функций file_get_contents
и fsockopen
. Класс автоматически использует тот из доступных методов (транспортов) отправки запросов — расширение либо одну из перечисленных функций, — который доступен на сервере, выполняет проверку на наличие ошибок при получении ответа, а также возвращает содержимое ответа, раскодированное в соответствии с указанным форматом.
Если вы считаете, что классу не хватает какой-либо объективно необходимой функциональности, оформляйте свои предложения в виде pull request в GitHub-репозитории фреймворка.
Порядок использования класса:
- Создать экземпляр класса, передав в него массив необходимых параметров.
- Если необходимо, вызвать «подготовительные» методы:
cookies
иuserAgent
. - Для выполнения запроса вызвать метод
query
, который вернет содержимое ответа. - Если необходимо, вызвать методы, возвращающие дополнительную информацию об ответе на запрос:
getResponse
иgetResponseHeader
.
Методы
-
cookies
Устанавливает путь по умолчанию к файлу, содержащему cookies.
-
getResponse
Возвращает содержимое последнего полученного ответа на запрос.
-
getResponseHeader
Возвращает содержимое заголовков последнего полученного ответа.
-
query
Выполняет запрос к указанному ресурсу.
-
multiQuery
Параллельно выполняет несколько curl-запросов с функциями-обработчиками.
-
userAgent
Устанавливает либо возвращает значение, которое будет использовано для заголовка «
User-Agent
«.
public function __construct ($options, $custom_headers = array())
Параметры
-
$options
Массив параметров для подключения к удаленному ресурсу. Допустимые ключи массива:
- format: формат ожидаемого ответа:
waNet::FORMAT_JSON
(JSON),waNet::FORMAT_XML
(XML) либоwaNet::FORMAT_RAW
(простой, не требующий стандартной обработки) - charset: кодировка отправляемого запроса; значение по умолчанию:
'utf-8'
- authorization: флаг, обозначающий необходимость авторизации с использованием заголовка
Authorization
- login: имя пользователя для авторизации
- password: пароль для авторизации
- md5: флаг, обозначающий необходимость указания содержимого запроса, обработанного функциями
md5
иbase64_encode
, в заголовкеContent-MD5
. - priority: массив со списком доступных способов отправки запроса (транспортов), определяющий также порядок их применения до обнаружения первого доступного на сервере; приоритет доступных транспортов по умолчанию:
'curl'
(расширениеcurl
)'fopen'
(функцияfile_get_contents()
)'socket'
(функцияfsockopen()
)
- timeout: таймаут в секундах, в течение которого разрешено продолжать выполнение запроса
- verify: путь к файлу сертификата для подтверждения достоверности запроса (для транспортов
'curl'
и'fopen'
) - ssl: массив параметров для подключения через
'curl'
с использованием SSL-сертификата:'key'
— значение для параметраCURLOPT_SSLKEY
'cert'
— значение для параметраCURLOPT_SSLCERT
'password'
— значение для параметраCURLOPT_SSLCERTPASSWD
- proxy_host: хост прокси-сервера для отправки запросов с использованием транспортов
'curl'
или'fopen'
- proxy_port: порт прокси-сервера
- proxy_user: имя пользователя для авторизации на прокси
- proxy_password: пароль для авторизации на прокси
- log: путь к альтернативному файлу для сохранения логов в директории
wa-log/
; по умолчанию логи сохраняются в файлwaNet.error.log
- format: формат ожидаемого ответа:
-
$custom_headers
Ассоциативный массив дополнительных заголовков для выполнения запроса к удаленному ресурсу.
Пример
$options = array( 'format' => waNet::FORMAT_JSON 'timeout' => 10, 'authorization' => true, 'login' => $login, 'password' => $password, ); $net = new waNet($options);
public function cookies ($path)
Устанавливает путь по умолчанию к файлу, содержащему cookies, для использования в качестве параметра CURLOPT_COOKIEFILE
при подключении через curl. Это значение по умолчанию используется, только если в параметрах подключения через curl не указан иной путь к файлу cookies.
Параметры
-
$path
Путь к файлу cookies.
Пример
$net = new waNet($options); $net->cookies($path);
public function getResponse ($raw = false)
Возвращает содержимое последнего полученного ответа на запрос.
Параметры
-
$raw
Флаг, требующий возврата исходного (оригинального) либо раскодированного содержимого ответа на запрос. По умолчанию возвращается раскодированное содержимое. Формат раскодируемого значения должен совпадать со значением элемента
'format'
, переданного в конструктор класса.
Пример
$options['format'] = waNet::FORMAT_JSON; $net = new waNet($options); $decoded_response = $net->query($url); $raw_response = $net->getResponse(true);
public function getResponseHeader ($header = null)
Возвращает содержимое заголовков последнего полученного ответа.
Параметры
-
$header
Имя заголовка, содержимое которого нужно получить. Если не указано, метод вернет содержимое всех полученных заголовков.
Пример
$net = new waNet($options); $response = $net->query($url); $response_headers = $net->getResponseHeader();
public function query ($url, $content = [], $method = self::METHOD_GET, $callback = null)
Выполняет запрос к указанному ресурсу и возвращает раскодированное содержимое ответа в соответствии с указанным форматом.
Выполнение метода может привести к возникновению исключения, поэтому его вызов необходимо обернуть в блок try...catch
для самостоятельной обработки ошибок. Код ошибки в этом случае соответствует коду ответа HTTP.
Параметры
-
$url
URL отправки запроса
-
$content
Содержимое запроса
-
$method
Метод отправки запроса:
waNet::METHOD_GET
— GETwaNet::METHOD_POST
— POST (для транспортов'curl'
и'fopen'
)waNet::METHOD_PUT
— PUT (для транспортов'curl'
и'fopen'
)waNet::METHOD_PATCH
— PATCH (для транспортов'curl'
и'fopen'
)waNet::METHOD_DELETE
— DELETE (для транспорта'curl'
)
-
$callback
Значение типа
callable
, которое должно быть запущено после завершения выполнения запроса. Поддерживается только для отправки запросов с использованием транспорта curl.
Пример
$net = new waNet($options); $response = $net->query($url, $content, waNet::METHOD_POST, ['myClass', 'some_callback_method']);
public function multiQuery ($namespace = null, $options = [])
Параллельно выполняет несколько curl-запросов с последующим запуском функций-обработчиков. Параллельное выполнение запросов позволяет сократить время, необходимое коду вашего продукта для выполнения нескольких одновременных запросов.
С другими транспортами отправки запросов, кроме curl, метод не работает.
Порядок использования метода:
- Вызвать метод с произвольным непустым значением параметра $namespace — для инициализации данных.
- Вызвать несколько раз метод query() со значением параметра $callback типа
callable
. - Ещё раз вызвать метод
multiQuery()
с тем же значением параметра $namespace. В результате этого вызова будут одновременно запущены все запросы через curl, инициированные в шаге 2, для которых при вызове методаquery()
для параметра $callback был указано значение типаcallable
. Если значение $callback указано не было, то запросы выполняются не параллельно, а последовательно — сразу же при вызове методаquery()
в предыдущем шаге 2, не дожидаясь данного шага 3.
Параметры
-
$namespace
Произвольное текстовое обозначение для группы curl-запросов, которые нужно выполнить параллельно. Если при втором вызове метода
multiQuery()
значение этого параметра не указано, то по умолчанию будет использовано значение, которое было указано при первом вызове метода. -
$options
Массив параметров выполнения запросов через curl, которые должны применяться вместо значений, указанных в параметре
$options
при создании экземпляра класса, который используется для многократного вызова методаquery()
перед вторым вызовом методаmultiQuery()
. Значение параметра $options нужно указывать при первом вызовеmultiQuery()
.
Пример
waNet::multiQuery( 'my_query', [ 'timeout' => 10, ] ); $net = new waNet([ 'priority' => [ 'curl', ], // это значение не сработает, потому что оно переопределено при первом вызове multiQuery() 'timeout' => 20, ]); // эти запросы выполнятся одновременно — при втором вызове метода multiQuery() // после их завершения будут по очереди выполнены обработчики, указанные в 4-м параметре при вызове метода query() $response1 = $net->query($url1, $content1, waNet::METHOD_POST, ['myClass', 'some_callback_method']); $response2 = $net->query($url2, $content2, waNet::METHOD_POST, ['myClass', 'another_callback_method']); $response3 = $net->query($url3, $content3, waNet::METHOD_POST, ['myClass', 'extra_callback_method']); // эти запросы выполнятся сразу же — не дожидаясь второго вызова multiQuery() // потому что в 4-м параметре $callback не указан обработчик $response4 = $net->query($url4, $content4, waNet::METHOD_POST); $response5 = $net->query($url5, $content5, waNet::METHOD_POST); waNet::multiQuery('my_query');
public function userAgent ($user_agent = null)
Устанавливает либо возвращает значение, которое будет использовано для заголовка «User-Agent
«.
Параметры
-
$user_agent
Новое значение, которое нужно установить для заголовка «
User-Agent
«. Если не указано, то метод только вернет текущее значение. По умолчанию используется значение вида"Webasyst-Framework/[номер версии Webasyst]"
.
Пример
$net = new waNet($options); $net->userAgent($custom_user_agent); $response = $net->query($url);
This class is useful for convenient sending of network requests using curl
extension, and via file_get_contents
and fsockopen
functions. The class automatically uses the first of the sending methods (transports) available on the server, verifies the received response, and returns its contents, unpacked to the required format, if necessary.
How to use waNet
class:
- Create a class instance by passing an array of initializing parameters to the constructor.
- If necessary, call «preparation» methods:
cookies
anduserAgent
. - To actually send a request, call method
query
, which will return the response contents. - If necessary, additionally call other methods returning more information about the received response:
getResponse
andgetResponseHeader
.
Methods
-
cookies
Sets the default path to a cookies file.
-
getResponse
Returns the contents of the last received response.
-
getResponseHeader
Returns the contents of the last received response headers.
-
query
Sends a request to specified URI.
-
multiQuery
Runs several curl requests in parallel with subsequent execution of callback functions.
-
userAgent
Sets a new or returns the current value of the «
User-Agent
» header.
public function __construct ($options)
Parameters
-
$options
Array of parameters used for connecting to a remote resource. Accepted array keys:
- format: format of the expected response:
waNet::FORMAT_JSON
(JSON),waNet::FORMAT_XML
(XML), orwaNet::FORMAT_RAW
(simple response contents requiring no additional formatting) - charset: the charset used in the request to be sent; defaults to
'utf-8'
- authorization: flag requiring authorization using
Authorization
header - login: user name for authorization
- password: password for authorization
- md5: flag requiring to specify the request contents, encoded with PHP functions
md5
andbase64_encode
, in theContent-MD5
header - priority: array of explicitly specified request sending methods (transports) and their detection order, which must be used, in the specified order, to select the first transport available on the server only from the specified list; if not specified, the following transport list and their priority is used by default:
'curl'
(curl
extension)'fopen'
(file_get_contents()
function)'socket'
(fsockopen()
function)
- timeout: timeout in seconds during which it is allowed to continue the sending of a request
- verify: path to a certificate file for request authentication (supported by transports
'curl'
and'fopen'
) - ssl:array of parameters used for connections via
'curl'
using an SSL certificate:'key'
: value for parameterCURLOPT_SSLKEY
'cert'
: value for parameterCURLOPT_SSLCERT
'password'
: value for parameterCURLOPT_SSLCERTPASSWD
- proxy_host: proxy host for sending requests via
'curl'
or'fopen'
transports - proxy_port: proxy port
- proxy_user: user name for proxy authorization
- proxy_password: password for proxy authorization
- log: alternative path error log file in
wa-log/
directory; default path iswaNet.error.log
- format: format of the expected response:
-
$custom_headers
Associative array of custom headers to be used for sending a request to a remote resource.
Example
$options = array( 'format' => waNet::FORMAT_JSON 'timeout' => 10, 'authorization' => true, 'login' => $login, 'password' => $password, ); $net = new waNet($options);
public function cookies ($path)
Sets the path to a file with cookies
values for using as the CURLOPT_COOKIEFILE
parameter value when connecting via curl
. This default value is used, only if no other path to a cookies
file is explicitly specified in curl
connection parameters.
Parameters
-
$path
Path to a cookies file.
Example
$net = new waNet($options); $net->cookies($path);
public function getResponse ($raw = false)
Returns the contents of the last received response.
Parameters
-
$raw
Flag requiring to return either raw (original) or formatted response contents. By default, formatted response contents are returned. The format used for response formatting must be the same as the value of the
'format'
parameter passed to the class constructor.
Example
$options['format'] = waNet::FORMAT_JSON; $net = new waNet($options); $decoded_response = $net->query($url); $raw_response = $net->getResponse(true);
public function getResponseHeader ($header = null)
Returns the contents of the last received response headers.
Parameters
-
$header
name of header whose contents must be returned. If not specified, all received headers’ contents are returned.
Example
$net = new waNet($options); $response = $net->query($url); $response_headers = $net->getResponseHeader();
public function query ($url, $content = [], $method = self::METHOD_GET, $callback = null)
Sends a request to a remote resource and returns response contents formatted according to the specified format name.
Execution of this method may cause an exception; therefore, it must be used inside a try...catch
block for correct error handling. Error codes in this case correspond to common HTTP server response codes.
Parameters
-
$url
Request URL
-
$content
Request contents
-
$method
Sending method:
waNet::METHOD_GET
: GETwaNet::METHOD_POST
: POST (for transports'curl'
and'fopen'
)waNet::METHOD_PUT
: PUT (for transports'curl'
and'fopen'
)waNet::METHOD_PATCH
: PATCH (for transports'curl'
and'fopen'
)waNet::METHOD_DELETE
: DELETE (for'curl'
transport)
-
$callback
Value of the
callable
type, which must be called upon the request completion. Supported only for requests sent by the curl transport.
Example
$net = new waNet($options); $response = $net->query($url, $content, waNet::METHOD_POST);
public function multiQuery ($namespace = null, $options = [])
Runs several curl requests in parallel with subsequent execution of callback functions. This allows your product to save the time required to make several simultaneous requests.
This method does not work with other transports except for curl.
How to use this method:
- Call the method with an arbitrary non-empty value of the $namespace parameter. This is required for data initialization.
- Make several calls of the query() method with a
callable
type value passed to the $callback parameter. - Once again call the
multiQuery()
method with the same value of the $namespace parameter. This will simultaneously run all curl requests initialized in step 2, which have acallable
type value passed as the $callback parameter for thequery()
method. If no correct value was passed as the $callback parameter then curl requests are performed sequentially rather than in parallel — immediately upon each call of thequery()
in the previous step 2, without waiting for this step 3.
Parameters
-
$namespace
An arbitrary text name for a group of curl requests that must be run in parallel. If no value is specified during the second call of the
multiQuery()
method then the value passed during its first call is used by default. -
$options
Array of parameters used for curl requests which must be applied instead of those specified in the
$options
parameter when a class instance is created for multiple calls of thequery()
method before the second call ofmultiQuery()
. A value of the $options parameter, if necessary, must be passed during the first call of this method.
Example
waNet::multiQuery( 'my_query', [ 'timeout' => 10, ] ); $net = new waNet([ 'priority' => [ 'curl', ], // this value will not be used because it is has been overridden during the 1st call of multiQuery() 'timeout' => 20, ]); // these requests will be executed simultaneously, during the 2nd call of multiQuery() // upon their completion, callback functions passed as the 4th parameter for query() method calls will be executed $response1 = $net->query($url1, $content1, waNet::METHOD_POST, ['myClass', 'some_callback_method']); $response2 = $net->query($url2, $content2, waNet::METHOD_POST, ['myClass', 'another_callback_method']); $response3 = $net->query($url3, $content3, waNet::METHOD_POST, ['myClass', 'extra_callback_method']); // these requests will be executed sequentially at once, without waiting for the 2nd call of multiQuery() // because no callbacks are passed for the 4th $callback parameter $response4 = $net->query($url4, $content4, waNet::METHOD_POST); $response5 = $net->query($url5, $content5, waNet::METHOD_POST); waNet::multiQuery('my_query');
public function userAgent ($user_agent = null)
Sets a new or returns the current value of the «User-Agent
» header.
Parameters
-
$user_agent
New value to be set for «
User-Agent
» header. If not specified, method returns current header value. If not explicitly changed, default header value is"Webasyst-Framework/[Webasyst version]"
.
Example
$net = new waNet($options); $net->userAgent($custom_user_agent); $response = $net->query($url);
(PHP 4, PHP 5, PHP 7, PHP
error_log — Отправляет сообщение об ошибке заданному обработчику ошибок
Описание
error_log(
string $message
,
int $message_type
= 0,
?string $destination
= null
,
?string $additional_headers
= null
): bool
Список параметров
-
message
-
Сообщение об ошибке, которое должно быть логировано.
-
message_type
-
Определяет куда отправлять ошибку.
Возможны следующие значения:Типы журналов error_log()
0 Сообщение message
отправляется в системный регистратор PHP, используя
механизм логирования операционной системы, или файл, в зависимости от значения директивы
error_log
в конфигурационном файле. Это значение по умолчанию.1 Сообщение message
отправляется электронной почтой на адрес, установленный в параметре
destination
. Это единственный тип сообщения, где используется четвёртый параметр
additional_headers
.2 Больше не используется. 3 message
применяется к указанному в
destination
файлу. Перенос строки автоматически не добавляется в конец
message
.4 Сообщение message
отправляется напрямую в обработчик
логера SAPI. -
destination
-
Назначение. Устанавливается в зависимости от параметра
message_type
. -
additional_headers
-
Дополнительные заголовки. Используется, когда значение параметра
message_type
—1
.
Данный тип сообщения использует ту же внутреннюю функцию, что и
mail().
Возвращаемые значения
Возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
Если message_type
равен нулю, функция всегда возвращает true
,
независимо от того, может ли ошибка логироваться или нет.
Список изменений
Версия | Описание |
---|---|
8.0.0 |
Параметр destination иadditional_headers теперь допускают значение null.
|
Примеры
Пример #1 Примеры использования error_log()
<?php
// Отправляет уведомление посредством серверного лога, если мы не можем
// подключиться к базе данных.
if (!Ora_Logon($username, $password)) {
error_log("База данных Oracle недоступна!", 0);
}// Уведомить администратора по электронной почте, если невозможно выделить ресурсы для FOO
if (!($foo = allocate_new_foo())) {
error_log("Большая проблема, мы выпали из FOO!", 1,
"operator@example.com");
}// другой способ вызвать error_log():
error_log("Вы ошиблись!", 3, "/var/tmp/my-errors.log");
?>
Примечания
Внимание
error_log() не является бинарно-безопасной функцией. message
обрезается по null-символу.
Подсказка
message
не должен содержать null-символ. Учтите, что message
может передаваться в файл, по почте, в syslog и т.д. Используйте подходящую преобразующую или экранирующую функцию, base64_encode(), rawurlencode() или addslashes() перед вызовом error_log().
kevindougans at gmail dot com ¶
12 years ago
Advice to novices: This function works great along with "tail" which is a unix command to watch a log file live. There are versions of Tail for Windows too, like Tail for Win32 or Kiwi Log Viewer.
Using both error_log() and tail to view the php_error.log you can debug code without having to worry so much about printing debug messages to the screen and who they might be seen by.
Further Note: This works even better when you have two monitors setup. One for your browser and IDE and the other for viewing the log files update live as you go.
Sion ¶
4 years ago
DO NOT try to output TOO LARGE texts in the error_log();
if you try to output massive amounts of texts it will either cut of the text at about 8ooo characters (for reasonable massive strings, < 32 K characters) or (for insanely massive strings, about 1.6 million characters) totally crash without even throwing an error or anything (I even put it in a try/catch without getting any result from the catch).
I had this problem when I tried to debug a response from a wp_remote_get(); all of my error_log() worked as they should, except for ONE of them... (-_-)
After about a day of debugging I finally found out why & that's why I type this.
Apparently the response contained a body with over 1.6 million chars (or bytes? (whatever strlen() returns)).
If you have a string of unknown length, use this:
$start_index = 0;
$end_index = 8000;
error_log( substr( $output_text , $start_index , $end_index ) );
frank at booksku dot com ¶
16 years ago
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!
i dot buttinoni at intandtel dot com ¶
14 years ago
Be carefull. Unexpected PHP dies when 2GByte of file log reached (on systems having upper file size limit).
A work aorund is rotate logs :)
php at kennel17 dot NOSPAM dot co dot uk ¶
17 years ago
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.
Anonymous ¶
19 years ago
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: FoonFrom: Rizzlas@my.domainn");?>
---------------%<-----------------------
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
russ at russtanner dot com ¶
3 years ago
You can easily filter messages sent to error_log() using "tail" and "grep" on *nix systems. This makes monitoring debug messages easy to see during development.
Be sure to "tag" your error message with a unique string so you can filter it using "grep":
In your code:
error_log("DevSys1 - FirstName: $FirstName - LastName: $Lastname");
On your command line:
tail -f /var/log/httpd/error_log | grep DevSys1
In this example, we pipe apache log output to grep (STDIN) which filters it for you only showing messages that contain "DevSys1".
The "-f" option means "follow" which streams all new log entries to your terminal or to any piped command that follows, in this case "grep".
Matthew Swift ¶
3 years ago
Relative paths are accepted as the destination of message_type 3, but beware that the root directory is determined by the context of the call to error_log(), which can change, so that one instance of error_log () in your code can lead to the creation of multiple log files in different locations.
In a WordPress context, the root directory will be the site's root in many cases, but it will be /wp-admin/ for AJAX calls, and a plugin's directory in other cases. If you want all your output to go to one file, use an absolute path.
paul dot chubb at abs dot gov dot au ¶
14 years ago
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);
}
SJL ¶
15 years ago
"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.
stepheneliotdewey at GmailDotCom ¶
15 years ago
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.
p dot lhonorey at nospam-laposte dot net ¶
16 years ago
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 :lunchnContent-Type: text/html; charset=ISO-8859-1");
Enjoy !
eguvenc at gmail dot com ¶
14 years ago
<?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
?>
franz at fholzinger dot com ¶
17 years ago
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
daniel dot fukuda at gmail dot com ¶
13 years ago
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.
Anonymous ¶
2 years ago
Depending on the error, you may also want to add an error 500 header, and a message for the user:
$message = 'Description of the error.';
error_log($message);
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
exit($message);
Robert Chapin ¶
4 years ago
When error_log() unexpectedly uses stdout, you should check if the php.ini value for error_log is empty in your CLI environment. Something as simple as this might restore expected behavior:
<?php ini_set('error_log', 'error_log'); ?>
kazezb at nospam dot carleton dot edu ¶
17 years ago
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.
Anonymous ¶
13 years ago
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
"HKLMSOFTWAREPHP" 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:phpsession" and "C:phpupload" to give additional
Modify permissions to (1) the IIS Guest Account and (2)
the group IIS_WPG.
8. Navigate to the registry key
"HKLMSYSTEMCurrentControlSetServicesEventlog
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
"HKLMSYSTEMCurrentControlSetServicesEventlogApplication
PHP-5.2.0" (adapt the last to your version part
if necessary) with the following values:
* "EventMessageFile" (REG_EXPAND_SZ) = "C:phpphp5ts.dll"
* "TypesSupported" (REG_DWORD) = 7