[PHP-users 4958] Re: 時間が掛かるページを実行中に、不正終了してしまう。

BAC php-users@php.gr.jp
Thu, 24 Jan 2002 20:47:53 +0900


BACです。

 クライアント側(ブラウザ)のタイムアウトはサーバ側では制御できません。
サーバがずっと出力を行わなければ、当然、クライアント側はタイムアウトを起
こします。

 ループの中でなんらかの出力を行って、ちょろちょろとデータを流してやれば
クライアント側のタイムアウトは防げます。

echo "<!-- \n" ;
for ($i=1;$i<1679617;$i++) {
   $b = sprintf ("%04s", base_convert($i,10,36));
   $sqlstr = "insert into a_tbl(ran_id) values ('".$b."')";
   $rtn = pg_exec($con,$sqlstr);

   echo ".\n" ;
   flush() ;
}
echo "-->\n" ;

 こんなのとか。3Mもコメントを入れるのが嫌なら適当に間引いてください。

 仕事で作ったものでは最初にグラフのインジケータを表示、その後ループ内で
バーのGIF画像を送ってプログレスバー風に表示させていました。ユーザ側は進
行状況を表示するだけの機能だと思ってたようでしたが、実はタイムアウトを防
ぐという重要な役割があったのでありました。

On Thu, 24 Jan 2002 19:40:27 +0900
"mots" <angel@cosmos-inc.net> wrote:

> 以下のコードを実行途中に、不正終了してしまうのですが
> 何か理由があるのでしょうか?
> 
> 不正終了するタイミング=挿入された件数は、実行時によりまちまちです。
> 
> 環境 【php4.1.1,postgreSQL 7.1.3, apache1.3.22】
> 
> ---------
> //4桁の英数字のすべての組み合わせ(36の4乗)をDB(PostgreSQL)に登録する。
> // a_tblのran_id(text型)に挿入。
> //データベース接続済み
>  for ($i=1;$i<1679617;$i++) {
>   $b = sprintf ("%04s", base_convert($i,10,36));
>   $sqlstr = "insert into a_tbl(ran_id) values ('".$b."')";
>   $rtn = pg_exec($con,$sqlstr);
>  }
> ---------
> 
> そこで、PHP実行タイムアウト制限の可能性を思い、次の設定にしたにも関わらず毎
> 度不正終了してしまいました。
> php.ini
>   max_execution_time = 0;

--------------------------------------------
BAC (bac@dev-nul.com)