我希望我的应用能够判断过去30天内是否还没有查看过图像并将其删除(以及与之关联的数据库中的数据)。我知道你可以动态地读取PHP并输出图像,但我听说它在系统上非常沉重。即使直接观看图像,有没有办法让我跟踪这些点击? (htaccess能够做到吗?)提前谢谢。
答案 0 :(得分:6)
对于.htaccess这样的事情......
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 :(得分:3)
您可以解析HTTP日志并在事后进行此分析。
尽管如此,我仍然建议使用“动态PHP文件输出图像”方法 - 请注意,PHP文件可以简单地流出文件。是的,它会慢于完全不通过PHP,但它不会对你的系统产生重大影响。
答案 2 :(得分: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' />
答案 3 :(得分: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;
这里可能有错误,我只是给你一个大致的想法......