人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

コマンドラインから実行したPHPが時間経過すると終了してしまいます。
コードのおおまかな内容としては、
1. $fp = pfsockopen($host, $port) で、TCP接続
2. 受信した内容を while($foo = fgets($fp)) で取得しdump

というところです。
これを以下のような感じで、コマンドライン上から実行しています。
$ php -q script.php

数時間?8時間程度は実行されているようですが、その後、実行終了してしまっているようです。

このようなコーディングは初めてで、どこからデバッグして良いか悩んでいるところです。
どなたか、参考Webやお知恵を拝借できればと思います。
よろしくおねがいします。

●質問者: tomcat_a88
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dump FP PHP SCRIPT TCP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● khoshi3
●70ポイント ベストアンサー

php.ini(/etc/php.iniなどにあります)の「max_execution_time」を長めの必要な値に設定してみてください。defaultは30秒ですが、これはphpスクリプトが消費した実ユーザ時間です(=「ps -ef」等で見れる TIMEの値です)。

http://php.plus-server.net/ref.info.html

max_execution_time integer

スクリプトがパーサにより強制終了されるまでに許容される最大の 時間を秒単位で指定します。この命令は、いい加減に書かれた スクリプトがサーバーの負荷を上げることを防止するのに役立ちます。

デフォルトでは、30 に設定されています。最大実行時間は、システムコール、ストリーム操作等の 影響を受けません。

◎質問者からの返答

早速ありがとうございます。

max_execution_time の設定は、Webサーバーから呼び出した際の実行時間です。

コマンドラインから使用した場合、max_execution_time ディレクティブは上書きされ、0 (無制限) に設定されます。

PHP Manual 25.PHPをコマンドラインから使用する

http://www2.rit.shiga-irc.go.jp/~fukao/docs/php_manual/features....

実際、先に書きましたように、数時間?8時間程度は実行されていて、気がつくと終了してしまっているような状態です。

コード内でエラーが出たのか、サーバー側の制限なのかわからないのですが…

環境は、 CentOS 4.4 PHP4.3 です。


2 ● khoshi3
●0ポイント

コメント欄が閉じているのでこちらから失礼します。ポイントは不要です。

tomcat_a88さんは書きました:

> max_execution_time の設定は、Webサーバーから呼び出した際の実行時間です。

> コマンドラインから使用した場合、max_execution_time ディレクティブは上書きされ、0 (無制限) に設定されます。

すみません、仰るとおり、CLIなphpはmax_execution_time=0なのですね。勉強になりました。コマンドラインな処理はいつもperlを使ってしまうので…。

phpスクリプト自身のどこかでfail-safeのためにset_time_limit()で設定しているということもないですよね。

的外れな回答をしてしまい申し訳ございませんでした。

あとは、サーバ側の制約で長時間実行のスクリプトが終了してしまうとすれば、以下の点を確認してみて頂く必要があると思います。:


※ご参考までに: [ThinkIT] 第5回:カーネルをチューニングする (1/4): http://www.thinkit.co.jp/free/tech/23/5/

◎質問者からの返答

追記をありがとうございます。

# ulimit -a で、サーバー側の制約を見てみました。

ひっかかりそうな制限値はなさそうな感じでしたね…。

ちょっと、コードの方をデバッグできるよう書き換えて、処理の都度、ダンプさせてみます。

一旦、質問を締め切ります。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ