Есть ли способ сказать curl, чтобы он не использовал кэш


Я пытаюсь узнать размер файла URL-адреса:

$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. Я думаю, что это слишком низко, потому что у меня есть кэш Google. Может ли это быть правдой? Также я протестировал Google на каком-то другом сайте, который вычисляет размер URL-адреса, и он был в два раза больше.

 25
Author: Tony Stark, 2013-03-19

5 answers

Для этого вы можете использовать CURLOPT_FRESH_CONNECT. От curl_setopt

CURLOPT_FRESH_CONNECT ВЕРНО, чтобы принудительно использовать новое соединение вместо кэшированного.

curl_setopt($curl1, CURLOPT_FRESH_CONNECT, TRUE);
 37
Author: Olaf Dietsche, 2013-03-19 07:34:07

Curl_setopt($curl1, CURLOPT_FRESH_CONNECT, 1);//не используйте кэшированную версию URL-адреса

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

Проверьте пример здесь

Вы можете установить заголовок

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

Эта ссылка может быть вам полезна http://www.php.net/manual/en/function.curl-setopt.php#96903

 11
Author: Subodh Ghulaxe, 2013-03-19 08:25:29

Лучший способ избежать кэширования - это применить время или любой другой случайный элемент к URL-адресу, например:
$url .= '?ts=' . time();

Так, например, вместо того, чтобы иметь
http://example.com/content.php
вы бы так и сделали
http://example.com/content.php?ts=1212434353

 6
Author: Mike Walkowiak, 2015-01-13 23:15:49

Вы можете указать CURL использовать свежие данные, установив CURLOPT_FRESH_CONNECT в TRUE

Вы можете прочитать больше о функции CURL здесь:

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

 3
Author: Dead Man, 2013-03-19 07:35:03

Используйте 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 ознакомьтесь с http://php.net/manual/en/function.curl-setopt.php

Пусть это поможет вам.

 3
Author: Tony Stark, 2013-03-19 07:52:39