PHP作为图像src跟踪
我正在使用一个输出图像的PHP脚本,我试图做的是跟踪在电子邮件上打开图像的时间,代码用于显示图像,但不运行数据库查询和更新计数 PHP代码如下所示PHP作为图像src跟踪,php,mysql,Php,Mysql,我正在使用一个输出图像的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'
$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);
也许我应该用另一种方法?我在四处寻找一种跟踪打开的标准图像的方法,但似乎找不到合适的方法,所以我想我应该试着做点什么来做到这一点。putreadfile('https://mysite.co.uk/images/"(图片),代码>位于代码底部,并在其前面添加此行:
标题(“内容类型:图像/jpeg”)代码>问题在于读取并直接写入输出缓冲区,因此如果要使用该方法,则需要将readfile移动到脚本的末尾
然而,还有一些其他问题:
您的脚本使用的是不推荐使用的数据库API函数(mysql_*)-您确实需要阅读
由于不尝试验证通过readfile获取的内容,因此可能会暴露其他文件。例如,如果$\u GET['image']
包含。/connections/site.php
,您的脚本可能会输出包含敏感数据库设置等的原始(即:未解析)php文件。有关详细信息,请参阅现有问题/答案
您没有输出内容类型或内容长度标题等
**警告**您的代码易受sql注入攻击。如果电子邮件提供商不显示图像(这是gmail等提供商的默认设置),该怎么办?您的sql查询是否有任何错误?无论哪种方式,您都应该只执行updatetrackersetcount=count+1,其中id='1'
,而不是同时执行select和UPDATE。不再维护mysql.*
函数,不应在任何新的代码库中使用。它正逐渐被淘汰,取而代之的是更新的API。相反,您应该与或一起使用。谢谢您的回答,我更新了我的问题以反映这一点,我从底部的问题开始,这给出了相同的结果。谢谢您的回答,我最初在最后有readfile,但这不起作用,我已经更新了我问题中的代码。@JamesLeist为什么要在readfile中使用URL,而不是简单地提供磁盘上图像文件的绝对路径?