私のサーバーの状態を確認するための簡単なPHPスクリプトが用意されています。これはexec()を介して実行される標準のpingコマンドを使用します。PHP - Linux上でpingを実行するとスクリプトがハングアップする
- Windowsの場合、サーバーはオンラインの場合でもスクリプトが正常に機能し、ダウンの場合は です。
- Linuxの場合、スクリプトはサーバがオンラインのときに機能しますが、サーバがダウンしている場合は、 のときにハングします。タイムアウトは後者には影響しないようです。
コンソールから同じコマンドを使用してpingを実行すると、正常に動作して正しくタイムアウトします。
原因とはどのように解決されましたか?
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$exec_string = 'ping -n 1 -i 255 -w 2 ' . $host;
} else {
$exec_string = 'ping -n -c 1 -t 255 -w 2 ' . $host;
}
exec($exec_string, $output, $return);
私はこれが適切な解決策であることに同意します。これは、特にシステム関数呼び出しが利用できない場合に機能するためです。しかし、あなたはexecを使ってpingをしないように説明していませんでしたか? – ar34z
fsockopenは既にバックアップソリューションとして使用されているため、質問には含まれていませんでした。 – techjwalker
セキュリティ上の理由から 'exec()'が無効になることが多いので、 'exec()'は避けがちです。 – Napolux