[PHP-users 20204]Re: PHPでのプロキシの設定について

藤本悟司 satoshi @ try-square.co.jp
2004年 2月 3日 (火) 11:31:13 JST


藤本と申します。

Keisuke Hamanaka さんは書きました:
>ただ、Webサイトのソースを一行ずつ読み込んでくるロジックが
>わかりません。
>
>私は従来、ファイル等の読み込みを行う際、以下のようなソースを
>書いてきました。
>
>$fp=fopen ('./log/source.log','r');
>for($num = 0;!feof($fp);$num++){
>    $line=fgets($fp);
>
>(以下略)
>
>今回のWebページも同様に、ソースを一行ずつ読み込んで、
>解析したいのですが、HTTP_Requestにはファイルポインタ(?)
>という概念がないようで、どのようにしたら良いのかわかりません。

ここまで出来る方が、なぜ?という気がします。惜しいですね。

バッファリングしておけば良いのではないでしょうか。
ローカルファイルを読むときも同様ですが、読む処理と解析する
処理(さらに出力処理等)は、分離されてるほうが、
読みやすく書きやすく、柔軟性があります。一概ではありませんが。

読みながら解析しながら、場合によっては出力やエラー処理も
ごちゃ混ぜに行っていると、ちょっとした変更(例えば読み方が
少し変更になっただけ)で、特性の影響を受けて修正が必要な
箇所が大きくなったりします。

// バッファリング
$filename = "./log/source.log";
$fp = fopen( $filename, "r" );
$buf = fread( $fp, filesize( $filename ) );
fclose($fp);
// バッファを1行ずつ解析
$file = split( "\n", $buf );
for ( $i = 0; $i < count($file); $i++ ) {
    $line = chop($file[$i]);
    ...
}

読み込み元や読み込み方法が変更になったのなら、上記バッファリング
の部分が変更になるだけですね。

読み込み元が巨大で一度にバッファリングできないような場合は、
適当にサイズを決めて、少しずつバッファリングすれば良いです。



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