我目前有以下内容:
if (in_array($_FILES['userfile']['type'], $mimeTypes))
{
$target_path = "./uploads/{$_SESSION['email']}";
$target_path = $target_path . basename( $_FILES['userfile']['name']);
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['userfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
当有人创建登录时,会使用他们的电子邮件0666权限为用户创建一个目录。
目前,move_uploaded_file()将文件放在用户目录的外侧,即上传目录中。正在引发错误。我已经检查了很多次,我的相对路径是正确的。
我使用的是Ubuntu,上传的文件上有一个锁定符号,但可以拖放到用户的文件夹中。
您的$target_path
在用户目录后面似乎缺少一个/
,因为basename()
的输出不包括/
。
// Append trailing slash
$target_path = "./uploads/{$_SESSION['email']}/";
$target_path = $target_path . basename( $_FILES['userfile']['name']);
目录的正确权限应该是0755
(您不希望它完全可写!),因为目录应该具有文件系统遍历的执行权限。您可以使其组可写(0775
),并确保上传目录的组设置为Apache web服务器用户。最好在uploads/directory上设置setgid,并将其组设置为apache用户,以便在其下创建的use目录继承正确的写入权限,而不具有全局可写性。
看起来你的$target_path
后面需要一个/
,或者与下一行连接只会生成一个预先准备好电子邮件地址的文件。
$target_path = "./uploads/{$_SESSION['email']}/";
$target_path = $target_path . basename( $_FILES['userfile']['name']);
如果它仍将其放在uploads/
目录中,请检查$_SESSION['email']
是否设置正确。