2010-12-29 14 views
2

私のアプリは、過去30日間に画像が表示されていないかどうかを確認して、それに関連付けられたDBのデータとともに削除するかどうかを知りたいです。 PHPを読み込んで画像を動的に出力させることはできますが、システムにはかなり課税されています。イメージを直接表示してもこれらのヒットを追跡する方法はありますか? (htaccessはこれを行うことができるでしょうか?)事前に感謝します。画像ビューのトラッキング - PHP

+1

はありません、私はこれは間違いなくサニタイズの多くを必要としようとしていることを追加したいサーバー – ajreal

答えて

3

HTTPログを解析して、この分析を事後処理できます。

しかし、私はまだ、「動的なPHPファイルから画像を出力する」アプローチをお勧めします.- PHPファイルは単純にファイルを流すことができます。はい、それはPHPを一切経由しないよりも遅くなりますが、あなたのシステムでは大きな成果を上げることはありません。

0

イメージをフェッチし、データベースにpingを実行してイメージが表示されたことを示すスクリプトを作成できます。 image/jpgにスクリプトの戻り値の型を設定することで、あなただけのイメージを直接アクセスするのではなく、このスクリプトを使用することができます。

<?php 
//simplified image display script 

$imagepath="phpimages/$id.jpg"; 
$db->pingImage($id); 
$image=imagecreatefromjpeg($imagepath); 
header('Content-Type: image/jpeg'); 
imagejpeg($image); 

?> 

が続いて使用します。

<img src='fetchimage.php?id=478' alt='tracked image' /> 
0

私の知る限りでは、あなたがする必要がありますこのためのデータベースがあります。

サンプル・スキーマ:

Images 
    id (int, PK) 
    path (text) 
    hits (int) 

PHP:ここ

// get_image.php 
// note, this is just an example and I'm not considering security or hacking attempts 
$sql = mysql_query('SELECT * FROM images WHERE id = '.$_GET['id']); 
$img 

if(mysql_num_rows($img) == 1) 
    while($row = mysql_fetch_assoc($sql)) 
    $img = $row; 
else 
    // handle some error 

mysql_query("UPDATE images SET hit = hits + 1 WHERE id = ".$_GET['id']); 
$img = file_get_contents($img['path']); 
header('image/jpg'); 
echo $img; 

があるかもしれませんエラー、私はちょうどのように.htaccess何かについて

6

...あなたの一般的なアイデアを与えていますこれ...

RewriteRule ^image/(.*)$ image.php?id=$1 

そしてPHP ...

$id = $_GET["id"]; //don't forget to sanitize 
mysql_query("UPDATE images SET views = views + 1 WHERE image = '$id'"); //update no of views 
header("Content-Type: image/jpeg"); //send image header 
readfile($id); //output file to browser 
+1

にApacheのログ、最小限の影響を使用して、PHPを使用して提案のために行くために。誰かがこのスクリプトを何かの行に沿って打ったと想像してみてください。?id =/etc/passwd –