2013-04-29 18 views
5

これで、file_get_contents()を使用して別のページを読み込むPHPスクリプトがあります。PHPが2秒後にfile_get_contents()を停止する

他のページには読み込みに約30秒かかります(スクリプトの種類)。このスクリプトを開始するにはfile_get_contents()が必要です。

問題は、file_get_contents()が30秒間ローディングし続けることです。これを止める唯一の方法は、タブを閉じることです(タブを閉じるときに呼び出されるスクリプトは実行されます)。

だから、どうすればfile_get_contents();が2秒後に終了するのですか?事前

+3

なぜfile_get_contents()を使用しますか?別のスクリプトを実行するために単にそれを使用しているのであれば、単にcurlを使用してcurlの出力をnullにルーティングしないだけです。または、2番目のスクリプトから出力を削除し、ignore_user_abort(true)を入力します。 2番目のスクリプトでは、前のコマンドをキャンセル/中止しても実行し続けます。 phpは上から下への言語なので、次のプロセスは常に前のプロセスが完了するのを待っているので、あなたのfile_get_contents()は必ず移動しなければなりません。 – Dave

+3

[こちら](http://www.php.net/manual/en/function.file-get-contents.php#82527) – HamZa

+1

非常にありがとうHamZa :) – Anim8r

答えて

3

おかげで、あなたの質問に答えることはできませんが、私が代わりにcURLfile_get_contentsを使用することをお勧めします。

例:

function get_url_contents($url) { 
    $crl = curl_init(); 

    curl_setopt($crl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)'); 
    curl_setopt($crl, CURLOPT_URL, $url); 
    curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($crl, CURLOPT_CONNECTTIMEOUT, 5); 

    $ret = curl_exec($crl); 
    curl_close($crl); 
    return $ret; 
} 

あなたの問題は、タイムアウトからのものであってもよい:default_socket_timeout

しかし、2秒は本当に非常に少数であるため、これは論理的には思われないと、なぜ誰かが希望私は自分自身を説明することはできません2秒に変更してください。デフォルトは60秒です。

+0

私はCURLOPT_FOLLOWLOCATIONも追加したいと思います。 –

+0

うん、OPは彼が望むものを追加することができます。これはGoogle Chrome拡張機能に使用している最小のものです。例えば、 'User Agent'を設定しないと、一部のWebサイトはデータをまったく返しません。 – enenen

0

file_get_contentsの前にset_time_limit(2)を使用することができます。

+1

'set_time_limit'は、スクリプトやコードのブロックだけでなく、スクリプト全体の最大実行時間制限を設定します。スクリプトが実行されたときにスクリプトの実行フローが壊れたり、高負荷環境で適切な実行時間制限セット。 – SIFE

1

manual pageでは、file_get_contents()は、私たちのオプションを微調整することができるので、$contextという3番目の引数を受け入れることがわかります。我々はtimeoutは私たち人間のように見えるHTTP context options達し、そこからいくつかのリンクを次に示します。だから、あなたはコンテキストを提供したり、default_socket_timeoutを変更することができますいずれか

タイムアウトフロート

Read timeout in seconds, specified by a float (e.g. 10.5). 

By default the default_socket_timeout setting is used. 

を(最初のオプションは以下になります他のものを壊す傾向がある)。

免責事項:私はそれをテストしていません。

関連する問題