Perl & Apache Http-сервер: не может сделать связь MLDBM, когда сценарий CGI выполнен с сервера, но в порядке, когда выполняется из командной строки. Почему?
-
28-09-2019 - |
Вопрос
пожалуйста помоги! Я действительно собираюсь с этой проблемой!
У меня есть скрипт CGI Perl, и он всегда терпит неудачу в следующей строке при выполнении с HTTP-сервера Apache:
tie %db, 'MLDBM', "$data_path/$db_name.db", O_RDONLY, 0640 or die $!
И ошибка разрешена запрещено:
Программная ошибка:
Разрешение запрещено в / var / www / cgi-bin / bechange / pages / line 381.
За помощью, пожалуйста, отправьте почту веб-мастеру (root @ localhost), давая это сообщение об ошибке и время и дату ошибки.
Но когда выполняется из командной строки, она работает без проблем.
Я полагал, что каталоги и файл связаны с правильными разрешениями.
Так что еще я пропустил? Какие конфигурации в Apache's httpd.conf я мог бы ошибаться? По общему признанию, у меня не было никакого предыдущего опыта с HTTP-сервером Apache HTTP, так что это в значительной степени мой первый раз играя с ним. Тем не менее, я прочитал руководства не раз, чтобы искать вещи, на которых я мог ошибаться, но я ничего не заметил. Но я мог бы ошибаться, конечно.
Спасибо!!
Решение
Вы подтвердили это $data_path
а также $db_name
Содержать то, что вы думаете, они делают?
Является $data_path
Абсолютный путь, который не зависит от активной идентичности пользователя или домашнего каталога?
Что значит ls -l $data_path/$db_name.db
Показать до владения и разрешениями файла?
Я никогда не бегаю по всему (не слышу) что-либо в Apache, который предотвратит разрешение процесса CGI для открытия файлов, поэтому я очень сомневаюсь, что это проблема конфигурации Apache. Скорее всего, он либо ищет неправильный файл или разрешения файла неверны для пользователя, который Apache запущен процессом CGI.