Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Web-мастер"


Технологии web-програмирования


 #0 Victor T © 07.02.05 15:55:56 - 20.05.06 14:07:00

Хочу отсылать правильный ответ на запрос с If-Modified-Since



Но есть проблема. Функция PHP getallheaders() на используемом хостинге не работает, поскольку PHP на хостинге не собран как модуль.
Может это можно как-то обойти? Например, получать заголовок на perle, и инклудить этот файл в PHP?
Только вот с Перлом я не знаком, не подскажете, как это реализовать? И как обмен данными между Перлом и PHP происходит? Цитата

 #1 Deep © 07.02.05 16:14:02

> запрос с If-Modified-Since
эх... чайник, я чайник...  Ты бы сначала еще рассказал для чего это нужно...
 #2 Victor T © 07.02.05 16:21:55

Об заголовке:

Поле заголовка If-Modified-Since используется с методом GET для того, чтобы сделать его условным: если запрашиваемый ресурс не изменялся со времени, указанного в этом поле, копия этого ресурса не будет возвращена сервером; вместо этого, будет возвращен ответ "304 Not Modified", несодержащий Тела- Ответа.

If-Modified-Since = "If-Modified-Since" ":" HTTP-дата

Пример использования заголовка:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

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

Вариант реализации на PHP (который не работает на исполюзуемом хостинге):

$headers = getallheaders();
$lastmodified=gmdate('D, d M Y H:i:s',filemtime("test.php"))­.' GMT'; // конечно, несовсем корректно, но пока так :-)
if ($headers['If-Modified-Since']==$lastmo­dified) {
  header('HTTP/1.0 304 Not Modified');
  exit(); // выход, не выводим содержимое страницы
}
else{
  header('HTTP/1.0 200 OK');
  header("Last-Modified: $lastmodified");
}
echo $content; // вывод содержимого страницы
 #3 Deep © 07.02.05 16:34:17

> Целью этой особенности является предоставление возможности
> эффективного обновления информации локальных кэшей с минимумом
> передаваемой информации

хорошая возможность!!! Экономия исходящего/входящего трафика как в интересах сервера так и клиента...  

> Функция PHP getallheaders() на используемом хостинге не
> работает

так-с... а от чего она зависит? может стоит поговрить на эту тему с хостерами?
 #4 Victor T © 07.02.05 16:37:49

> а от чего она зависит?
Как уже написал выше:
> поскольку PHP на хостинге не собран как модуль.

> может стоит поговрить на эту тему с хостерами?
Насколько я понял, они на это не пойдут. Вот, что они написали:
А у нас PHP работает как скрипт, поскольку при работе PHP как модуля запуск скриптов происходит при помощи юзера nobody и любой пользователь хостинга может при помощи простейшего скрипта смотреть, редактировать и удалять все файлы другого пользователя.
 #5 Victor T © 07.02.05 17:40:22




Теперь вопрос в том, как передать параметр из Perl-а в PHP...
 #6 Victor T © 08.02.05 12:02:06

> Экономия исходящего/входящего трафика как в интересах сервера
> так и клиента...

А так-же и поисковых роботов - и как следствие - ускоренная индексация (типа up)
 #7 nickspring 22.04.06 12:47:12

если PHP не установлен как модуль Apache, то Вам сюда -
 #8 VictorT © 22.04.06 13:53:17

Spasibo, posmotr'u.

отправлено с мобилки
 #9 VictorT © 25.04.06 10:48:39

Спасибо, хорошая статья. Будем внедрять.
 #10 McSimm © 25.04.06 11:55:22

Ну при чем тут Perl ?
 #11 VictorT © 25.04.06 12:23:45

>#10 McSimm ©
При том, что скрипт на Perl-е работал с текущими настройками веб-сервера, а php-шный не хотел.
Но теперь это уже не важно, подсказали другое решение.
 #12 McSimm © 25.04.06 12:30:51

не совсем понял.
т.е. скрипт на Perl мог получить информацию об этом заголовке без дополнительных ухищрений ?
 #13 VictorT © 25.04.06 12:43:32

> т.е. скрипт на Perl мог получить информацию об этом заголовке
> без дополнительных ухищрений ?
Да
 #14 McSimm © 25.04.06 13:24:45

может я что-то не очень хорошо знаю, но здравый смысл подсказывает, что нет никакой разницы на каком языке пишется CGI - перл, php или что угодно - окружение, в котором их запускает Apache не зависит от того, какой с помощью которой программы они выполняются.
т.е. если скрипт на перл видит в своем окружении заголовок $ENV{'HTTP_IF_MODIFIED_SINCE'} (кажется так), то и любой другой скрипт по идее должен его видеть. В php в таком случае должен бы быть $_ENV['HTTP_IF_MODIFIED_SINCE']

может я и ошибаюсь, но склонен думать так.
 #15 VictorT © 25.04.06 14:18:04

Я тоже не очень хорошо знаю. Но во всяком случае, есть разница собран ли PHP как модуль, или нет. И то, как собран PHP, Perl-у, как я понимаю, пофиг.
 #16 McSimm © 25.04.06 15:16:10

Да, конечно. Как используется PHP разница есть. И если PHP используется как CGI, то доступа к нужным заголовкам он обычно не имеет. Тогда можно попросить апач, как описано в статье выше

Просто ты меня не совсем понял. Дело в том, что Апачу абсолютно все равно какой CGI скрипт выполнять - Perl или PHP, он даже и не знает какой будет выполняться. И проблемы доступа к недокументированным заголовкам (протокол CGI 1/1) для них совершенно одинаковые. Потому я и спросил, при чем тут перл и можно ли из перл скрипта увидеть значение этого заголовка
 #17 McSimm © 25.04.06 15:21:04

Если только предположить, что Perl используется как модуль (mod_perl), тогда разница есть, но с учетом "грамотности" хостера, не способного разрулить клиентов по правам доступа, я этого не предполагаю, иначе какой смысл иметь mod_perl, но отказываться от mod_php
:)
 #18 VictorT © 25.04.06 15:28:29

> Потому я и спросил, при чем тут перл и можно ли из перл
> скрипта увидеть значение этого заголовка

ну, собственно, perl-скрипт из уже приведённой выше ссылкки работал:

а php-скрипт из#2 не работал.
 #19 McSimm © 25.04.06 15:34:23

php-скрипт из#2 может работать только при модульном исполнении PHP.
Если приведенный perl-скрипт работает, и работает в режиме CGI, это означает, что apache таки уже устанавливает недокументированные заголовки в окружение и доступ к ним можно получать через $_ENV
 #20 VictorT © 25.04.06 15:44:58

Нужно будет таки снова вернуться к этой задачке, и попробовать $_ENV. Ветка, как видишь, давняя, 07.02.05, уже и забыл :)
 #21 McSimm © 25.04.06 15:49:59

Если бы я на дату посмотрел, но вообще не сталы бы влазить :)
 #22 VictorT © 20.05.06 12:54:29

проверил $_ENV, не проканало, а способ, описанный в статье работает.
 #23 VictorT © 20.05.06 14:07:00

Прикрутил, надеюсь, уменьшит трафик, и возможно, немного нагрузку на сервер.




  • Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов