2017-05-26 152 views
0

我最近開始使用perl(本週)。 客戶端會向服務器請求一個文件,服務器必須用請求的數據創建該文件。無法使用perl創建文件(權限被拒絕)

所以我一直在嘗試創建一個文件,但它拒絕許可。

現在:這是代碼的一部分。我從互聯網上拿走了它。

$filename = 'report.txt'; 
    open($fh, '>', $filename) or $message="Could not open file '$filename' $!"; 
    print $fh "My first report generated by perl\n"; 
    close $fh; 

我會繼續我寫的數據後,我可以使這項工作。

我使用「www-data」用戶的lighttpd。我已經花了幾個小時試圖解決它... 此外,我使用$消息,因爲我不知道如何使用「死」。當我使用「死」時,它會顯示「500 - 內部服務器錯誤」,沒有別的。

我在Ubuntu 14.04的工作

+0

運行該腳本的用戶是否具有該目錄下的寫入權限?而且,如果該文件已經存在,用戶是否也有該文件的寫權限?例如,如果您以該用戶的身份登錄,並且「cd」登錄到該目錄,那麼如果您運行「touch report.txt」,它會起作用嗎? –

+1

你應該在你編寫的所有代碼的開始處包含'use strict;'和'use warnings''。 – bytepusher

回答

1

它可能是你的用戶不能夠訪問你試圖寫入該文件夾。

試想一下,你把一個Perl腳本到您的目錄,然後用第二個請求執行它......

嘗試創建文檔根目錄以外的文件

這將發送錯誤信息到瀏覽器

use CGI::Carp qw(fatalsToBrowser); 
die "Bad error here"; 

但是你可能需要安裝module

不要忘記use strict; in perl

4

至於處理500服務器錯誤,請參閱the answers to this question。基本上,找到服務器的錯誤日誌。

或者,您可以向瀏覽器顯示錯誤。這應該是默認關閉的,只在開發中打開。有各種模塊可以爲你做到這一點,它取決於你使用的是什麼Web框架。如果你正在使用像CGI這樣的準系統,那麼它是CGI::Carp。如果您正在使用類似Dancer的應用程序,那麼您可能應該使用Dancer::Logger來控制錯誤消息的位置。


您會收到權限錯誤,因爲令人驚訝的是,運行代碼的用戶沒有寫入文件的權限。在這種情況下,它是www-data用戶。我無法告訴你爲什麼你被拒絕,你必須自己弄清楚。該目錄很可能不允許www-data寫入文件。 www-data的權限通常非常有限,因爲Web服務器是攻擊的一個簡單目標。

This tutorial on Unix file permissions應該有所幫助。

如果您使用的是舞者,您可以從命令行運行該程序,並在控制檯上獲取錯誤。您必須sudo -u www-data才能確保您將其運行爲www-data,因爲您的用戶不會模擬www-data的權限問題。

相關問題