我正在使用PHP file_get_contents
读取文本文件数据。
假设我有2个IP地址,有1个在线和1个离线:
192.168.180.181 - Online
192.168.180.182 - Offline
和PHP
$fileAccept = file_get_contents("\\\\192.168.180.181\\Reports\\".$dModel['MODEL_NAME'].$source."\\Accept\\Accept_".$dDtl['MODEL_CODE']."_".$dateCode."_".$dDtl['TS_CODE'].".txt");
我们知道IP地址192.168.180.182
处于脱机状态,因此我尝试运行该代码。结果页面总是加载。
我的问题,如何防止它可能首先需要检查IP是否有效,如果还可以,则可以继续下一步。
也许是这样的:
if(IP IS OFFLINE)
{
echo "do not do anything";
}
else
{
echo "do something";
}
答案 0 :(得分:0)
您可以尝试类似的方法
$scc = stream_context_create(array('http'=>
array(
'timeout' => 120, //120 seconds
)
));
$url = "http://192.168.180.181/....";
$handle = file_get_contents('$url, false, $scc);
您可以创建两个句柄并使用if语句检查是否可以,当然您可以将超时更改为您要使用的套件
更新: 如果在本地访问文件,则可以检查此stream_set_timeout()函数,documentation is here
答案 1 :(得分:0)
此解决方案基于ping您需要检查的IP
class IPChecker{
public static function isIPOnline($ip){
switch (SELF::currentOS()){
case "windows":
$arg = "n";
break;
case "linux":
$arg = "c";
break;
default: throw new \Exception('unknown OS');
}
$result = "";
$output = [];
// to debug errors add 2>&1 to the command to fill $output
// https://stackoverflow.com/questions/16665041/php-why-isnt-exec-returning-output
exec("ping -$arg 2 $ip " , $output, $result);
// if 0 then the there is no errors like "Destination Host Unreachable"
if ($result === 0) return true;
return false;
}
public static function currentOS(){
if(strpos(strtolower(PHP_OS), "win") !== false) return 'windows';
elseif (strpos(strtolower(PHP_OS), "linux") !== false) return 'linux';
//TODO: extend other OSs here
else return 'unknown';
}
}
用法示例
var_dump( IPChecker::isIPOnline("192.168.180.181") );// should outputs bool(true)
var_dump( IPChecker::isIPOnline("192.168.180.182") );// should outputs bool(false)