我在SHELL中编写CGI脚本,从QUERY_STRING读取信息,然后使用该信息(ID,名称等)创建.student文件。当我尝试创建和/或附加到此文件时,我无法创建它,或将其移动到我的数据库目录。它可以很好地在我工作的cgi-bin目录中创建文件,但是如果我尝试使用它,它就不起作用。
cgi-bin目录和数据库目录都具有0777的权限。
这是我想要的代码:
echo "Student_ID=${Student_ID}" >> ~/public_html/database/${Student_ID}.student
我在这里缺少什么?
答案 0 :(得分: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
权限。至少,您对“其他人”不需要w
权限,除非它是/tmp
类目录,其sticky bit设置为1777
。