2008-12-02 2 views
1

Я пытаюсь получить заголовок, который будет работать с Apache, IIS 6 и IIS 7. Я не буду вникать в причину этого. Давайте просто скажем, что это не так просто, как я думал, что это будет :-)Как я могу получить заголовок, который будет работать с IIS 6, 7 и Apache?

В любом случае проблема имеет какое-то отношение к NPH. В нашем коде (изначально написанном для IIS 6) мы имеем

use CGI qw(:standard); 

print "HTTP/1.0 200 OK\n"; 

print header; 

в верхней части каждого скрипта cgi; Я читал, что так вы сообщаете IIS, что вы хотите NPH.

Apache использует имя файла, чтобы увидеть, если выход НПХ (nph- должно быть начало файла), так что я сделал (который работает в обоих IIS 6 и Apache) заключается в следующем:

use CGI qw(:standard); 
print header('text/html', '200 OK'); 

IIS 7, интересно, кажется, требуют НПХ, так что если я не либо делать

use CGI qw(:standard -nph); 

или

print "HTTP/1.0 200 OK\n"; 

print header('text/html', '200 OK'); #parameters are apparently optional 

браузер пытается сделать что-то странное с файлом, так как он не получает mimetype.

Также обратите внимание: IIS 6 и 7 одобрены без печати любого заголовка, но Apache это не нравится.

Во всяком случае, лучше всего сейчас было бы сделать

use CGI qw(:standard); 
print header('text/html', '200 OK'); 

как-то работать в IIS 7. Кто-нибудь знает, как я могу это сделать? Я не знаю всех деталей нашей конфигурации сервера, но если вы сообщите мне, как получить какие-либо подробности, которые могут вам понадобиться, я могу это сделать.

Спасибо в любом случае!

ответ

0

Брайана (и другие) сказала мне написать подпрограмму, которая будет делать правильные вещи. Надеюсь, это поможет кому-то еще!

sub header { 
    return (($ENV{PERLXS})?"HTTP/1.0 200 OK\r\n":"").CGI->header(@_); 
} 
1

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

Другой вариант - исправить CGI.pm, чтобы правильно установить переменную $ CGI :: NPH, посмотрев тип сервера. CGI.pm уже имеет основы. Как только вы это исправите, отправьте патч.

Удачи :)

Смежные вопросы