![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
Здравствуйте. Начал заниматься по книге А.Ломова Практика создания динамических сайтов. Дошёл до сакральной программки по выводу священного текста "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" (без кавычек), то есть, скрипт выполняется, его результатом есть ожидаемый текст, но он почему-то не возвращается браузеру в виде хтмл-файла, а посылается ему на загрузку. Что мне делать?)) Дайте, пожалуйста, подробный ответ, понятный для начинающего. Это сообщение отредактировал(а) Жэк - 16.10.2011, 23:52 |
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
заменил text/plain на text/html --- сделало, как надо. Объясните тонкости, почему так.
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 1 Всего: 17 |
hint: plane != plain
|
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
благодарю.
|
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
В продолжение темы. Столкнулся со следующей проблемой: разбираю работу двух простейших скриптов: 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 тут приведён для локальной машины, на веб-сервере он изменён согласно инструкциям хостинга) Присоединённый файл ( Кол-во скачиваний: 3 )
comments.pl 3,52 Kb |
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
ошибка с отсутствием favicon.ico понятна - нет у меня там в папке иконки сайта, эта ошибка с работой скрипта не связана и идёт лесом.
по поводу второй ошибки can't locate - в осноной файл comments.pl с помощью директивы require подключается файл _stdlib.pl, содержащий подпрограммы, используемые в процессе обработки данных формы. Если убрать require и вставить в скрипт полностью текст файла подрограмм _stdlib.pl, то ошибка 500 не возникает, НО, так же, как и в случае со счётчиком, не создаётся служебный текстовый файл с записями комментариев. В связи с этим уточнение вопроса: почему, кроме того, что не создаются служебные текстовые файлы в обоих скриптах (счётчик посещений и лента комментариев), кроме того не удаётся использовать require для подключения перловского файла с подпрограммами? (напоминаю, что на локально установленном апачи всё работает). Это сообщение отредактировал(а) Жэк - 24.10.2011, 14:20 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Жэк, почему не создаются файлы можно узнать, добавив обработку ошибок функции open():
Где у Вас расположен _stdlib.pl? Интерпретатор написал все пути, где он его ищет и не находит. Это сообщение отредактировал(а) ginnie - 24.10.2011, 14:58 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Жэк |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
_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 Это сообщение отредактировал(а) Жэк - 24.10.2011, 15:43 |
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Жэк, а Вы во всех open'ах добавили обработку ошибок или только в первом?
P.S. На локальном сервере все работает, т.к. там у Вас Windows и с правами таких проблем не возникает, как в Unix-системе на хостинге. Это сообщение отредактировал(а) ginnie - 24.10.2011, 16:54 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
ок, добавил во всех open - ах. Ну, сгенерировался вдобавок к числу 1 (стартовое значение счетчика) код хтмл-странички, главным смыслом которой является ошибка 500.
Про права доступа понятно, непонятно, как разрешить. |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
И что я из этого описания должен понять? Вы напишите, что в логе ошибок выводится. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
Хорошо. Объясняю ещё раз.
В папке 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 выводится не само значение счётчика, а еще добавляется хтмл-код (посмотреть можно, кликнув по ссылке). Что надо сказать техподдержке, чтобы мои скрипты имели возможность, создавать, открывать и изменять файлы, лежащие в внутренних папках моего сайта? Это сообщение отредактировал(а) Жэк - 27.10.2011, 16:37 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Жэк, прежде всего надо научится разбираться с правами на файлы. Посмотрите, какие права на файл data.txt, владельца и группу. Попробуйте удалить файл data.txt, вызвать скрипт и посмотреть создастся ли новый файл? Если файл будет создан, надо посмотреть владельца файла, чтобы знать под каким пользователем выполняются Ваши скрипты.
Если файл создан не будет, надо написать в техподдержку о том, что скрипт не может создать файл в cgi-bin и спросить, как эту проблему решить. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
Файл не создаётся.
Спасибо за помощь. |
|||
|
||||
| Жэк |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 16.10.2011 Репутация: нет Всего: нет |
Подскажите ещё, как тем же open(); создать (или открыть существующий) файл в другой директории. Например, скрипт находится в cgi-bin и в том же cgi-bin есть папка tmp - как создать/открыть файл в папке tmp?
(пробовал так: open(DATA, ">/cgi-bin/tmp/data.txt"); - пишет ошибку, что не может открыть файл, как на локальном сервере, так и на хостинге). АПД. chdir(); спасёт мир. )) Это сообщение отредактировал(а) Жэк - 27.10.2011, 23:11 |
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |