有没有办法告诉curl不使用缓存

时间:2013-03-19 07:30:45

标签: php curl

我想找出网址的文件大小:

$url1 = 'www.google.com';
$curl1 = curl_init();
curl_setopt($curl1, CURLOPT_URL, $url1); 
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($curl1);
$file_size = curl_getinfo($curl1, CURLINFO_SIZE_DOWNLOAD ); 
$file_size_kb = $file_size / 1000;
echo $file_size_kb;

输出为43331。我认为它太低了,因为我有谷歌缓存。这可能是真的吗?此外,我在其他一些计算网址大小的网站上测试谷歌,它的数量是原来的两倍。

5 个答案:

答案 0 :(得分:38)

您可以使用CURLOPT_FRESH_CONNECT。来自curl_setopt

  

CURLOPT_FRESH_CONNECT TRUE强制使用新连接而不是缓存连接。

curl_setopt($curl1, CURLOPT_FRESH_CONNECT, TRUE);

答案 1 :(得分:12)

curl_setopt($ curl1,CURLOPT_FRESH_CONNECT,1); //不要使用网址的缓存版本

CURLOPT_FRESH_CONNECT TRUE to force use of a new connection instead of a cached one.

检查示例here

你可以设置标题

$headers = array( 
                 "Cache-Control: no-cache", 
                ); 
curl_setopt($curl1, CURLOPT_HTTPHEADER, $headers);

此链接可能对您有所帮助http://www.php.net/manual/en/function.curl-setopt.php#96903

答案 2 :(得分:6)

避免缓存的最佳方法是将时间或任何其他随机元素应用于网址,如下所示:
$url .= '?ts=' . time();

所以例如而不是有 http://example.com/content.php
你会有 http://example.com/content.php?ts=1212434353

答案 3 :(得分:3)

通过将CURL设置为CURLOPT_FRESH_CONNECT

,您可以告诉TRUE使用新数据

您可以在此处详细了解CURL功能:

http://php.net/manual/en/function.curl-setopt.php

答案 4 :(得分:3)

使用 CURLOPT_FRESH_CONNECT - TRUE强制使用新连接而不是缓存连接。

示例:

<?php
    function check_url($url) {
        $c = curl_init();
        curl_setopt($c, CURLOPT_URL, $url);
        curl_setopt($c, CURLOPT_HEADER, 1); // get the header
        curl_setopt($c, CURLOPT_NOBODY, 1); // and *only* get the header
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); // get the response as a string from curl_exec(), rather than echoing it
        curl_setopt($c, CURLOPT_FRESH_CONNECT, 1); // don't use a cached version of the url
        if (!curl_exec($c)) { return false; }

        $httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);
        return ($httpcode < 400);
    }
?>

有关curl check out http://php.net/manual/en/function.curl-setopt.php

的详细信息

这可能对你有所帮助。