2016-05-08 27 views
0

我在SHELL中編寫了一個CGI腳本,它從QUERY_STRING中讀取信息,然後用該信息(ID,名稱等)創建一個.student文件。當我嘗試創建和/或追加到這個文件時,我無法創建它,或者將它移動到我的數據庫目錄。在我正在工作的cgi-bin目錄中創建文件是完全正常的,但如果我嘗試mv,它不起作用。CGI腳本無法創建文件並將其附加到特定目錄

這兩個cgi-bin目錄和數據庫目錄有0777

這裏的權限是我想要的工作代碼:

echo "Student_ID=${Student_ID}" >> ~/public_html/database/${Student_ID}.student 

我缺少的是在這裏嗎?

+0

該特定文件的權限是什麼? – Jahid

+0

我試過在創建它時在本地創建文件0777,然後使用mv嘗試將其移動到數據庫目錄。雖然沒有運氣。 –

+1

什麼是SO和版本? SELinux啓用? –

回答

0

確保該目錄存在,並且用戶具有足夠的權限。檢查過程退出狀態($?變量)。將錯誤記錄到可靠寫入的地方。

dir="$HOME/public_html/database/" 
db_file="${dir}/${Student_ID}.student" 
error_log=/tmp/cgi-error.log 

# If $dir doesn't exist 
if [ ! -e "$dir" ]; then 
    # Create $dir path 
    mkdir -p $dir 
    if [ $? -gt 0 ]; then 
    echo "Failed to mkdir $dir" >>"$error_log" 
    exit 1 
    fi 

    chmod +wx $(dirname $dir) $dir 
    if [ $? -gt 0 ]; then 
    echo "Failed to set permissions for $dir" >>"$error_log" 
    exit 1 
    fi 
fi 

if [ ! -w "$db_file" ]; then 
    echo "$db_file is not writable!" >>"$error_log" 
    exit 1 
fi 

echo "Student_ID=${Student_ID}" 2>>"$error_log" >> "${db_file}" 
if [ $? -gt 0 ]; then 
    echo "Failed to log $Student_ID to $db_file" >>"$error_log" 
    exit 1 
fi 

此外,請避免0777權限。至少,除非/tmp-like目錄的sticky bit設置爲:1777,否則對於「其他」不需要w權限。

相關問題