我正在 Linux Web 服务器上开发 PHP Web 应用程序,以获取我正在共同教授的课程的成绩和文档。我现在写的页面是提交作业的,学生从下拉菜单中选择一个作业,然后上传作业并提交。提交时,有关提交的所有信息都进入 MySQL 表,并且文件被移动到文件系统上的永久位置。理想情况下,这将是按作业、学生和版本高度组织的东西,但我现在只想让文件上传在原则上正常工作,所以现在它只是将东西发送到目录 ~/phptest/ (权限设置为 755,尽管我尝试 777 只是为了进行测试,但这也不起作用)。这是现在的代码:
($dbh 是我创建的扩展数据库句柄类的一个实例,以使这些特定的数据库事务更清晰)
if(isset($_POST['submit'])) {
$assignmentID = $_POST['assID'];
$tmp = "/home/username/phptest/";
$info = pathinfo($_FILES['file']['name']);
$filename = $info['basename'];
$ext = $info['extension'];
if(1) { //strcmpall($ext,array('tar.gz','zip'))) {
if($_FILES['file']['size'] < 1000000) {
$path = $tmp . $filename;
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
$versionQuery = $dbh->select(array('version'),array('a01_submissions'),array("studentID='$studentID'","assignmentID='$assignmentID'"));
if(count($versionQuery)) {
$versionArray = $dbh->colToArray($versionQuery,'version');
$version = max($versionArray)+1;
}
else $version = 1;
echo "Version $version.\n";
$week = $dbh->getOne('week','a01_assignments','id',$assignmentID);
$dbh->insert("a01_submissions",array('studentID','assignmentID','version','filePath'),array($studentID,$assignmentID,$version,addslashes($newpath)));
echo "File $filename sucessfully uploaded and stored at $newpath.\n";
}
else echo $moved . "
\n";
}
else die("File cannot exceed 1MB");
}
else die("Bad file extension.");
}
else {
// HTML to display the submission screen
}
不过,我的问题是 move_uploaded_file 仅适用于具有 777 权限的目录。仔细检查表明这是因为 PHP 正在以用户 'apache' 的身份上传内容,因此无法使用 ow 写入我的用户名拥有的目录。我看到用户在 PHP 文档中发布的解决方案建议使用 chown 来回收文件,但我没有足够高的权限级别来执行此操作。这个问题有没有一个优雅的解决方案,不涉及尝试让我的用户名获得更高的权限?