Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблемы с календарём
 
 автор: Владимир55   (31.01.2012 в 14:38)   письмо автору
244 байт
 
 

При настройке скрипта, предназначенного для выдачи кода 403 в случае просмотра страниц, уже имеющихся в кеше ПС, возникла некоторая проблема с обработкой времени.

<?php
    $name_file 
"test/test.txt";
    
$test = @file_get_contents($name_file);

    
$test .= chr(13).chr(10) . "Вызов страницы " date("d.m.Y H:i:s"time()) . chr(13).chr(10);

    
$tmp filemtime(__FILE__);

    
$test .= "Изменение файла " date("d.m.Y H:i:s"$tmp) . chr(13).chr(10);

    
$LastModified_unix $tmp;
    
$LastModified gmdate("D, d M Y H:i:s \G\M\T"$LastModified_unix);

    
$IfModifiedSince false;
    if (isset(
$_SERVER['HTTP_IF_MODIFIED_SINCE']))
        
$IfModifiedSince strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));

    
$test .= "If-Modified-Since " date("d.m.Y H:i:s"$IfModifiedSince) . chr(13).chr(10);

    if (
$IfModifiedSince >= $LastModified_unix)
    {
        
$test .= "304 " chr(13).chr(10);
        
file_put_contents($name_file$test);
        
//echo "<br>31";
        
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
        exit;
    }
    
header('Last-Modified: '$LastModified);

    
$test .= "200 ОК. " chr(13).chr(10);

    
file_put_contents($name_file$test);

    
// echo "<br />40";

?>


Чтобы не мешать header, для настройки используется запись в текстовый файл (в Приложении), содержимое которого показывает процесс адаптации поисковика. Получаем вот что:

Вызов страницы 31.01.2012 14:25:53
Изменение файла 31.01.2012 13:21:15
If-Modified-Since 01.01.1970 03:00:00
200 ОК.


При первом просмотре страница её содержание в кэше робота отсутствует, поэтому имеем If-Modified-Since 01.01.1970 03:00:00. Соответственно, отклик 200 ОК.


Время первого вызова страницы (31.01.2012 14:25:53) переносится в кэш поисковика, поэтому при втором вызове мы имеем:

Вызов страницы 31.01.2012 14:27:38
Изменение файла 31.01.2012 13:21:15
If-Modified-Since 31.01.2012 15:25:53
304


Однако здесь, почему-то, If-Modified-Since 31.01.2012 15:25:53.

Прибавился час. Загадка!

Очевидно, что это свойство Яндекса. Что-нибудь с летним/зимнем временем?

Хотелось бы в скрипте это корректно компенсировать, но как?

  Ответить  
 
 автор: cheops   (31.01.2012 в 15:11)   письмо автору
 
   для: Владимир55   (31.01.2012 в 14:38)
 

>Хотелось бы в скрипте это корректно компенсировать, но как?
Хм... вычтите час (3600) из $IfModifiedSince.

  Ответить  
 
 автор: Владимир55   (31.01.2012 в 15:16)   письмо автору
 
   для: cheops   (31.01.2012 в 15:11)
 

Просто вычесть?

Может, каким то образом учесть переход на летнее/зимнее время? Хотя сейчас такой переход отменен, но вдруг вновь введут?

  Ответить  
 
 автор: cheops   (31.01.2012 в 15:44)   письмо автору
 
   для: Владимир55   (31.01.2012 в 15:16)
 

Так нет сейчас летнего времени... если у вас время на сервере совпадает с тем, что на часах, то у вас все верно... а у робота судя по всему никто не озаботился переводом - его же не видно и никому это время не отображается, только любителям послушать, что роботы говорят...

PS На самом деле просто не все библиотеки успели обновиться, я вон сам по времени Баку живу :))) и никто не спешит с шашкой на голо лезть исправлять код в такой деликатной области, как время, все ждут, когда на нижнем уровне все библиотеки сами собой обновятся.
PPS Там фигня какая-то получилось... вместо того, чтобы просто прекратить перевод на летнее время, стало так, весь код разом стал неправильный... уж не знаю кто тут виноват, но все библиотеки почему-то используют перевод на зимнее время... поэтому с точки зрения компьютеров мы оказались в другой временной зоне... то ли мы в России время неправильно считаем, то ли компьютерщики... в общем пару лет эта вакханалия продлится.

  Ответить  
 
 автор: cheops   (31.01.2012 в 15:48)   письмо автору
 
   для: Владимир55   (31.01.2012 в 15:16)
 

Причем у Яндекса проблем нет - вы ему время в GMT отдаете, он может выяснить какое точно время вы имеете в виду в своей системе координат. Проблемы возникают у вас (да, из-за их настроек), так как вам робот сообщает локальное время...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования