-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);

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

4

2 回答 2

1

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

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

于 2013-09-19T13:37:32.503 回答
1

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

但是,还有一些其他问题:

  1. 您的脚本正在使用已弃用的数据库 API 函数 (mysql_*) - 您确实需要阅读如何防止 PHP 中的 SQL 注入?

  2. 您可能会暴露其他文件,因为您没有尝试验证通过 readfile 获取的内容。例如,如果$_GET['image']contains ../connections/site.php,您的脚本可能会输出包含敏感数据库设置等的原始(即:未解析的)PHP 文件。请参阅现有的防止目录遍历 PHP 但允许路径问题/答案以获取更多信息。

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

于 2013-09-19T13:37:39.683 回答