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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Гипотеза относительно серверной переменной 'HTTP_IF_MODIFIED_SINCE'

Сообщения:  [1-10]   [11-20] 

 
 автор: cheops   (04.02.2013 в 22:20)   письмо автору
 
   для: Izcian   (03.02.2013 в 22:49)
 

Ну Rewrite, да, приводит к замедлению скорости обработки... У вас виртуальный хостинг, выделенный сервер?

PS Под новые вопросы лучше все-таки заводить новые темы.

  Ответить  
 
 автор: Izcian   (03.02.2013 в 22:49)   письмо автору
 
   для: cheops   (30.01.2012 в 15:29)
 

Просто здорово что наткнулся на Ваш диалог, спасибо за разъяснения. Но вот какое дело, после того как я запустил все это хозяйство с этими заголовками, время загрузки страниц очень серьезно увеличилось. Особенно CSS - файлов. Что делать, ума не приложу

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

<?php
   
//Ссодержимое массива $_SERVER
Array
(
    [
HTTP_HOST] => домен 
    
[HTTP_X_FORWARDED_FOR] => IP адрес
    
[HTTP_X_SCHEME] => http
    
[HTTP_CONNECTION] => close
    
[HTTP_IF_MODIFIED_SINCE] => Sat29 Oct 1994 19:43:31 GMT
    
[PATH] => /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
    
[SERVER_SIGNATURE] => <address>Apache/2 домен Port 80</address>

    [
SERVER_SOFTWARE] => Apache/2
    
[SERVER_NAME] => домен
    
[SERVER_ADDR] => 127.0.0.1
    
[SERVER_PORT] => 80
    
[REMOTE_ADDR] => IP адрес 
    
[DOCUMENT_ROOT] => /home/имя_пользователя/domains/домен.ru/public_html
    
[SERVER_ADMIN] => support@хххх.ru
    
[SCRIPT_FILENAME] => /home/имя_пользователя/domains/домен.ru/public_html/имя_скрипта.php
    
[REMOTE_PORT] => 50327
    
[GATEWAY_INTERFACE] => CGI/1.1
    
[SERVER_PROTOCOL] => HTTP/1.0
    
[REQUEST_METHOD] => GET
    
[QUERY_STRING] => 
    [
REQUEST_URI] => /имя_скрипта.php
    
[SCRIPT_NAME] => /имя_скрипта.php
    
[PHP_SELF] => /имя_скрипта.php
    
[REQUEST_TIME] => 1327932673
)


Зато теперь ясно, как создать любую переменную окружения, какая понадобится!

  Ответить  
 
 автор: cheops   (31.01.2012 в 11:50)   письмо автору
 
   для: Sfinks   (30.01.2012 в 20:10)
 

Да, перепрятушки, есть в исходных кодах PHP такая переменная окружения, наряду с HTTP_COOKIE2 и HTTP_VIA :))) На Apache ориентировался, поленился в исходный код залезть.

  Ответить  
 
 автор: Sfinks   (31.01.2012 в 09:12)   письмо автору
 
   для: Владимир55   (31.01.2012 в 00:52)
 

Просто не понятно, как "прочитав и изучив" можно прийти к умозаключению:
> 2. $_SERVER['HTTP_IF_MODIFIED_SINCE'] будет всегда пустой, поскольку.....

Чтоб понятней было, опишу как выловить на том же примере, но с цитатами:
Запрос:
http://site.info/154/5059/thumb.css

Редирект в .htaccess:
RewriteEngine On
RewriteRule ^(\d+)/(\d+)/thumb\.css$ thumb.css.php?c=$1&g=$2 [L]

Фрагмент кода отвечающий за кеширование:
<?
  header
("Content-type: text/css");
  
header("Last-Modified: ".date("r",$last_mod_stamp));
  
header("Cache-Control: private, max-age=2592000, pre-check=605000");
Здесь $last_mod_stamp определяется в коде ранее, по дате модификации файла на который ссылается результирующий CSS. Вообще самая большая проблема с реализацией ответа 304 у вас будет заключаться именно в определении этой переменно. Мне, например, т.к. файл, дату модификации которого нужно узнать, находится удаленно, чтоб не дергать HTTP при каждом обращении, пришлось создать новую таблицу в БД и поменять много где еще код, чтоб информация в этой таблице была актуальна. И вообще для каждого блока сайта алгоритм определения этой переменной будет сложным и индивидуальным.

Далее, когда страница кеширована браузером и вы нажимаете "обновить" (ну или яндекс перезагружает уже загруженную ранее страницу), отправляется этот неуловимый заголовок. И вот фрагмент кода, отвечающий за отслеживание этого заголовка:
<?
  
if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]))
    if(
$since_stamp strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]))
      if(
$since_stamp >= $last_mod_stamp){
        
header("HTTP/1.1 304 Not Modified");
        exit;
      }
Располагается он между определением переменной $last_mod_stamp и выводом заголовков кеширования.
______
P.S. Если вы тестируете в Опере, то ниче не сработает. Опера никогда не отправляет этот заголовок.

  Ответить  
 
 автор: Владимир55   (31.01.2012 в 00:52)   письмо автору
 
   для: Sfinks   (30.01.2012 в 20:03)
 

Я в игноре или мое описание в теме http://softtime.ru/forum/read.php?id_forum=5&id_theme=84713&page=1 не заметно?

Ваше описание и замечено, и изучено, и использовано.

Сорри, что не написал благодарности сразу - для осмысления требуется время!

Спасибо Вам за совет и помощь!

  Ответить  
 
 автор: Sfinks   (30.01.2012 в 20:10)   письмо автору
 
   для: cheops   (30.01.2012 в 12:51)
 

> Переменной окружения HTTP_IF_MODIFIED_SINCE нет
ЕСТЬ!

> и по умолчанию она не создается - эту переменную вы ввели сами
Создается, если сервер передает этот заголовок.

> Еще раз хочу подчеркнуть, нет стандартной переменной окружения HTTP_IF_MODIFIED_SINCE
Еще раз хочу подчеркнуть, ОНА ЕСТЬ в массиве $_SERVER.

  Ответить  
 
 автор: Sfinks   (30.01.2012 в 20:03)   письмо автору
 
   для: Владимир55   (30.01.2012 в 12:36)
 

Я чет не понял!
Я в игноре или мое описание в теме http://softtime.ru/forum/read.php?id_forum=5&id_theme=84713&page=1 не заметно?
Все что там написано было обнаружено на локале, но сейчас я проверил на хостинге и все актуально и для хостинга. Вот заголовки в подтверждение:
GET /477/23188/thumb.css HTTP/1.1
Host: site.info
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.24) Gecko/20111103 Firefox/3.6.24
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,text/vnd.wap.wml;q=0.6
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
If-Modified-Since: Sun, 15 Jan 2012 23:48:14 +0000
Cache-Control: max-age=0

HTTP/1.1 304 Not Modified
Date: Mon, 30 Jan 2012 16:00:45 GMT
Server: Apache/2
Connection: Keep-Alive
Keep-Alive: timeout=1, max=100
Vary: Accept-Encoding,User-Agent
_________
P.S. Cheops, сделайте в форуме тег [выделить красным жирным крупным шрифтом] =((( Все так подробно расписал и как и не писал все равно!

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

СПАСИБО!

  Ответить  
 
 автор: cheops   (30.01.2012 в 16:33)   письмо автору
 
   для: Владимир55   (30.01.2012 в 16:31)
 

Можно и так, особенно, если после этого правила больше не будет никаких других правил.

  Ответить  

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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