Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Perl. Complete set of HTTP headers.
 
 автор: bronenos   (13.11.2009 в 11:55)   письмо автору
 
 

Доброго времени суток.
Имеется следующая проблема: при выводе информации не через исполняемый, а подключаемый файл она (информация) не выводится. Тобишь, если я делаю вывод заголовков в основном файле (main.pl, с #!/usr/bin/perl), то они выводятся, если же в подключаемом (included.pl) в основной, то они словно бы пропускаются, и в итоге я наблюдаю "The specified CGI application misbehaved by not returning a complete set of HTTP headers.". Пропускаются даже если поставить их первой строкой. Иными словами:

------ Работает
** main. pl **
#!/usr/bin/perl
// print headers
require "included.pl";

** included.pl **
use lib "./lib";
use ..
use ..

1;


------ Не работает
** main. pl **
#!/usr/bin/perl
require "included.pl";
// print headers

** included.pl **
use lib "./lib";
use ..
use ..

1;


------ Не работает
** main. pl **
#!/usr/bin/perl
require "included.pl";

** included.pl **
// print headers
use lib "./lib";
use ..
use ..

1;


Важное дополнение: на локальном сервере все нормально работает.
При выкладке же на сайт появляется эта ошибка, от которой пока не нашел избавления...

  Ответить  
 
 автор: heed   (13.11.2009 в 13:46)   письмо автору
 
   для: bronenos   (13.11.2009 в 11:55)
 

>// print headers
таких комментариев не бывает в perl :)
, а так похоже что просто не выводятся строки заголовка из того включаемого файла
я-бы попробовал сделать в этой-же дирректории например такой скрипт вызывающий тот что из-за ошибки не работает
#!C:/Perl/bin/perl -w
print "content-type: text/plain\n\n";
require "main.pl";
и посмотрите покажется-ли на странице заголовок типа "content-type: text/html\n\n"
, если всё сработает но заголовок не покажется возможно дело в области видимости
, локальные переменные бывает не видно в скриптах включаемых при помощи require

  Ответить  
 
 автор: bronenos   (13.11.2009 в 14:02)   письмо автору
 
   для: heed   (13.11.2009 в 13:46)
 

я больше C-шник, так что такие комментарии поставил на автомате сюда.
На деле заместо этой строчки у меня фигурировала
print "Content-Type: text/html\r\n\r\n-";, дефис чтоб было видно, что и текст выводится.

Предложенный Вами вариант не сработал, по-прежнему выводя ту же ошибку..

  Ответить  
 
 автор: Trianon   (13.11.2009 в 14:26)   письмо автору
 
   для: bronenos   (13.11.2009 в 14:02)
 

Я бы, процитировав диагностику, поинтересовался у техподдержки хостера, какие поля должны непременно входить в требуемое
"complete set of HTTP headers"

  Ответить  
 
 автор: heed   (13.11.2009 в 14:46)   письмо автору
 
   для: bronenos   (13.11.2009 в 14:02)
 

странно, может-быть жалуется на заголовок не потому что не выводится заголовок
, а потому что выдаёт ошибку связанную с чем-то
#!/usr/bin/perl -w
print "content-type: text/plain\n\n";
for $tmp ( @INC) {print $tmp . "\n";}
из-за #!/usr/bin/perl так-же может выдавать ошибку если путь не соответствует
, а среди каталогов @INC , в которых ищется имя файла включаемого require, всегда должно быть '.'
, но даже если там нет '.' , думаю это должна быть ошибка после печати заголовка.
Хоть какой-нибудь perl-скрипт работает в этой-же дирректории?
//upd
возможно разрешения chmod тоже могут быть причиной

  Ответить  
 
 автор: bronenos   (13.11.2009 в 16:16)   письмо автору
 
   для: heed   (13.11.2009 в 14:46)
 

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

  Ответить  
 
 автор: GeorgeIV   (13.11.2009 в 16:26)   письмо автору
 
   для: bronenos   (13.11.2009 в 16:16)
 

приведите полные начала обоих файлов, включая все use и момент вывода зголовков и нужной информации.

  Ответить  
 
 автор: bronenos   (13.11.2009 в 16:48)   письмо автору
 
   для: GeorgeIV   (13.11.2009 в 16:26)
 

Момент вывода заголовков у меня находится в END, переопределенного через tie
Класс этот подключается как файл

Если же брать испытуемое сейчас, то:
main.pl
#!/usr/bin/perl -w
require "./need.pl";

$PAGE{page} = "main.tpl";
$tpl->process("index.tpl", \%PAGE) or die "Ошибка шаблона: ".$tpl->error();


need.pl
print "Content-Type: text/html\r\n\r\n-";
use CGI::Carp "fatalsToBrowser";
use Digest::MD5 "md5_hex";
use lib "lib";
use Encode;
use Need;
use SQLite;
use Internet;
use Text;
use Template;

$DB = new SQLite("gymdb.sqlite");

$tpl = new Template({
    INCLUDE_PATH => (defined $ADMIN ? "admin/templates/" : "templates/"),
    START_TAG => quotemeta("{:"),
    END_TAG => quotemeta(":}")
});

1;


Это тот, что не работает сейчас в том числе.

  Ответить  
 
 автор: ....   (14.11.2009 в 10:21)
 
   для: bronenos   (13.11.2009 в 16:48)
 

не смог смоделировать ситуацию.
ещё только такая мысль , попробовать это print "Content-Type: text/html\r\n\r\n-";
написать как содержимое блока BEGIN{}

  Ответить  
 
 автор: bronenos   (14.11.2009 в 10:50)   письмо автору
 
   для: ....   (14.11.2009 в 10:21)
 

Да проблема, по ходу, не в том, чтоб это написать, а в том, чтоб заставить работать подключаемые файлы.. попробую пошаманить..

  Ответить  
 
 автор: ....   (14.11.2009 в 11:05)
 
   для: bronenos   (14.11.2009 в 10:50)
 

одно другому не мешает :)
неплохо было.бы просто всётаки видеть в браузере где обрывается выполнение.
a эти use Mod , они как пишут , эквивалентны
BEGIN { require Mod; import Mod;}
следовательно выполняются раньше любых print

  Ответить  
 
 автор: bronenos   (14.11.2009 в 15:51)   письмо автору
 
   для: ....   (14.11.2009 в 11:05)
 

Я вижу только одну причину тому, что так получается. Файл не подключается через require.
Ибо если разместить строку ПОСЛЕ require, то не работает (напарывается, видимо, на ошибку, и дальше не идет), если в нем же - то та же причина - нет подключения, нет исполнения. Если ДО - то выводится заголовок. Остается понять, почему не подключается и как это провернуть..

  Ответить  
Rambler's Top100
вверх

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