2014-04-12 51 views
0

我知道有類似的問題回答,但我沒有從他們那裏獲得幫助。 因此,Perl的命令:Perl系統命令輸出在從控制檯運行時可見,但在通過瀏覽器運行時不可見CGI

$temp=`/home/pi/spitest/RaspberryPi-mcp3008Spi/tempv1`; 
print $temp; 

正確顯示程序的輸出tempv1從Linux控制檯上運行時:

[email protected] /var/www/cgi-bin $ ls -la temp.pl 
-rwxrwxr-x 1 root root 193 Apr 12 15:09 temp.pl 
[email protected] /var/www/cgi-bin $ perl temp.pl 
Content-Type: text/plain 

<html><body>20.4</body></html>[email protected] 

,但是當我運行它,它不會顯示這個特定的輸出我的瀏覽器:

http://192.168.1.102/cgi-bin/temp.pl 

output: <html><body></body></html> 

我的服務器是lighttpd的和它的用戶和組既www-data。 感覺這是一個許可的事情,但我希望你的意見。

解決方案編輯: 一開始我沒能看到的/ dev/spidev *設備的連接,但現在很明顯,這個問題在那裏(文件權限)。謝謝大家的幫助,對於最初的誤導性信息我很遺憾:

我想從Perl腳本調用的系統命令使用這些spidev *設備與芯片進行通信。當我從CLI(user = pi)調用這個系統命令(應用程序)時,它運行良好,但是當它作爲通過Web服務器(user = www-data)啓動的Perl腳本的一部分執行時,應用程序失敗,顯然是因爲用戶www數據沒有對/ dev/spidev *的訪問權限。

我的工作,周圍是CHOWN在/ dev/spidev *設備www數據,但也許我將不得不尋找一個更清潔的解決方案。

太糟糕的stackoverflow不會讓我發佈這個答案,因爲我的聲望很低。

+0

這兩行是你Perl程序中唯一的東西嗎? – TLP

+0

它有幾個其他的行,但它以「#!/ usr/bin/perl」開頭 –

+0

你可以用'su'來查看www-data並查看是否可以運行該腳本? – TLP

回答

0

什麼用戶是您的網絡服務器運行?檢查用戶是否能夠運行/home/pi/spitest/RaspberryPi-mcp3008Spi/tempv1(並更改到正確的目錄)。

否則,你可能會發現,在尋找你的web服務器錯誤日誌會告訴你更多關於什麼是不工作的。

+0

服務器的用戶和組都是www數據。此用戶應該有權限訪問所有具有權限-rwxrwxr-x或-rwxrwxr-x的目錄和文件,對不對? –

+1

@ user3526774你剛纔所說的並不真正提供任何有用的反饋。我們仍然不知道你的'tempv1'是否設置了正確的權限,我們不知道你是否理解了所說的內容。理想情況下,你應該說「tempv1程序具有-rwxrwxr-x權限,應該包含www-data,對嗎?」 – TLP

+0

@Sobrique爲了Sobrique,因爲他的回答讓我看到從CLI執行系統命令(應用程序)並不意味着相同的用戶或相同的權限。 –

0

這些問題的最常見原因是相對路徑不同。出於這個原因,我有使用絕對路徑的趨勢。

此外,聽起來像你的下標可能打印到STDERR而不是STDOUT。反引號只能捕捉STDOUT,所以你需要做的重定向的幫助下2>&1

my @output = `scriptName 2>&1`; 

注:重定向並不適用於所有殼工作(我相信這是tcsh的是不支持回當我有類似的問題)。 Bash採取重定向就好了。

+0

我的「下標」不是腳本,它是用C++編寫的程序,用g ++編譯並用簡單的cout輸出文本。 –

+0

@Jarmund他正在使用絕對路徑,並且在從控制檯運行時獲得stdout輸出。 – TLP

0

我懷疑你的腳本沒有正確的Perl shebang作爲它的第一行,因爲當你從命令行啓動它時,你指定的是perl是解釋器,它可以工作,而你的web服務器似乎並沒有運行它因此它不起作用。

尋找到Perl是與

which perl 

然後改變你的腳本的第一行相匹配的位置,即像

#!/bin/perl 

您的腳本也應該輸出的身體之前的HTML HEAD ,順便說一句。

事實上,只是編輯你的問題,並告訴我們你的腳本。

ADDED

請問你萊蒂配置文件看?喜歡這個?

server.modules += ("mod_cgi") 

$HTTP["url"] =~ "/cgi-bin/" { 
     cgi.assign = (".pl" => "/usr/bin/perl") 
} 
+0

其中perl輸出正確的shebang,即「#!/ usr/bin/perl」,我已經將它包含在我的腳本中 –

+0

我已經更新了配置信息的答案... –

+0

第二部分不存在,以「$ HTTP」開頭的塊。我應該追加它嗎? –

相關問題