PHP Ping със Pear
Този урок предполага, че имате работеща инсталация на Pear, която се актуализира. По време на това урока, ще използваме Net_Ping 2.4.3.
Инсталиране на Net_Ping
Както винаги, инсталирането на PEAR е изключително проста. Отворете терминал или SSH във вашия бокс и издадете командата:
CODE
Ако всичко върви добре, трябва да видите такъв резулта:
CODE
Сега имате PEAR:: Net_Ping инсталиран.
Друга възможност: Ако вашият хостинг е с изтекъл C panel,то можете да инсталирате PEAR модули чрез Cpanel GUI.
Използване на модула
Използване на PEAR Package е толкова лесно, колкото и неговото включване.
CODE
Сега ще трябва да се създаде обекта:
CODE
Може да изберете ping IP или име.
CODE
Пълният скрипт изглежда по този начин.
CODE
Този пример е най-основният и дори не се налага да проверите, дали PEAR обектът е бил създаден. Използването на IS ERROR функцията на PEAR можем да определим, ако обектът има грешка.
ISERROR () проверява дали дадена променлива PEAR_Error обект съдържа точното съобщение за грешка или код. Прочетете още: Наръчник на PEAR - PEAR:: ISERROR ()
Добавяйки, това в нашия код, става.
CODE
Ако изпълните кода по-горе вие ще получите някои лоши резултати:
Net_Ping_Result Object ( [_icmp_sequence] => Array ( [0] => 114 [1] => 139 [2] => 101 ) [_target_ip] => 67.205.118.30 [_bytes_per_request] => 32 [_bytes_total] => 96 [_ttl] => 50 [_raw_data] => Array ( [0] => [1] => Pinging codecall.net [67.205.118.30] with 32 bytes of data: [2] => Reply from 67.205.118.30: bytes=32 time=114ms TTL=50 [3] => Reply from 67.205.118.30: bytes=32 time=139ms TTL=50 [4] => Reply from 67.205.118.30: bytes=32 time=101ms TTL=50 [5] => [6] => Ping statistics for 67.205.118.30: [7] => Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), [8] => Approximate round trip times in milli-seconds: [9] => Minimum = 101ms, Maximum = 139ms, Average = 118ms ) [_sysname] => windows [_round_trip] => Array ( [min] => 101 [max] => 139 [avg] => 118 ) [_transmitted] => 3 [_received] => 3 [_loss] => 0 )
Можете да поправите това, чрез добавяне на <pre> </pre> tags в масива
CODE
Който ще произведе по-естетичен резултат.
CODE
Аргументи
Кодът по-горе не е много полезен, не прави нищо. За целта е необходимо да се направи проверка на размера _loss Packet и има нужда да се ограничи пинг до 1.
Погледнах през документацияа и претърсих в уеба, но не можах да намеря никъде списъка на аргументите . На пръв поглед той изглежда като по-горния код, тъй като можете да контролирате обекта Ping, така че чрез Net / Ping.php файл и открих setArgs () функцията и _createArgList () функцията. В _createArgList () функцията е списък на paramters от кайто можете да премине към setArgs:
CODE
Както можете да видите горе, повечето възможности за пинг са за преминаване през аргументи.
Настройка на аргументи
За да настроите аргументите трябва да преминете към метода, асоциативен масив setArgs () . Ето как:
CODE
Ето пълният скрипт;
CODE
По време на работата съм добавил още няколко функции, които не са от значение тук. По-долу ще ви покаже по-по-добре необходимостта за системата.
Практическа необходимост
Джъстин от AmpHosted.com, необходими за пинг скрипт, който го емайл при неуспех. Сървър CodeCall, ще работи на всеки 5 минути (чрез Cron работа)и изпраща сигнал, ако сървъра му е паднал. Тук са неговите изисквания:
1.10 пинг @ 5 минутни интервали (контролиран чрез Cron)
2. Имейл @ 90% неуспех сигнал (9 / 10 пинг не успяват)
3. Server IP: 74.55.90.58 (AmpHosted.com)
4. Исканата информация - Грешка във времето, Ping реагира
Взимайки информацията отгоре можем да създадем прост Ping скрипт.
CODE
Бележка
Ако сте под Cpanel хостинг и сте инсталирали PEAR скриптове чрез Cpanel или чрез SSH, ще трябва да използва пълният включен път. Можете да намерите пълния PEAR път, като използвате "CPanel / PHP PEAR пакети". Мястото на CodeCall PEAR е "/home/codecall/php", така че Net_Ping, ще изглежда така:
CODE
Инсталиране на Net_Ping
Както винаги, инсталирането на PEAR е изключително проста. Отворете терминал или SSH във вашия бокс и издадете командата:
CODE
| 1 | # pear install net_ping |
Ако всичко върви добре, трябва да видите такъв резулта:
CODE
| 1 2 3 4 | downloading Net_Ping-2.4.3.tgz ... Starting to download Net_Ping-2.4.3.tgz (9,634 bytes) .....done: 9,634 bytes install ok: channel://pear.php.net/Net_Ping-2.4.3 |
Сега имате PEAR:: Net_Ping инсталиран.
Друга възможност: Ако вашият хостинг е с изтекъл C panel,то можете да инсталирате PEAR модули чрез Cpanel GUI.
Използване на модула
Използване на PEAR Package е толкова лесно, колкото и неговото включване.
CODE
| 1 | require ("Net/Ping.php"); |
Сега ще трябва да се създаде обекта:
CODE
| 1 | $pingObj = Net_Ping::factory(); |
Може да изберете ping IP или име.
CODE
| 1 2 | $response = $pingObj->ping('codecall.net'); print_r($response); |
Пълният скрипт изглежда по този начин.
CODE
| 1 2 3 4 5 6 7 8 | <?php require ("Net/Ping.php"); $pingObj = Net_Ping::factory(); $response = $pingObj->ping('codecall.net'); print_r($response); ?> |
Този пример е най-основният и дори не се налага да проверите, дали PEAR обектът е бил създаден. Използването на IS ERROR функцията на PEAR можем да определим, ако обектът има грешка.
ISERROR () проверява дали дадена променлива PEAR_Error обект съдържа точното съобщение за грешка или код. Прочетете още: Наръчник на PEAR - PEAR:: ISERROR ()
Добавяйки, това в нашия код, става.
CODE
| 1 2 3 4 5 6 7 8 9 10 11 12 | <?php require ("Net/Ping.php"); $pingObj = Net_Ping::factory(); if(PEAR::isError($ping)) { echo $ping->getMessage(); } else { $response = $pingObj->ping('codecall.net'); print_r($response); } ?> |
Ако изпълните кода по-горе вие ще получите някои лоши резултати:
Net_Ping_Result Object ( [_icmp_sequence] => Array ( [0] => 114 [1] => 139 [2] => 101 ) [_target_ip] => 67.205.118.30 [_bytes_per_request] => 32 [_bytes_total] => 96 [_ttl] => 50 [_raw_data] => Array ( [0] => [1] => Pinging codecall.net [67.205.118.30] with 32 bytes of data: [2] => Reply from 67.205.118.30: bytes=32 time=114ms TTL=50 [3] => Reply from 67.205.118.30: bytes=32 time=139ms TTL=50 [4] => Reply from 67.205.118.30: bytes=32 time=101ms TTL=50 [5] => [6] => Ping statistics for 67.205.118.30: [7] => Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), [8] => Approximate round trip times in milli-seconds: [9] => Minimum = 101ms, Maximum = 139ms, Average = 118ms ) [_sysname] => windows [_round_trip] => Array ( [min] => 101 [max] => 139 [avg] => 118 ) [_transmitted] => 3 [_received] => 3 [_loss] => 0 )
Можете да поправите това, чрез добавяне на <pre> </pre> tags в масива
CODE
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php require ("Net/Ping.php"); $pingObj = Net_Ping::factory(); if(PEAR::isError($ping)) { echo $ping->getMessage(); } else { $response = $pingObj->ping('codecall.net'); echo "<pre>"; print_r($response); echo "</pre>"; } ?> |
Който ще произведе по-естетичен резултат.
CODE
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Net_Ping_Result Object ( [_icmp_sequence] => Array ( [0] => 95 [1] => 152 [2] => 118 ) [_target_ip] => 67.205.118.30 [_bytes_per_request] => 32 [_bytes_total] => 96 [_ttl] => 50 [_raw_data] => Array ( [0] => [1] => Pinging codecall.net [67.205.118.30] with 32 bytes of data: [2] => Reply from 67.205.118.30: bytes=32 time=95ms TTL=50 [3] => Reply from 67.205.118.30: bytes=32 time=152ms TTL=50 [4] => Reply from 67.205.118.30: bytes=32 time=118ms TTL=50 [5] => [6] => Ping statistics for 67.205.118.30: [7] => Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), [8] => Approximate round trip times in milli-seconds: [9] => Minimum = 95ms, Maximum = 152ms, Average = 121ms ) [_sysname] => windows [_round_trip] => Array ( [min] => 95 [max] => 152 [avg] => 121 ) [_transmitted] => 3 [_received] => 3 [_loss] => 0 ) |
Аргументи
Кодът по-горе не е много полезен, не прави нищо. За целта е необходимо да се направи проверка на размера _loss Packet и има нужда да се ограничи пинг до 1.
Погледнах през документацияа и претърсих в уеба, но не можах да намеря никъде списъка на аргументите . На пръв поглед той изглежда като по-горния код, тъй като можете да контролирате обекта Ping, така че чрез Net / Ping.php файл и открих setArgs () функцията и _createArgList () функцията. В _createArgList () функцията е списък на paramters от кайто можете да премине към setArgs:
CODE
| 1 2 3 4 5 6 7 8 | timeout iface ttl count quiet size seq deadline |
Както можете да видите горе, повечето възможности за пинг са за преминаване през аргументи.
Настройка на аргументи
За да настроите аргументите трябва да преминете към метода, асоциативен масив setArgs () . Ето как:
CODE
| 1 | $pingObj->setArgs(array('count' => 1, 'ttl' => 50, 'timeout' => 100)); |
Ето пълният скрипт;
CODE
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php /** * Include the PEAR Ping Class * * @uses Pear::Net_Ping * */ require ("Net/Ping.php"); /** * Create the Ping Object/Class */ $pingObj = Net_Ping::factory(); /** * If there is no error in creating the * ping class then ping our source */ if(PEAR::isError($ping)) { echo $ping->getMessage(); } else { // Set the arguments $pingObj->setArgs(array('count' => 1, 'ttl' => 50, 'timeout' => 100)); // Ping the Host $response = $pingObj->ping('codecall.net'); print "<pre>"; print_r($response); print "</pre>"; } ?> |
По време на работата съм добавил още няколко функции, които не са от значение тук. По-долу ще ви покаже по-по-добре необходимостта за системата.
Практическа необходимост
Джъстин от AmpHosted.com, необходими за пинг скрипт, който го емайл при неуспех. Сървър CodeCall, ще работи на всеки 5 минути (чрез Cron работа)и изпраща сигнал, ако сървъра му е паднал. Тук са неговите изисквания:
1.10 пинг @ 5 минутни интервали (контролиран чрез Cron)
2. Имейл @ 90% неуспех сигнал (9 / 10 пинг не успяват)
3. Server IP: 74.55.90.58 (AmpHosted.com)
4. Исканата информация - Грешка във времето, Ping реагира
Взимайки информацията отгоре можем да създадем прост Ping скрипт.
CODE
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | <?php // {{{ Header /** * AmpHosted.com Ping Test Script * * Pings AmpHosted.com 9 times and determines fail rate. * * PHP versions 4 and 5 * * LICENSE: * * Copyright (c) 2008 CodeCall.net * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted under the terms of the BSD License. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Reports * @author Jordan (CodeCall.net) * @date 10-2-2008 * @version 1.0 * @link http://www.codecall.net * @copyright 2008 CodeCall.net * @uses PEAR::Net_Ping and Beyond */ // }}} // {{{ Includes /** * Include the PEAR Ping Class * */ require ("Net/Ping.php"); // }}} // {{{ PHP Time Limit /** * If the server is unresponsive * the script may take longer to * respond than the default 30 seconds * */ set_time_limit(200); // }}} // {{{ Defines /** * Define our paramters */ define('FAILURE_RATE', 9); define('PING_RATE', 10); define('HOST_NAME', '74.55.90.58'); define('TIMEOUT', 200); // }}} // {{{ Variables /** * Common Email Variables */ $emailBody = FAILURE_RATE . " or more pings failed!" . PHP_EOL . "Ping Results: " ; $emailSubject = "Ping Respinse Failed - AmpHosted01"; $emailAddress = "some@email.com"; // }}} // {{{ Content /** * Create the Ping Object/Class */ $pingObj = Net_Ping::factory(); /** * If there is no error in creating the * ping class then ping our source */ if(PEAR::isError($ping)) { echo $ping->getMessage(); } else { // Set the arguments $pingObj->setArgs(array('count' => PING_RATE, 'timeout' => TIMEOUT)); // Ping the Host $response = $pingObj->ping(HOST_NAME); // Determine the fail rate if ($response->getLoss() >= FAILURE_RATE) { foreach($response->getRawData() as $data) { $emailBody .= $data . PHP_EOL; } // Send email mail($emailAddress, $emailSubject, $emailBody); // Print Error echo "Error, sending Email!" . PHP_EOL; } } // }}} ?> |
Бележка
Ако сте под Cpanel хостинг и сте инсталирали PEAR скриптове чрез Cpanel или чрез SSH, ще трябва да използва пълният включен път. Можете да намерите пълния PEAR път, като използвате "CPanel / PHP PEAR пакети". Мястото на CodeCall PEAR е "/home/codecall/php", така че Net_Ping, ще изглежда така:
CODE
| 1 | require ("/home/codecall/php/Net/Ping.php"); |





