加载图像导致两次点击时重复的卷曲请求

时间:2016-03-20 08:49:31

标签: php curl readfile

我已经将这些代码剥离到了最基本的骨头,但仍然存在问题。无法使curl请求导致只有一次点击页面,当与readfile()一起使用时,它总是会点击两次来加载图像。

它应该工作的方式:当用户请求页面时, image-url.php 它会显示一个图像 - download.png image-url.php 中的脚本向 http://example.com/test.php 发出curl请求,该请求会递增计数器并更新数据库。

问题在于,此处显示的代码会点击 http://example.com/test.php 两次,我无法弄清楚原因。

我发现如果我在卷曲请求之后请求图像,图像不显示,则会加载页面。计数器递增一次。

如果我删除了请求图像的代码,页面将不会加载(预期的行为),计数器会递增一次。

必须有一种方法可以加载图像而不是页面,并且一次增加计数器。

我正在尝试使用curl,因为请求页面会因图像而异,并且会出现在各种服务器上。图像始终位于同一个域中。如果能使它发挥作用,似乎是最好的方法。

有人可以帮忙吗?

图片-url.php

    <?php
        // display the requested image ( works fine )
    $show_image = "download.jpg";
    $imginfo = getimagesize($show_image);
    header("Content-type: ".$imginfo['mime']);
    readfile($show_image);

        //  send useragent to hit counter or else won't count
    $agent = $_SERVER['HTTP_USER_AGENT'];


    $curl = curl_init();
    curl_setopt ($curl, CURLOPT_URL, "http://example.com/test.php");
    curl_setopt($curl, CURLOPT_USERAGENT, $agent);
        //  makes no difference whether CURLOPT_RETURNTRANSFER set or not.
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec ($curl);
    curl_close($curl);
        // grasping at straws here to no affect
    unset($curl);

    //  requested image displays, hits 'http://example.com/test.php' twice
    ?>

hitter.php 这是一个简单的点击计数器。我删除了大部分功能,因此它只计算命中和记录ip,页面名称和用户代理。当包含在页面中时,它会记录每次访问一次,但卷曲请求会计算两次。

    <?php
    include('functions.php');
    // get hitter info
    $ipAddress = $_SERVER['REMOTE_ADDR'];
    $page_name = basename($_SERVER["REQUEST_URI"]);
    $browser = $_SERVER['HTTP_USER_AGENT'];

    //database connection
    $db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);

    $statement=$db->prepare("INSERT INTO `page_views` (`page_name`, `ip`,
    `browser`)
    VALUES ( ?, ?, ?)");

    $statement->execute(array($page_name $ipAddress, $browser));
    // this adds one record to the counter for all hits
    // except from image-url.php which increments twice
    ?> 

更新

当在图像标记中使用 image-url.php 时,上述代码按预期工作:<img src = "image-url.php">。它显示图像并计算一页加载。但是加载 image-url.php 会直接计算两个页面加载次数。

0 个答案:

没有答案