PHPのストリーム処理に関するタイムアウト

ちょっとした事でつまづいてしまったのでメモです。

ブログ記事更新時のPING送信を自前のping.phpファイルで行っていますが、どうも具合がおかしい。
ps auxコマンドで確認すると、ping.phpが大量に生き残っていてリソースを圧迫していました。
直打ちでping.phpを実行すると、どうも特定のPINGサーバにアクセスする際に処理が止まっている様子。
しかし、max_execution_timeもset_time_limitもどちらも数分程度しか指定していません(これらはセーフモードでPHPを実行していると無効になるそうですが、php.iniを見るとセーフモードはオフになっていました。)。
ならばと思い、phpのオプションを用いて

php -d max_execution_time=4 ping.php

を実行しても全く効きません。
ちなみに、接続部分はfsockopen()で行っていたのですが、その関数にもタイムアウト設定があります(勿論指定していますが効いてない・・・orz)

調べてみると、これらのタイムアウト設定は「スクリプトの実際の処理部分」の処理時間が計測されるのであって、ストリーム処理が入っているとその部分の処理時間は考慮されないという事でした。
つまり、色んな定数でタイムアウト時間を指定しても、ストリーム処理がボトルネックであれば何の意味もないという事です。
当然それ用のタイムアウト指定は存在していて、stream_set_timeout()関数で指定できるようです。
同じような所で詰まっている方はお試しを!
※ちなみに私はそれでも解決できず、結局feofループ&fread()の処理をやめてstream_get_contents()を使うようにすると処理が詰まるという事がそもそも無くなりました(;^^)

 

meisiyou
実行中プロセスはたまにチェックした方がいいにゃ。
この記事が役に立ったら★付けて欲しいにゃ。
1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
Loading...

    コメント