|
|
|
| Доброго времени суток.
Имеется следующая проблема: при выводе информации не через исполняемый, а подключаемый файл она (информация) не выводится. Тобишь, если я делаю вывод заголовков в основном файле (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;
|
Важное дополнение: на локальном сервере все нормально работает.
При выкладке же на сайт появляется эта ошибка, от которой пока не нашел избавления... | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: heed
(13.11.2009 в 13:46)
| | я больше C-шник, так что такие комментарии поставил на автомате сюда.
На деле заместо этой строчки у меня фигурировала
print "Content-Type: text/html\r\n\r\n-";, дефис чтоб было видно, что и текст выводится.
Предложенный Вами вариант не сработал, по-прежнему выводя ту же ошибку.. | |
|
|
|
|
|
|
|
для: bronenos
(13.11.2009 в 14:02)
| | Я бы, процитировав диагностику, поинтересовался у техподдержки хостера, какие поля должны непременно входить в требуемое
"complete set of HTTP headers" | |
|
|
|
|
|
|
|
для: 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 тоже могут быть причиной | |
|
|
|
|
|
|
|
для: heed
(13.11.2009 в 14:46)
| | Как я указал в начале темы, есть работающий способ употребления этих строк, правда нужен другой, но есть и рабочий черновой вариант, а это значит, что хоть как-то, но выполняется, и путь правилен.
Права и пути посмотрю, хотя и сомневаюсь, что в них проблема.. | |
|
|
|
|
|
|
|
для: bronenos
(13.11.2009 в 16:16)
| | приведите полные начала обоих файлов, включая все use и момент вывода зголовков и нужной информации. | |
|
|
|
|
|
|
|
для: 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{} | |
|
|
|
|
|
|
|
для: ....
(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 | |
|
|
|
|
|
|
|
для: ....
(14.11.2009 в 11:05)
| | Я вижу только одну причину тому, что так получается. Файл не подключается через require.
Ибо если разместить строку ПОСЛЕ require, то не работает (напарывается, видимо, на ошибку, и дальше не идет), если в нем же - то та же причина - нет подключения, нет исполнения. Если ДО - то выводится заголовок. Остается понять, почему не подключается и как это провернуть.. | |
|
|
|