Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ PHPΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 32

Автор white cat

gethostbynamel


Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список IP-адрСсов хоста.

Бинтаксис:

array gethostbynamel(string hostname);

ΠžΠ΄Π½ΠΎΠΌΡƒ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сразу нСсколько IP-адрСсов, ΠΈ Π² случаС сильной загруТСнности сСрвСров DNS-сСрвСр сам Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ IP-адрСсу ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос. Он Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ адрСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π΄ΠΊΠΎ.

Ѐункция gethostbynamel() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° всС IP-адрСса хоста с ΠΈΠΌΠ΅Π½Π΅ΠΌ hostname.

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ сущСствуСт мноТСство Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… хостов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ IP-адрСсс. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ для ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ хоста с IP-адрСсом ip всСгда ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ этот ΠΆΠ΅ адрСс:

$host = gethostbyaddr($ip);

echo gethostbyname($host);


Ρ‚ΠΎ аналогичная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для Π΄ΠΎΠΌΠ΅Π½Π° с DNS-ΠΈΠΌΠ΅Π½Π΅ΠΌ $host, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ имя, Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅:

$ip = gethostbyname($host);

echo gethostbyaddr($ip);



getprotobyname


ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ.

Бинтаксис:

int getprotobyname(string name);


getprotobynumber


ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠΎΡ€Ρ‚Π°.

Бинтаксис:

string getprotobynumber(int number);


getservbyname


ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-слуТбы.

Бинтаксис:

int getservbyname(string service, string protocol);

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ слуТба service.

Π’ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ protocol указываСтся Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° - TCP ΠΈΠ»ΠΈ UDP.

echo getservbyname("HTTP", "TCP"); // ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти 80


getservbyport


ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-слуТбы, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚.

Бинтаксис:

string getservbyport(int port, string protocol);

Π—Π΄Π΅ΡΡŒ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ protocol Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° - TCP Π»ΠΈΠ±ΠΎ UDP.

echo getservbyport(21, "TCP"); // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚: ftp

echo getservbyport(23, "TCP"); // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚: telnet



checkdnsrr


ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ записи DNS.

Бинтаксис:

int checkdnsrr(string host [, string type]);

Π­Ρ‚Π° функция отправляСт запрос DNS-сСрвСру для поиска записСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ для хоста host. Если Π±Ρ‹Π»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ записи Ρ‚ΠΈΠΏΠ° type, Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈ ΠΏΡ€ΠΈ ошибкС - false.

АргумСнт typeΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния:

АргумСнт host ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ строкой Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ IP с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ хоста.


getmxrr


ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ MX записи для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-хоста.

Бинтаксис:

int getmxrr(string hostname, array mxhosts [, array weight]);

Ѐункция getmxrr() ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ поиск Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… DNS записи MX (ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр Π΄ΠΎΠΌΠ΅Π½Π°) для хоста hostname.

Если запись Π½Π°ΠΉΠ΄Π΅Π½Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Π½Π΅Ρ‚ - Ρ‚ΠΎ false.

Бписок записСй MX заносится Π² массив mxhosts. Если ΡƒΠΊΠ°Π·Π°Π½ массив weight, ΠΎΠ½ заполняСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ записях.

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ:

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ значСния Π² Π²ΠΈΠ΄Π΅ чисСл ΠΈΠ»ΠΈ констант ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, формируя Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску ошибок, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ Π² Ρ…ΠΎΠ΄Π΅ исполнСния сцСнария. Для комбинирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ php.ini Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ "|", "~", "!" ΠΈ "&".

Π’ PHP 4 ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ сообщСния Π²ΠΈΠ΄Π° E_ALL & ~E_NOTICE, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ всС, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сообщСний. МоТно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ эту установку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ error_reporting() (Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра Apache).

Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ символ "@", Ρ‚ΠΎ Π² случаС возникновСния ошибки Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сообщСниС ΠΎ Π½Π΅ΠΌ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π’ настоящСС врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ игнорирования ошибок Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ Π²Ρ‹Π΄Π°Ρ‡Ρƒ сообщСний ΠΎ критичСских ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнарий досрочно Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Если Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ track_errors, Ρ‚ΠΎ сообщСниС ΠΎΠ± ошибкС сохраняСтся Π² глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $php_errormsg.

<?php

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок

function userErrorHandler($errno,$errmsg,$filename,$linenum,$vars) {

// врСмя возникновСния ошибки

$dt=date("Y-m-d H:i:s (T)");

$errortype = array(

1 => "Error",

2 => "Warning",

4 => "Parsing Error",

8 => "Notice",

16 => "Core Error",

32 => "Core Warning",

64 => "Compile Error",

128 => "Compile Warning",

256 => "User Error",

512 => "User Warning",

1024 => "User Notice"

);


$err.="врСмя ($dt), Π½ΠΎΠΌΠ΅Ρ€ ошибки ($errno), ";

$err.="Ρ‚ΠΈΠΏ ошибки (".$errortype[$errno]."): ";

$err.=""$errmsg".Ρ„Π°ΠΉΠ» "$filename", строка (";

$err.=$linenum.")n";


$user_errors=array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

if(in_array($errno, $user_errors))

// Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС для ошибок ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

echo $err;


// ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ событиС ошибки Π² систСмном ΠΆΡƒΡ€Π½Π°Π»Π΅

error_log($err, 3, "/usr/local/php4/error.log");

}


// ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ контроля ошибок ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

error_reporting(0); // Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСния PHP

$old_error_handler=set_error_handler("userErrorHAndler");


// нСопрСдСлСнная константа Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

$t=_NOT_DEFINED_CONSTANT;


trigger_error("Моя ошибка", E_USER_ERROR);

trigger_error("МоС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅", E_USER_WARNING);


?>

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ:

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ значСния Π² Π²ΠΈΠ΄Π΅ чисСл ΠΈΠ»ΠΈ констант ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, формируя Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску ошибок, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ Π² Ρ…ΠΎΠ΄Π΅ исполнСния сцСнария. Для комбинирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ php.ini Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ "|", "~", "!" ΠΈ "&".

Π’ PHP 4 ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ сообщСния Π²ΠΈΠ΄Π° E_ALL & ~E_NOTICE, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ всС, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сообщСний. МоТно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ эту установку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ error_reporting() (Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра Apache).

Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ символ "@", Ρ‚ΠΎ Π² случаС возникновСния ошибки Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сообщСниС ΠΎ Π½Π΅ΠΌ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π’ настоящСС врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ игнорирования ошибок Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ Π²Ρ‹Π΄Π°Ρ‡Ρƒ сообщСний ΠΎ критичСских ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнарий досрочно Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Если Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ track_errors, Ρ‚ΠΎ сообщСниС ΠΎΠ± ошибкС сохраняСтся Π² глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $php_errormsg.

<?php

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок

function userErrorHandler($errno,$errmsg,$filename,$linenum,$vars) {

// врСмя возникновСния ошибки

$dt=date("Y-m-d H:i:s (T)");

$errortype = array(

1 => "Error",

2 => "Warning",

4 => "Parsing Error",

8 => "Notice",

16 => "Core Error",

32 => "Core Warning",

64 => "Compile Error",

128 => "Compile Warning",

256 => "User Error",

512 => "User Warning",

1024 => "User Notice"

);


$err.="врСмя ($dt), Π½ΠΎΠΌΠ΅Ρ€ ошибки ($errno), ";

$err.="Ρ‚ΠΈΠΏ ошибки (".$errortype[$errno]."): ";

$err.=""$errmsg".Ρ„Π°ΠΉΠ» "$filename", строка (";

$err.=$linenum.")n";


$user_errors=array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

if(in_array($errno, $user_errors))

// Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС для ошибок ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

echo $err;


// ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ событиС ошибки Π² систСмном ΠΆΡƒΡ€Π½Π°Π»Π΅

error_log($err, 3, "/usr/local/php4/error.log");

}


// ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ контроля ошибок ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

error_reporting(0); // Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСния PHP

$old_error_handler=set_error_handler("userErrorHAndler");


// нСопрСдСлСнная константа Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

$t=_NOT_DEFINED_CONSTANT;


trigger_error("Моя ошибка", E_USER_ERROR);

trigger_error("МоС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅", E_USER_WARNING);


?>

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок


error_log


ΠŸΠΎΡΡ‹Π»ΠΊΠ° сообщСния ΠΎΠ± ошибкС.

Бинтаксис:

int error_log(string message, int message_type [, string destination [, string extra_headers]])

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, посылаСмоС этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π² ΠΆΡƒΡ€Π½Π°Π» систСмных сообщСний web-сСрвСра, ΠΏΡ€ΠΎΡ‚ TCP ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ».

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ message указываСтся само содСрТаниС сообщСния. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ message_type - ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ.

НазначСниС обозначаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями:

if(!Ora_London($username, $password)) {

error_log("Π‘Π΅Ρ€Π²Π΅Ρ€ Oracle нСдоступСн!", 0);

};


if(!($foo = allocate_new_foo()) {

error_log("НСльзя Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ FOO!", 1, " [email protected]");

}


// other ways of calling error_log():

error_log("У нас ошибка!", 2, "127.0.0.1:7000");

error_log("У нас ошибка!", 2, "localhost");

error_log("У нас ошибка!", 3, "/var/tmp/my-errors.log");



error_reporting