PHPの fopen に関する疑問です。
先日、自サイトにアクセスログを設置してみようと思い立ちfopenにてログファイルを開きfputして閉じるだけの簡単なプログラムを組みました。下記↓
php
1date_default_timezone_set('Asia/Tokyo'); 2$log = date( "Y-m-d H:i:s" ). "\t"; 3$log .= $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] . "\t"; 4$log .= $_SERVER['HTTP_USER_AGENT'] . "\t"; 5$log .= $_SERVER['HTTP_REFERER'] . "\t"; 6$log .= @gethostbyaddr($_SERVER['REMOTE_ADDR']) . "\n"; 7$fp = @fopen(“ファイルまでのパス/log.txt", "a") or die("Log Error"); 8flock($fp, LOCK_EX); 9fputs($fp, $log); 10fclose($fp); 11?>
ログを撮りたいファイルにinclude_onceして使うイメージです。
ふと、このあたりちゃんと勉強せずに使っていたなぁと思い、webであちこち調べましたが、ファイルを開いてポインタを移動するだけなのでメモリの圧迫はないだの無視できるだのの記述はあるのですが、ポインタの移動時間について触れている記述が見つかりません。
Q1. ファイルをfopen
a
で開いて、1行書き込んで、クローズという簡単な作業なのですが、ファイルの中身の行数が増え数十万行とかになってきた場合、オープンの時間や、ポインタを最終行に移動する時間は増えるものなのでしょうか?
Q2. 簡単な処理なので、データベースを使うまでもないという考えなのですが、データが増大した場合データ保存部分はDBに投げしてしまった方が、処理時間がかからないのでしょうか?
(個人的にはDBの接続手続きの方が時間がかかりそうなイメージを持っています。)
試したこと
1万行ぐらいまで試してみましたが、ログ書き込みよりもページのHTML描画やjavascriptの処理の方が時間がかかっている感じでしたので、上記スクリプトをincludeするだけのページも作成してみましたが、一瞬で終わってしまいます。
ご存知の方がいらっしゃいましたら、アドバイスお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/22 14:32 編集
2018/10/22 14:49
2018/10/22 15:18