我正在使用输出图像的PHP脚本,我想要做的是跟踪何时在电子邮件上打开图像,该代码用于显示图像但不运行数据库查询并更新计数。
PHP代码如下。
$image = $_GET['image'];
require_once('connections/site.php');
mysql_select_db($database_site, $site);
$query_requests = "SELECT count FROM tracker WHERE id = '1'";
$requests = mysql_query($query_requests, $site) or die(mysql_error());
$row_requests = mysql_fetch_assoc($requests);
$count = $row_requests['count'];
$newcount = $count++;
$query_update = "UPDATE count SET count = '$newcount' WHERE id = '1'";
$update = mysql_query($query_update, $site) or die(mysql_error());
header("Content-Type: image/jpeg");
readfile('https://mysite.co.uk/images/'.$image);
也许我应该使用不同的方法?我正在寻找一种跟踪标准图像打开的方法,但我似乎找不到合适的方法,所以我想我会尝试做一些事情来做这件事。
答案 0 :(得分:1)
将readfile('https://mysite.co.uk/images/'.$image);
放在代码的底部,然后在它之前添加此行:
header("Content-Type: image/jpeg");
答案 1 :(得分:1)
问题是readfile读取并直接写入输出缓冲区,因此如果您要使用该方法,则需要将readfile移动到脚本的末尾。
然而,还有一些其他问题:
您的脚本使用的是不推荐使用的数据库API函数(mysql_ *) - 您确实需要阅读How can I prevent SQL injection in PHP?
您可能会暴露其他文件,因为您没有尝试验证通过readfile获取的内容。例如,如果$_GET['image']
包含../connections/site.php
,则您的脚本可能会输出包含敏感数据库设置的原始(即:未解析)PHP文件等。)请参阅现有的Preventing Directory Traversal in PHP but allowing paths问题/答案了解更多信息。
您没有输出Content-Type或Content-Length标题等。