/ домой \ | \ темы / |
20/09/2007 13:50 iZzz32: |
Объясните, пожалуйста, поведение PATH_INFO: 127.0.0.1/cgi-bin/foo.pl/bar — PATH_INFO=/bar 127.0.0.1/cgi-bin/foo.pl/bar?baz=1 — PATH_INFO=/bar, QUERY_STRING = baz=1 но 127.0.0.1/cgi-bin/foo.pl/bar/ — PATH_INFO=/bar/foo.pl 127.0.0.1/cgi-bin/foo.pl/bar/?baz=1 — PATH_INFO=/bar/foo.pl, QUERY_STRING = oo.pl И возможно ли избавиться от расширения в имени скрипта? Чтобы было просто "/cgi-bin/foo". Ведь я же прописываю shebang в первой строке скрипта (#!где-то/что-то -с -параметрами), почему бы это не использовать, если расширения у скрипта нет (сейчас ругается, мол, error running foo with ""). |
26/09/2007 09:55 iZzz32: |
Max, вы бы хоть сказали, что прочитали это...
|
26/09/2007 12:55 Max: |
PATH_INFO -- это "extra path information" экстра -- понятие растяжимое... Используйте SCRIPT_NAME для имени скрипта SCRIPT_FILENAME для полного имени файла PATH_TRANSLATED для пути после имени файла В случае отсутствия имени фала дефолтовому файлу QUERY_STRING не передается. В Юниксах от расширения избавится можно, это поддержано на уровне систем или сшела. В Windows вы никак от него не избавитесь, сервер должен знать что и как запускать. |
26/09/2007 13:19 iZzz32: |
Спасибо за ответ. Расширение: почему бы не сделать так: сервер видит файл без расширения с «идентификатором cgi» и НЕ знает, чем его запускать. Читает первую строку, если она начинается #!, запускает, чем написано, иначе ругается, как раньше, что не может запустить. А в «CGI-интерпретаторах» в настройках галочку «Использовать shebang, если интерпретатор неизвестен». Поддержка на уровне шелла тут ни при чём — запускает-то сервер! PATH_INFO: так поддерживается ведь почти (очень был рад это узнать!). Если бы ещё имя скрипта (в примере с /bar/) не передавалось, было бы совсем здорово! PATH_TRANSLATED: не понял, при вызовах, как в первом сообщении, она у меня содержит точно то же самое, что и SCRIPT_FILENAME. Теперь насчёт «QUERY_STRING не передается», «URL без имени файла с запросом не корректна», и «нет имени — нет запроса, это соответствует RFC». RFC 2068 (3.2.1 General Syntax): abs_path = "/" rel_path rel_path = [ path ] [ ";" params ] [ "?" query ] path = fsegment *( "/" segment ) fsegment = 1*pchar segment = *pchar params = param *( ";" param ) param = *( pchar | "/" ) Пример "/?foo=bar": компонент path необязательный, параметры не обязательны, запрос. Пример "/foo/?bar=baz": один fsegment в path, потом слэш, потом segment, который может состоять в том числе и из 0 pchar-ов, параметров нет, запрос. В чём моя ошибка? Неужели так сложно пофиксить? Из-за этого кат в WordPress не работает, например, и очень многие другие скрипты тоже. |
26/09/2007 18:53 AnrDaemon: |
> В случае отсутствия имени фала дефолтовому файлу QUERY_STRING > не передается А можно узнать, почему? Ваш сервер первый на моей практике, кто это проделывает. 2 iZzz32: Поставьте Апач, не мучайтесь. Не хочу ругать автора на его же форуме, но smallsrv a использую только ради DNS/DHCP сервера. (Причем DHCP работает только наполовину - адреса выдает, шлюзы и DNS нет) Найду замену хотя бы DNS - убью SmallSrv не задумываясь. |
26/09/2007 21:44 iZzz32: |
AnrDaemon, Apache у меня тоже установлен, но Small HTTP Server ближе к [моему] идеалу маленького сервера для маленьких сайтов под Windows.
|
26/09/2007 23:00 AnrDaemon: |
Когда у вас этих маленьких сайтов будет хотя бы десяток, да не только ваших - вам поневоле придется искать что-то более гибкое в настройке.
|
28/09/2007 10:36 iZzz32: |
Cпецификация CGI/1.1: cgi-spec.golux.com/draft-coar-cgi-v11-00.txt Спецификация CGI/1.2: cgi-spec.golux.com/cgi-120-00a.html Обе спецификации весьма старинные, я на 1.1 буду ссылаться. 4.14. SCRIPT_NAME: «A URL path that could identify the CGI script» (см. мой вопрос про SCRIPT_NAME и виртуальные каталоги: www.smallsrv.com/forum/f.cgi?f=10417&a=1) 4.6. PATH_INFO: «A path to be interpreted by the CGI script. It identifies the source or sub-resource to be returned by the CGI script». Именно то, что мне требуется. Никакого имени скрипта туда подставлять не нужно. 9. Requirements for Servers: «Given this, any access to the partial URL "SCRIPT_NAME extra-path ? query-information" where extra-path is either NULL or begins with a "/" and satisfies any other server requirements, will cause the CGI script to be executed with PATH_INFO set to the decoded extra-path, and QUERY_STRING set to query-information (not decoded)». «extra-path» — это тот самый sub-resource, ничего растяжимого не вижу, понятие вполне определённое. AnrDaemon, вряд ли такое случится, но если случится, это будет уже другая проблема, и решать я её буду по-другому — выделю под сайты компьютер с никсами и апачем. А пока у меня только полтора сайта, блог и вики, существующих настроек мне вполне хватает. |
07/10/2007 13:08 iZzz32: |
Max, ну хоть скажите, что ничего фиксить не будете!
|
07/10/2007 13:58 Max: |
Смотрите версию 3.05.74 там кое-что пофиксено. Кстати когда после имени скрипта был /path/ этот /path/ и раньше клался в PATH_INFO |
07/10/2007 20:18 iZzz32: |
Small HTTP Server ver. 3.05.74test5 PATH_INFO: Виртуальный хост xyzzy указывает на Y:\Projects\xyzzy\cgi, в нём cgi-bin, в нём foo.pl, выводящий переменные окружения. xyzzy/cgi-bin/foo.pl/bar?baz (OK) SCRIPT_NAME = /cgi-bin/foo.pl (OK) PATH_INFO = /bar (OK) QUERY_STRING = baz xyzzy/cgi-bin/foo.pl/bar/?baz (OK) SCRIPT_NAME = /cgi-bin/foo.pl (__) PATH_INFO = /bar/foo.pl — откуда тут foo.pl?! (OK) QUERY_STRING = baz SCRIPT_NAME: Виртуальный каталог /plugh/ указывает на Y:\Projects\fwiki\cgi\cgi-bin, в нём foo.pl, выводящий переменные окружения. 127.0.0.1/plugh/foo.pl (__) SCRIPT_NAME = /foo.pl — должно быть /plugh/foo.pl QUERY_STRING: работает! огромное вам спасибо! |
09/10/2007 02:37 Max: |
У вас видимо файл по умолчанию задан foo.pl ? |
09/10/2007 06:49 iZzz32: |
Нет, по умолчанию index.*
|
09/10/2007 09:18 iZzz32: |
PATH_INFO: то есть, если URL вроде somewhere/cgi-bin/script.pl/path/ заканчивается слешем, в конец PATH_INFO добавляется имя скрипта (а файл по умолчанию тут ни при чём). И ещё такое поведение: cлучайно попал скрипт test.pl в корень сайта (без cgi-идентификаторов в пути, атрибут SYSTEM тоже не стоит). Прошу 127.0.0.1/test.pl — отдаёт содержимое test.pl, прошу 127.0.0.1/test.pl/foo — ТОЖЕ отдаёт содержимое test.pl. Мне это не мешает, но всё же во втором случае правильнее, наверное, 404 возвращать? SCIPT_NAME: если скрипт в виртуальном каталоге, в SCRIPT_NAME кладётся путь относительно виртуального каталога, а не корня сайта. |
10/10/2007 00:32 Max: |
Ну с test.pl то все правильно, -- раз он не исполняемый значит отдается. смотрите обновленную модификацию версии 3.05.74 |
10/10/2007 09:00 iZzz32: |
Small HTTP Server ver. 3.05.74 > Ну с test.pl то все правильно, -- раз он не исполняемый значит отдается. Раз не исполняемый, значит обычный. Почему же 127.0.0.1/index.html/x "400" генерирует, а 127.0.0.1/test.pl/x "200 Ok"? SCRIPT_NAME, PATH_INFO: подтверждаю. |