|
|
|
| Как определить, обновился файл xml на удаленном сервере или нет?
filesize, filemtime и stat не работают.
Пробую через сокет:
<?
$sock = fsockopen("www.vesti.ru", 80, $errno, $errstr, 60);
if (!$sock) die("$errstr ($errno)\n");
fwrite($sock, "HEAD /vesti.rss HTTP/1.1\r\n");
fwrite($sock, "HOST: www.vesti.ru\r\n");
fwrite($sock, "\r\n");
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
fclose($sock);
print $headers;
?>
|
Возвращается пустая строка.
Если брать какой-нибудь другой url, то хидер возвращается. С нужного мне url - ничего.
Почему? | |
|
|
|
|
|
|
|
для: Хулиган
(29.03.2008 в 10:24)
| | Судя по всему запрещён HEAD для этого файла, используйте GET, но считывайте информацию только до первой пустой строки - это и будут HTTP-заголовки. | |
|
|
|
|
|
|
|
для: cheops
(29.03.2008 в 11:03)
| | Ну собственно цикл while и читает до первой пустой строки...
Заменил HEAD на GET, но в полученых заголовках длины файла не наблюдается :(
HTTP/1.1 200 OK
Date: Sat, 29 Mar 2008 08:27:11 GMT
Server: Apache/1.3.26
Cache-Control: max-age=2400
Expires: Sat, 29 Mar 2008 09:07:11 GMT
X-Powered-By: PHP/4.0.4pl1
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=windows-1251
Age: 74
Это всё что отдает сокет. | |
|
|
|
|
|
|
|
для: Хулиган
(29.03.2008 в 11:26)
| | Она наблюдается только в двух случаях: файл статический и Apache автоматически подцепляет его размер, файл динамический (Apache не может в этом случае спрогнозировать размер) и разработчики озаботились отправкой соответствующего HTTP-заголовка. | |
|
|
|
|
|
|
|
для: cheops
(29.03.2008 в 12:09)
| | Видимо, товарищи не озаботились отправкой заголовка с указанием длины..
Придется гонять траффик впустую по cron'у.
Спасибо за помощь. | |
|
|
|