| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > учу по кн А.Ломова - проблема с выводом результата |
| Автор: Жэк 16.10.2011, 23:44 |
| Здравствуйте. Начал заниматься по книге А.Ломова Практика создания динамических сайтов. Дошёл до сакральной программки по выводу священного текста "Hello World". скрипт такой: #!C:/apache2/bin/perl/bin/perl print "Content-Type: text/plane\n\n"; print "Privet"; exit(0); сам екзешник perl находится у меня в папке C:/apache2/bin/perl/bin/ Собственно проблема: при вводе в адресную строку браузера http://127.0.01/cgi-bin/privet.pl браузер лихо предлагает мне сохранить файл с именем privet.pl. Причём после сохранения оного и просмотра сохранённого файлика в текстовом редакторе там оказывается запись "Privet" (без кавычек), то есть, скрипт выполняется, его результатом есть ожидаемый текст, но он почему-то не возвращается браузеру в виде хтмл-файла, а посылается ему на загрузку. Что мне делать?)) Дайте, пожалуйста, подробный ответ, понятный для начинающего. |
| Автор: Жэк 17.10.2011, 00:08 |
| заменил text/plain на text/html --- сделало, как надо. Объясните тонкости, почему так. |
| Автор: DurRandir 17.10.2011, 00:13 |
| hint: plane != plain |
| Автор: Жэк 17.10.2011, 00:29 |
| благодарю. |
| Автор: Жэк 23.10.2011, 17:15 |
| В продолжение темы. Столкнулся со следующей проблемой: разбираю работу двух простейших скриптов: 1) счётик посещений страницы и 2) лента комментариев посетителей. При этом в процесе работы создаются текстовые служебные файлы для хранений числа посещений и для хранения комментариев соответственно (txt и dat файлы). На локальном сервере (на домашнем компьютере) всё работает, как надо - служебные файлы, если не существовали, то создаются, счётчик считает, комментарии записываются и сохраняются. При переносе на живой хостинг 1) в случае хостинга ошибки не возникает, НО счётчик остаётся на начальном значнии и служебный файл с ислом посещений не создаётся. 2) в случае ленты комментариев выскакивает ошибка 500, служебный dat-файл также не создаётся, при этом в логах ошибок значится [Sun Oct 23 12:40:58 2011] [error] [client 217.27.130.58] File does not exist: /home/mebelwod/www/site11/public_html/favicon.ico и [Sun Oct 23 18:04:05 2011] [error] Can't locate _stdlib.pl in @INC (@INC contains: /usr/local/share/twiki/TWikiUserMappingContrib/lib/ /usr/local/share/twiki/core/lib /usr/local/lib/perl5/5.10.1/BSDPAN /usr/local/lib/perl5/site_perl/5.10.1/mach /usr/local/lib/perl5/site_perl/5.10.1 /usr/local/lib/perl5/5.10.1/mach /usr/local/lib/perl5/5.10.1 . /usr/local/apache2) at /home/mebelwod/www/site11/cgi-bin/comments.pl line 9.\n При этом _stdlib.pl это файл с подпрограммами, которые подключаются в основном файле comments.pl. путь к интрепретатору perl прописывается у меня только в основном файле. Ниже приведён код скрипта счётчика: #!C:/apache2/bin/perl/bin/perl print "content-type: text/plain\n\n"; $count = 0; $filename = 'data.txt'; if(-e $filename) { open(DATA, $filename); $count = <DATA>; close(DATA); } $count++; print "$count"; open(DATA, ">$filename"); flock(DATA, LOCK_EX); print DATA $count; flock(DATA, LOCK_UN); close(DATA); exit(0); (путь к perl тут приведён для локальной машины, на веб-сервере он изменён согласно инструкциям хостинга) |
| Автор: Жэк 24.10.2011, 14:18 |
| ошибка с отсутствием favicon.ico понятна - нет у меня там в папке иконки сайта, эта ошибка с работой скрипта не связана и идёт лесом. по поводу второй ошибки can't locate - в осноной файл comments.pl с помощью директивы require подключается файл _stdlib.pl, содержащий подпрограммы, используемые в процессе обработки данных формы. Если убрать require и вставить в скрипт полностью текст файла подрограмм _stdlib.pl, то ошибка 500 не возникает, НО, так же, как и в случае со счётчиком, не создаётся служебный текстовый файл с записями комментариев. В связи с этим уточнение вопроса: почему, кроме того, что не создаются служебные текстовые файлы в обоих скриптах (счётчик посещений и лента комментариев), кроме того не удаётся использовать require для подключения перловского файла с подпрограммами? (напоминаю, что на локально установленном апачи всё работает). |
| Автор: ginnie 24.10.2011, 14:57 | ||
Жэк, почему не создаются файлы можно узнать, добавив обработку ошибок функции open():
Где у Вас расположен _stdlib.pl? Интерпретатор написал все пути, где он его ищет и не находит. |
| Автор: Жэк 24.10.2011, 15:20 | ||||
| _stdlib.pl лежит в той же папке, что и comments.pl (/cgi-bin) Если в коде
просто добавить строку open() or die "Can't open file: $!"; то появляется ошибка "недостаточно аргументов" ([error] Not enough arguments for open at /home/mebelwod/www/site11/cgi-bin/counter.pl line 5, near "open() "\n) ,так что скорее всего это я неверно делаю, тогда я в функции open(); дописываю часть or die "Can't open file: $! В результате эта часть кода выглядит так:
Тогда в логах ошибок ничего нового не пишется, скрипт как бы работает, но счётчик висит на начальном значении его накопления не происходит. Повторюсь, что на локальном сервере всё работает. Это, собственно, жЫвой хостинг: http://11.mebelwod.z8.ru/cgi-bin/counter.pl |
| Автор: ginnie 24.10.2011, 16:50 |
| Жэк, а Вы во всех open'ах добавили обработку ошибок или только в первом? P.S. На локальном сервере все работает, т.к. там у Вас Windows и с правами таких проблем не возникает, как в Unix-системе на хостинге. |
| Автор: Жэк 24.10.2011, 20:32 |
| ок, добавил во всех open - ах. Ну, сгенерировался вдобавок к числу 1 (стартовое значение счетчика) код хтмл-странички, главным смыслом которой является ошибка 500. Про права доступа понятно, непонятно, как разрешить. |
| Автор: Жэк 27.10.2011, 16:21 | ||
| Хорошо. Объясняю ещё раз. В папке cgi-bin лежит скрипт counter.pl в этой же папке должен изначально создаваться файл data.txt Код скрипта:
В лог файле появляется ошибка [error] Can't open file: Permission denied at /home/mebelwod/www/site11/cgi-bin/counter.pl line 25.\n Файл data.txt в папке cgi-bin не создаётся. Кроме того, при переходе на страничку счётчика http://11.mebelwod.z8.ru/cgi-bin/counter.pl выводится не само значение счётчика, а еще добавляется хтмл-код (посмотреть можно, кликнув по ссылке). Что надо сказать техподдержке, чтобы мои скрипты имели возможность, создавать, открывать и изменять файлы, лежащие в внутренних папках моего сайта? |
| Автор: ginnie 27.10.2011, 16:39 |
| Жэк, прежде всего надо научится разбираться с правами на файлы. Посмотрите, какие права на файл data.txt, владельца и группу. Попробуйте удалить файл data.txt, вызвать скрипт и посмотреть создастся ли новый файл? Если файл будет создан, надо посмотреть владельца файла, чтобы знать под каким пользователем выполняются Ваши скрипты. Если файл создан не будет, надо написать в техподдержку о том, что скрипт не может создать файл в cgi-bin и спросить, как эту проблему решить. |
| Автор: Жэк 27.10.2011, 16:41 |
| Файл не создаётся. Спасибо за помощь. |
| Автор: Жэк 27.10.2011, 22:03 |
| Подскажите ещё, как тем же open(); создать (или открыть существующий) файл в другой директории. Например, скрипт находится в cgi-bin и в том же cgi-bin есть папка tmp - как создать/открыть файл в папке tmp? (пробовал так: open(DATA, ">/cgi-bin/tmp/data.txt"); - пишет ошибку, что не может открыть файл, как на локальном сервере, так и на хостинге). АПД. chdir(); спасёт мир. )) |
| Автор: ginnie 28.10.2011, 13:00 | ||
Жэк, вот так:
|