PHP作为图像src - 跟踪

时间:2013-09-19 13:35:01

标签: 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'";
    $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);

也许我应该使用不同的方法?我正在寻找一种跟踪标准图像打开的方法,但我似乎找不到合适的方法,所以我想我会尝试做一些事情来做这件事。

2 个答案:

答案 0 :(得分:1)

readfile('https://mysite.co.uk/images/'.$image);放在代码的底部,然后在它之前添加此行:

header("Content-Type: image/jpeg");

答案 1 :(得分:1)

问题是readfile读取并直接写入输出缓冲区,因此如果您要使用该方法,则需要将readfile移动到脚本的末尾。

然而,还有一些其他问题:

  1. 您的脚本使用的是不推荐使用的数据库API函数(mysql_ *) - 您确实需要阅读How can I prevent SQL injection in PHP?

  2. 您可能会暴露其他文件,因为您没有尝试验证通过readfile获取的内容。例如,如果$_GET['image']包含../connections/site.php,则您的脚本可能会输出包含敏感数据库设置的原始(即:未解析)PHP文件等。)请参阅现有的Preventing Directory Traversal in PHP but allowing paths问题/答案了解更多信息。

  3. 您没有输出Content-Type或Content-Length标题等。