SQLiteでたまにアクセスログが取れない
PHPが使えないサーバーにあるホームページのアクセスログを取得するため、
JavaScriptを使ってPHPが使えるレンタルサーバーに飛び、
PHP+SQLite2でアクセスログを集計していました。
最近パソコンを買い替えたのを機にPHPをVersion 5.4.8にアップデートしたところ、
ローカル環境でSQLite2が使えなくなり、この際pdo_sqliteにプログラムを書き換えました。
レンタルサーバーではSQLite2 がまだ使えるため、以前のプログラムはそのままにして
SQLite2 とPDO両方でログをとってみました。
するとSQLite2では取れているのにPDOでは取れていない、
逆にPDOでは取れているのにSQLite2では取れていないログがあることに気が付きました。
(詳しくは下記の画像をご覧ください 赤丸がついているものが他方にはないログです)
https://box.yahoo.co.jp/guest/viewer?sid=box-l-oolzr4jkzfiedw4zavuldosoha-1001&uniqid=12bc9230-5e96-41fb-b00e-271a1aa79397&viewtype=detail#du%3D12bc9230-5e96-41fb-b00e-271a1aa79397%26ds%3Dbox-l-oolzr4jkzfiedw4zavuldosoha-1001%26tu%3D12bc9230-5e96-41fb-b00e-271a1aa79397%26ts%3Dbox-l-oolzr4jkzfiedw4zavuldosoha-1001%26vt%3Dpublic%26lf%3Dlist%26ls%3D1%26lm%3D20%26il%3D1
何が問題なのでしょうか?
プログラム? SQLite? PHP? サーバー? 閲覧者のブラウザ?
また回避法をご存知でしたらご教授願います。
(log.js)
ref =document.referrer;
var qword="";
if(ref.indexOf("?")!=-1){
ref2=ref.split("?");
query=ref2[1].split("&");
qword="?qword=";
for (i=0; i<query.length; i++){
qword+=query[i]+"*";
}
ref=ref2[0];
}
document.write('<script src=" http://○○○/log2.php?ref='+ ref + qword +'"></script>');
document.write('<script src=" http://○○○/log.php?ref='+ ref + qword +'"></script>');
(log.php)
<?php
$referer = stripslashes($_GET['ref']);
$d=date_create();
$date=date_format($d,"Y/m/d");
$time=date_format($d,"H:i:s");
$day=date_format($d,"w");
$referer=sqlite_escape_string($referer);
$url=sqlite_escape_string($_SERVER['HTTP_REFERER']);
$accept_language=sqlite_escape_string($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$remote_addr=sqlite_escape_string($_SERVER['REMOTE_ADDR']);
$user_agent=sqlite_escape_string($_SERVER['HTTP_USER_AGENT']);
$db=sqlite_open("log.sqlite");
$sql="INSERT INTO log_table (
log_date,
log_time,
log_day,
log_url,
log_referer,
log_language,
log_remote_addr,
log_user_agent)
VALUES(
'$date',
'$time',
$day,
'$url',
'$referer',
'$accept_language',
'$remote_addr',
'$user_agent')";
sqlite_query($db,$sql);
sqlite_close($db);
(log2.php)
<?php
$referer = stripslashes($_GET['ref']);
$d=date_create();
$date=date_format($d,"Y/m/d");
$time=date_format($d,"H:i:s");
$day=date_format($d,"w");
$db=new PDO("sqlite:/home/○○○/www/log.sqlite3",null,null);
$referer=$db->quote($referer);
$url=$db->quote($_SERVER['HTTP_REFERER']);
$accept_language=$db->quote($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$remote_addr=$db->quote($_SERVER['REMOTE_ADDR']);
$user_agent=$db->quote($_SERVER['HTTP_USER_AGENT']);
$sql="INSERT INTO log_table (
log_date,
log_time,
log_day,
log_url,
log_referer,
log_language,
log_remote_addr,
log_user_agent)
VALUES(
'$date',
'$time',
$day,
$url,
$referer,
$accept_language,
$remote_addr,
$user_agent)";
$res=$db->prepare($sql);
$res->execute();
$db=null;
レンタルサーバーの環境
さくらインターネット
PHP Version 5.2.17
Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
SQLite 2.8.17
pdo_sqlite 3.3.7
補足
セキュリティ関係をすべて無効にしてみましたが全く効果なしです ブラウザ関係の設定もすべて低にしてみましたが改善されません