Форум "Web-мастер"
Технологии web-програмирования
Хочу отсылать правильный ответ на запрос с If-Modified-SinceНо есть проблема. Функция PHP getallheaders() на используемом хостинге не работает, поскольку PHP на хостинге не собран как модуль. Может это можно как-то обойти? Например, получать заголовок на perle, и инклудить этот файл в PHP? Только вот с Перлом я не знаком, не подскажете, как это реализовать? И как обмен данными между Перлом и PHP происходит?
|
|
> запрос с 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();
|
|
> Целью этой особенности является предоставление возможности > эффективного обновления информации локальных кэшей с минимумом > передаваемой информации хорошая возможность!!! Экономия исходящего/входящего трафика как в интересах сервера так и клиента... > Функция 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, то Вам сюда - |
|
Spasibo, posmotr'u. отправлено с мобилки |
|
Спасибо, хорошая статья. Будем внедрять. |
|
#10 McSimm © 25.04.06 11:55:22
Ну при чем тут Perl ? |
|
>#10 McSimm © При том, что скрипт на Perl-е работал с текущими настройками веб-сервера, а php-шный не хотел. Но теперь это уже не важно, подсказали другое решение. |
|
#12 McSimm © 25.04.06 12:30:51
не совсем понял. т.е. скрипт на Perl мог получить информацию об этом заголовке без дополнительных ухищрений ? |
|
> т.е. скрипт на Perl мог получить информацию об этом заголовке > без дополнительных ухищрений ? Да |
|
#14 McSimm © 25.04.06 13:24:45
может я что-то не очень хорошо знаю, но здравый смысл подсказывает, что нет никакой разницы на каком языке пишется CGI - перл, php или что угодно - окружение, в котором их запускает Apache не зависит от того, какой с помощью которой программы они выполняются. т.е. если скрипт на перл видит в своем окружении заголовок $ENV{'HTTP_IF_MODIFIED_SINCE'} (кажется так), то и любой другой скрипт по идее должен его видеть. В php в таком случае должен бы быть $_ENV['HTTP_IF_MODIFIED_SINCE'] может я и ошибаюсь, но склонен думать так. |
|
Я тоже не очень хорошо знаю. Но во всяком случае, есть разница собран ли 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 :) |
|
> Потому я и спросил, при чем тут перл и можно ли из перл > скрипта увидеть значение этого заголовка ну, собственно, perl-скрипт из уже приведённой выше ссылкки работал: а php-скрипт из#2 не работал. |
|
#19 McSimm © 25.04.06 15:34:23
php-скрипт из#2 может работать только при модульном исполнении PHP. Если приведенный perl-скрипт работает, и работает в режиме CGI, это означает, что apache таки уже устанавливает недокументированные заголовки в окружение и доступ к ним можно получать через $_ENV |
|
Нужно будет таки снова вернуться к этой задачке, и попробовать $_ENV. Ветка, как видишь, давняя, 07.02.05, уже и забыл :) |
|
#21 McSimm © 25.04.06 15:49:59
Если бы я на дату посмотрел, но вообще не сталы бы влазить :) |
|
проверил $_ENV, не проканало, а способ, описанный в статье работает. |
|
Прикрутил, надеюсь, уменьшит трафик, и возможно, немного нагрузку на сервер. |
Написать ответ |
|
