file get content — PHP file_get_contents проверяет источник онлайн или нет перед выполнением

Я использую 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";
}

1

Решение

Вы можете попробовать что-то подобное

$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 (), документация здесь

0

Другие решения

Это решение основано на проверке 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)

Я использовал эти ответы (1, 2) в моем ответе

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector