1

我目前有以下内容:

    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,上传的文件上有一个 Lock 符号,但我可以拖放到用户的文件夹中。

4

2 回答 2

2

$target_path似乎缺少/用户目录后的 a ,因为basename()' 的输出不包括/.

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

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

于 2012-08-01T01:36:22.520 回答
1

看起来您的$target_path需求是/在它之后,或者与下一行一起加入只会制作一个文件,其中包含他们的电子邮件地址。

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

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

如果它仍然放在uploads/目录中,请检查$_SESSION['email']是否设置正确。

于 2012-08-01T01:37:46.137 回答