2010-06-17 193 views
0

請幫忙!我真的瘋了這個問題!Perl和Apache HTTP服務器:當從服務器執行cgi腳本時,無法執行MLDBM綁定,但從命令行執行時無法執行。爲什麼?

我有一個CGI Perl腳本,它從Apache HTTP服務器在執行時,在下面的行總是失敗:

tie %db, 'MLDBM', "$data_path/$db_name.db", O_RDONLY, 0640 or die $! 

和錯誤是權限被拒絕:

Software error:

Permission denied at /var/www/cgi-bin/rich/pages/display line 381.

For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

但是,當執行從命令行,它工作沒有任何問題。

我已確保目錄和要綁定的文件具有正確的權限。

那麼我還錯過了什麼? Apache的httpd.conf中有哪些配置可能會出錯?無可否認,我之前沒有任何Apache HTTP服務器的經驗,所以這是我第一次玩這個遊戲。不過,我已經閱讀過不止一次的手冊來尋找我可能錯誤的事情,但我沒有注意到任何事情。但我當然可能錯了。

謝謝!

+1

添加'死亡,除非-e「$ data_path/$ db_name.db」;'在此行之前 – 2010-06-17 15:26:44

回答

0

您是否驗證過$data_path$db_name包含您認爲他們在做什麼?

$data_path絕對路徑,它不依賴於活動用戶的身份或主目錄?

ls -l $data_path/$db_name.db顯示文件的所有權和權限是什麼?

我從來沒有在apache上跑過(或聽說過)任何會阻止CGI進程獲得打開文件權限的東西,所以我非常懷疑這是一個Apache配置問題。最有可能的是它要麼尋找錯誤的文件,要麼文件的權限對於Apache正在運行CGI進程的用戶是不正確的。

+0

$ data_path是絕對路徑,$ db_name.db是普通的二進制文件。 $ data_path/$ db_name.db的文件權限是''-rwxrwxrwx''。正如我所說的,當腳本從命令行''./display''執行時,打開文件沒有任何問題。我甚至將運行Apache服務器的用戶和組更改爲文件的所有者,但仍然沒有運氣。 – His 2010-06-17 09:52:41

+0

@user:你可以打開文件進行簡單的閱讀嗎?即'打開我的$ fh','','$ data_path/$ db_name.db'或者'打開$ data_path/$ db_name.db:$!'失敗';' – Ether 2010-06-17 16:16:19