[PHP-users 10116] PHP + MySQL の大量処理について

岡本 晃一 php-users@php.gr.jp
Sat, 14 Sep 2002 17:11:48 +0900


こんにちは、岡本です。

実は表題の件についてどうしてもうまくいかないことがあり、皆様のご意見をお聞か
せ頂きたいのです。

現在、大量のデータ(50万件程度)をMySQLに登録しています。
データの内容はWEBページの所在を示すもの(アドレス)とそのWEBページの状態(更新
日時やカウンター値など)です。

これらを以下のようにして処理していますが、途中で処理が止まってしまい(2万件目
ぐらい)、解決方法を探しております。
なにとぞ皆様のご意見をお聞かせください。

これまでに試してみたことは、php.ini において、memory_limit を64Mとしたり
(dumpするとデータ自体は30M程度です)、 set_time_limit() をスクリプト上で 0 に
設定したりしています。
50万回ループするはずが、なぜ2万回程度でストップしてしまうのか、原因がわから
ず手詰まり状態です・・・・


実際のスクリプト(一部省略しています)
#!/usr/local/bin/php -q
<?
  set_time_limit(0);

  $web = mysql_db_query("SELECT web, host FROM dbname");
  while ($web_values = mysql_fetch_array($web)) {
    $header = "GET " . $web_values['web'] .  " HTTP/1.1\n";
    $header .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,
*/*\n";
    $header .= "Accept-Language: ja\n";
    $header .= "Accept-Encoding: gzip, deflate\n";
    $header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; Q312461; .NET CLR 1.0.3705)\n";
    $header .= "Host: " . $web_values['host']  . "\n";
    $header .= "Connection: Keep-Alive\n";

    $fp = fsockopen($web_values['host'] , 80, &$err_num, &$err_msg, 30);

    if ($fp) {
      fputs($fp, $header);
      while (!feof($fp))
      $response .= fgets($fp, 1);
    }
    fclose($fp);
    unset($header);

    $koushin = strrev(substr(strstr(strrev(substr(strstr($response, '更新日
時'), 48, 24)), strrev(')')), 4, 16));
    unset($response);

    if $(koushin != '') {
        mysql_db_query("update dbname set koushin = '" . $koushin . "' where
web = '" . $web_values[web'] . "'");
    }

    unset($koushin);
  }
  mysql_db_close();
  exit();
?>
---
岡本 晃一
FreeBSD + PHP4 + MySQL
info@kaigono.net