我想使用此script来ping,而不使用exec();
或类似的命令。
问题是我得到了这些错误:
严格标准:非静态方法Net_Ping :: factory()不应该 在C:\ xampp \ htdocs \ test.php中静态调用 3
严格标准:非静态方法Net_Ping :: _ setSystemName()应该 不能在第141行的C:\ xampp \ php \ PEAR \ Net \ Ping.php中静态调用
严格标准:非静态方法Net_Ping :: _ setPingPath()应该 不能在第143行的C:\ xampp \ php \ PEAR \ Net \ Ping.php中静态调用
严格标准:非静态方法PEAR :: isError()不应该 在C:\ xampp \ htdocs \ test.php中静态调用 4
test.php上的代码
<?php
require_once "Net/Ping.php";
$ping = Net_Ping::factory();
if (PEAR::isError($ping)) {
echo $ping->getMessage();
} else {
$ping->setArgs(array('count' => 2));
var_dump($ping->ping('example.com'));
}
?>
答案 0 :(得分:3)
没错,PEAR组件不适合E_STRICT。您拥有的代码是可以的,但PEAR代码并未说该方法是静态的,因此PHP将发出E_STRICT警告。这不是你真正可以改变的,但你可以选择忽略它,通过调整你的error_reporting设置。
<?php
// before PEAR stuff.
$errLevel = error_reporting( E_ALL );
// PEAR stuff.
require_once "Net/Ping.php";
$ping = Net_Ping::factory();
if (PEAR::isError($ping)) {
echo $ping->getMessage();
} else {
$ping->setArgs(array('count' => 2));
$result = $ping->ping('example.com');
}
// restore the original error level.
error_reporting( $errLevel );
var_dump( $result );
答案 1 :(得分:1)
Here是我去年写的ping课程,当时我需要在没有PEAR的系统上执行此操作。
使用示例:
$ping = new ping();
if (!$ping->setHost('google.com')) exit('Could not set host: '.$this->getLastErrorStr());
var_dump($ping->send());