CGI脚本无法创建文件并将其附加到特定目录

时间:2016-05-08 18:09:58

标签: bash shell cgi

我在SHELL中编写CGI脚本,从QUERY_STRING读取信息,然后使用该信息(ID,名称等)创建.student文件。当我尝试创建和/或附加到此文件时,我无法创建它,或将其移动到我的数据库目录。它可以很好地在我工作的cgi-bin目录中创建文件,但是如果我尝试使用它,它就不起作用。

cgi-bin目录和数据库目录都具有0777的权限。

这是我想要的代码:

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

我在这里缺少什么?

1 个答案:

答案 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