2011-09-24 49 views
0

可能對你來說太容易回答。 我的問題是關於CGI和Apache Web服務器。 簡單一點,我有一個HTML「form.html」,其中包含一個表單。要訪問它,請在瀏覽器中輸入「127.0.0.1/form.html」。 在這個HTML文件點擊 「提交」 後,它應該ADRESS爲 「127.0.0.1 \ cgi-bin目錄\ cginame.cgi」 的 「cginame.cgi」 內容如下:奇怪〜Apache找不到實際存在的「bash」來執行我的cgi文件〜

#!/bin/bash 

if [ $REQUEST_METHOD="GET" ] 
then 
data=$QUERY_STRING 
else 
data='cat' 
fi 
java mortcal $data 

「mortcal」是一個java程序,計算並返回一個包含結果的HTML頁面給用戶。 我使用的是Apache 2.2和Ubuntu 10.04。 問題是,當我點擊「form.html」「提交」按鈕,我得到了這些錯誤日誌中:

[Sat Sep 24 15:00:20 2011] [error] (2)No such file or directory: exec of '/usr/lib/cgi-bin/mortcgi.cgi' failed 
[Sat Sep 24 15:00:20 2011] [error] [client 127.0.0.1] Premature end of script headers: mortcgi.cgi 

我知道這是因爲Apache無法找到「/斌/慶典」執行cgi文件。但我確實有「/ bin/bash」。 這很奇怪。請幫助我。先謝謝你。

+1

請將您的CGI腳本更改爲簡單的「echo Hello world」讓我們縮小這個問題 –

回答

0

我檢查了我的配置文件。他們都還好。所以我一直在網上搜索,最後我看到了這個:

「如果你從Windows機器上覆制了腳本,你可能會被^ M絆倒在行尾,你可以使用cat - v /usr/lib/cgi-bin/printenv.pl | head -1驗證在行尾沒有^ M。「

我沒有從Windows複製我的cgi文件!我忘了提及它,因爲我認爲這沒什麼大不了的。

現在我已經通過在vi中鍵入這個「:%s/^ V^M // g」來移除^ M了,這個問題已經解決了,非常感謝您的回答,哈里森先生和黑鷹,謝謝所有

0

要執行CGI腳本,您需要配置Apache以允許此操作,並且您的腳本必須遵循HTTP協議,方法是以正確的格式發回數據,以及正確的權限等等。

這裏有一個很好的教程用一個例子:http://httpd.apache.org/docs/2.2/howto/cgi.html

...但是,我必須說:從一個shell腳本中運行Java程序通過Apache是​​一個壞主意,在一般。每個請求加載java運行時引擎(JRE),運行該程序,然後卸載它。存在環境,文件所有權等問題 - 所有這些都是爲什麼應用服務器像java的tomcat一樣。所以如果你只是在嘗試一些東西,那很好。如果您認爲這是在專業生產環境中完成某件事情的好方法,我會重新考慮。

+0

我檢查了我的配置文件,它們都沒問題,於是我一直在網上搜索,最後我看到這個:「如果您從Windows機器複製了該腳本,則可能會在行結束時被^ M絆倒。 您可以使用cat -v/usr/lib/cgi-bin/printenv。pl |頭-1來驗證在行尾沒有^ M。 「 我從窗戶 複製我的CGI文件我忘了提,因爲我不認爲這是一個大問題現在我已刪除了^ M通過鍵入這個!」 :%s/^ V^M // g in vi。此問題已解決。 非常感謝您的回答,哈里森先生和黑鷹,謝謝大家。 –

+1

@YanjinDing,將此添加爲新答案,並接受它。這樣,其他誰發現你的問題將知道你是如何解決它。 –

0

如上所述,這似乎是一個好辦法做到的事情,但:

  1. 執行腳本文件的權限允許Web服務器用戶執行?
  2. 您是否在使用selinux等安全框架來應用其他限制?