2012-08-01 40 views
1

外我公司目前有以下几种:move_uploaded_file地方文件的目标目录

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()将文件放在用户目录的顶部,位于uploads目录中。错误正在抛出。我多次检查过我的相对路径是否正确。

我使用的是Ubuntu,上传的文件上有一个Lock符号,但可以拖放到用户的文件夹中。

回答

2

由于basename()的输出将不包含/,因此您的$target_path在用户目录后面缺少/

// Append trailing slash 
$target_path = "./uploads/{$_SESSION['email']}/"; 
$target_path = $target_path . basename($_FILES['userfile']['name']); 

一个目录正确的权限应该是0755(你不希望它全球可写的!),因为目录应该有执行由文件系统遍历权限。您可以将其设为可分组写入(0775),并确保上载目录的组设置为Apache Web服务器用户。这可以通过在uploads /目录下设置setgid并将其组设置为apache用户来完成,因此使用下面创建的目录会继承正确的写入权限,而不是世界可写的。

+0

你明白了!是的,我chmod回到755.我试图让这个工作不同的权限。 – V1GG3N 2012-08-01 01:39:31

1

看起来您的$target_path需要/之后,或加入下一行将只是一个文件,其电子邮件地址前加上它。

$target_path = "./uploads/{$_SESSION['email']}/"; 

$target_path = $target_path . basename($_FILES['userfile']['name']); 

如果它还是把它在uploads/目录,检查$_SESSION['email']设置正确。

相关问题