[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