Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP作为图像src跟踪_Php_Mysql - Fatal编程技术网

PHP作为图像src跟踪

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'

我正在使用一个输出图像的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);
也许我应该用另一种方法?我在四处寻找一种跟踪打开的标准图像的方法,但似乎找不到合适的方法,所以我想我应该试着做点什么来做到这一点。

put
readfile('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,而不是简单地提供磁盘上图像文件的绝对路径?