[PHP-users 27196] ブラウザのタイムアウトを回避できません

ENOMOTO yhe10046 @ nifty.com
2005年 10月 13日 (木) 12:55:33 JST


こんにちは。Kumiko.E です。

環境は、
 PHP Version 4.3.10
 PostgreSQL 7.1.3
 Apache
です。

ブラウザから、PHPにDB(PostgreSQL)のバックアップ処理を
行わせています。バックアップ処理は、下記、各テーブルのデータを、
1件ずつ読み込んでテキストファイルに出力するという単純なものです。

 $table = array (
   0 => "tbl_a",
   1 => "tbl_b",
   2 => "tbl_c",
   3 => "tbl_d",
   4 => "tbl_e",
   5 => "tbl_f"
  );

foreach ($table as $name) {

 print "「"  . $name . "」のバックアップファイル作成中です。<BR>";

// バックアップテキストファイル作成
$filename = $name . ".txt";
$check = file_exists($filename);
   if ($check == true){
    unlink($filename);
   }
$newfile = fopen($filename,a);

$sql = "SELECT * FROM " . $name;
$err = "backup_001_" . $name;
$rs = do_sql($sql, $err);
$rs_cnt = pg_numrows($rs);
$fld_cnt = pg_numfields($rs);

 // 500件処理毎にブラウザに*印表示
for ($r=0; $r<$rs_cnt; $r++){
 if (($r % 500) == 0){
  print "*";         // この状態で突然ストップしてしまいます
  if (($r != 0) and (($r % 50000) == 0)){
   print "<br>";
  }
 }

 // リスト作成
 $list = pg_result($rs, $r, 0);
 for ($f=1; $f<$fld_cnt; $f++){
  $list = $list . "\t" . pg_result($rs, $r, $f);
 }
  $list = $list . "\n";
   $make_file = fwrite($newfile, $list);
 }
 fclose($newfile);

print "<BR>  →→→ 終わりました。<br>\n";
print "-------------------------<br>\n";

  }


以前は、問題なく処理できていたのですが、
レコード件数が増え、ブラウザのタイムアウトになってしまいます。
現在、処理途中の「*」表示の状況で、突然処理が中断されます。
特にエラーメッセージなどは表示されません。
また、処理は、5分もかからない段階で終わってしまいます。

:::::

過去ログやネット上で、調べてみたのですが、

  flush();
  set_time_limit(0);
  ini_set('max_execution_time', '300');

上記をプログラム内に記載しても、解決しませんでした。また、

  system("/usr/local/bin/php4 /cgi-bin/backup_pg.cgi > /dev/null &");

のように、外部ファイル実行というのも、
実行されませんでした。

:::::

このような場合、どうしたら良いでしょうか?
ご教授下さい。よろしくお願い致します。



Kumiko.E




PHP-users メーリングリストの案内