質問編集履歴

1 誤字修正

colling

colling score 777

2018/10/22 19:49  投稿

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

    34652 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る