Есть ли способ сказать 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-адреса, и он был в два раза больше.
5 answers
Для этого вы можете использовать CURLOPT_FRESH_CONNECT
. От curl_setopt
CURLOPT_FRESH_CONNECT ВЕРНО, чтобы принудительно использовать новое соединение вместо кэшированного.
curl_setopt($curl1, CURLOPT_FRESH_CONNECT, TRUE);
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
Лучший способ избежать кэширования - это применить время или любой другой случайный элемент к URL-адресу, например:$url .= '?ts=' . time();
Так, например, вместо того, чтобы иметьhttp://example.com/content.php
вы бы так и сделалиhttp://example.com/content.php?ts=1212434353
Вы можете указать CURL
использовать свежие данные, установив CURLOPT_FRESH_CONNECT
в TRUE
Вы можете прочитать больше о функции CURL
здесь:
Используйте 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
Пусть это поможет вам.