
いつもお世話になっております。
$all_listには1000以上のURLが含まれています。
それを1ページずつ読み込みある単語を探すという処理を作っています。
しかし、file関数が遅い。。。その為、サーバがダウンしないか心配。
phpのfile関数は極端に遅いという事が他の書き込みでもあるのですが、他に良い関数や他の方法のアイディアがある方がいればご教授下さい。
fopen等も試してみましたが。。。
for($a = 0; $a < ($num - 1); $a++)
{
$html = @file("$all_list[$a]");
if($html){
foreach( $html as $key => $value ){
$rcd = ereg("$search", $value);
if($rcd){
$INFO[][url] = $all_list[$a]
}
}
}
}
@fclose($html);
No.6
- 回答日時:
どんな案件か知らないので具体的にはあれですけど、
結局やることがDLとページ検索なら
HyperEstraierでもいれて、DLと検索両方やらせては?と思いました。
自前サーバで実行時間に問題ないならPHPでもいいと思いますが
PHPの通信はあまり信用してないのでPHPのcurl関数?とか使用しては?という意味です。
先にDLしてても1000ファイルの文字検索だとまだ時間かかるのでは?
単に集計用途で週1回のアクセスとかならもうそのままでもいいと思いますが、
やっぱり目的が不明なのでなんとも。
この回答への補足
環境はPHP + (一応Mysqlと自前サーバです)。
(1)あるサイトの全自リンクを全て取得。
(2)そのURLリストを解析し、検索単語を見つける。
(3)そのURLを抜き出す。
(2)(3)の時に時間を要していたので、今回の質問に至りました。
皆さんのアドバイスを受け、バックエンドでの処理を考えています。
1000ファイル以上の検索でも、バックエンド側ならある程度時間がかかってもサーバのタイムアウト等の心配はない(ですよね...)。
PHPはかじる程度でしたので、今回の質問で色々勉強になりました。
No.3
- 回答日時:
file()は配列を生成する分遅いのは仕方ないかと。
へぼPCでベンチマークに挑戦。
データは 100文字x1000行x4ファイル
1. file()
2. fopen() fread()
3. readfile() ob_get_contents()
4. include() //データ形式は <?php return '';
普通はfopenでいいと思いますが、データ更新より読み込みの方が多いのであれば、
4. みたいにキャッシュ的なことをするのが速度改善になるかと。
<?php
for ($i = 1, $data = ''; $i<= 4 ; $i++) {
if ($mode == 1) { // 0.0330sec
$file = 'data/data' . $i . '.dat';
$tmp = file($file);
$data .= implode('', $tmp);
} else if ($mode == 2) { // 0.0082sec
$file = 'data/data' . $i . '.dat';
$fp = fopen($file, 'r');
while (!feof($fp)) {
$data .= fread($fp, 8192);
}
fclose($fp);
} else if ($mode == 3) { // 0.0099sec
$file = 'data/data' . $i . '.dat';
//ob_start();
readfile($file);
$data .= ob_get_contents();
ob_clean();
} else if ($mode == 4) { // 0.0062sec
$file = 'data2/data' . $i . '.dat';
$data .= include $file;
}
}
No.2
- 回答日時:
ある単語を探す部分に、正規表現を使うと、
その分付加がかかります。可能なら
単純なSTR処理関数に置き換えれば、早くなるかも(保障無し)
<ベンチマークテストが必要>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSV読込(fgetcsv関数)で「手...
-
C#のキャスト?
-
PHPで文字列の比較しています
-
Resource id #3 と表示されま...
-
While文を使って配列の中身を全...
-
CSVファイルの最終行のデー...
-
PHP5で、utf-8形式のcsvファイ...
-
データ受け取り
-
テキストデータから指定行の削除
-
PHPでの単語の出現回数表示
-
複数行のデータのPOST処理に関して
-
テキストに格納しているデータ...
-
【PHP】csvファイルへの書き出...
-
phpメールフォームから送信され...
-
phpである処理をすると数を1足...
-
ヒアドキュメントの中のfor文
-
エラーメッセージ(無効な間接...
-
【PHP】phpで毎日ランダムで変...
-
PHPで地域名のみ変更(つづき)
-
String だと「 ByRef引数の型が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【PHP】csvファイルへの書き出...
-
C言語でCSVファイルの行数を読...
-
csvの内容を行単位で削除したい
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
While文を使って配列の中身を全...
-
複数行のデータのPOST処理に関して
-
CSVでアップロードしたデータの...
-
PHPでCSVの一部の行を編集したい
-
自動で番号を振りたい
-
CSVファイルの最終行のデー...
-
PHPで、CSVファイルを、指定し...
-
stdClass Objectを連想配列のよ...
-
PHP5でCSVの指定行データだけを...
-
ブログのトラックバックについて
-
PHPで外部ファイルを読み込むと...
-
◆速い、ファイル読み込みは?
-
バイナリファイルの内容を、そ...
-
行数が30万件ほどあるCSVから、...
-
PHP 別ドメインへのファイル保存法
おすすめ情報