2009-08-10 9 views
1

PHPスクリプトを使用してBeanstalkdサーバーに接続し、既存のキューからジョブを予約しようとしています。 が、私は仕事が利用可能でない限り、ハングアップするスクリプトを期待して、デーモンからの応答を取得するためのfgets()関数を使用しています、ここではサンプルコードです:PHP fgets()(またはfread())がブロックされない

set_time_limit(0); 
$connection = fsockopen('localhost', 11300); 
fwrite($connection, "reserve\r\n"); 
stream_set_blocking($connection, TRUE); 
fgets($connection); 

あなたは、私が強制しようとしている見ることができるようにfgets()関数がブロックされていて、max_execution_timeを0に設定しています(制限なし)。しばらくして(2mins)スクリプトはエラーなしで戻ります。 私はtelnetで予約コマンドを実行しようとしましたが、exepctedとしてハングします。 私もfread()を使用しようとしましたが、同じ動作が発生します。

解決方法についてのご意見はありますか?

答えて

1

stream_set_timeout()もお試しください。

+0

ええ、それは解決策になりますが、私はスクリプトを死ぬことなく待つ正しい時間を推測することなく、それを行う完全なノンブロッキング方法があるかどうかを知りたいと思います。 これは何らかのバグかどうか疑問に思っています。 –

0

php.iniに値を設定しましたか? phpinfo()で正しい値を確認しましたか?プログラムで設定した場合、うまく動作しません。 http://us.php.net/manual/en/function.set-time-limit.php

この機能は、PHPがセーフモードで実行されているときは効果がありません。セーフモードをオフにするか、php.iniの制限時間を変更する以外の回避策はありません。

+0

ありがとうございますが、私はmax \ _execution \ _timeが本当の問題だとは思っていません(私はそれについて何のエラーもありません)、私はphp.iniに設定しました。スクリプトは戻ってきます。 私がfgets()関数の出力を印刷しようとすると、空の文字列が得られるというのが最も奇妙なことです。 –

0

2分後にデーモンが行末の文字を出力する可能性があります。空の文字列をチェックしてループバックしてみましたか?

関連する問題