1
$sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30);
if (!$sock) return false;

私が訪問しているURLのデータベースにリストがあり、時折これを取得します:

「致命的なエラー: 最大実行時間が 30 秒を超えました...」というメッセージが表示されます。

サイトにアクセスするため、ソケットなどを許可しないことが予想されます。

これらの悪いサイトをスキップして、スクリプトが他の良いサイトで引き続き実行されるようにするにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

fsockopen()現在 30 秒に設定されている (呼び出しの最後のパラメーター) の接続タイムアウトを下げます。そうしないと、PHP はリモート ホストへの接続を 30 秒間待機し、最大実行時間のために失敗します。

必要に応じて値を変更することもできますが、通常、ソケットが数秒以内に開かれない場合、接続は不可能であると見なすことができます。

さらに、set_time_limit()スクリプトの最大実行時間を増やすために使用することもできます。

于 2009-10-29T17:16:19.457 に答える
-1

問題はfsocketopenのタイムアウトではありませんが、phpスクリプトがphp.iniで設定されている最大実行時間に達すると、デフォルトで30秒に設定されます。phpをapacheモジュールとして実行している場合は、最大実行時間を確認してください。 php.iniで、実行時間を長くするためにこれを増やすと、デフォルトでcliのphp.iniでオプションが無効になっていることがわかります。

于 2009-10-29T19:59:41.420 に答える