【问题标题】:move_uploaded_file places file outside of target directorymove_uploaded_file 将文件放在目标目录之外
【发布时间】:2012-07-29 21:16:29
【问题描述】:

我目前有以下:

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

【问题讨论】:

    标签: php mysql file-upload directory


    【解决方案1】:

    您的$target_path 似乎在用户目录后面缺少/,因为basename() 的输出不会包含/

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

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

    【讨论】:

    • 你明白了!是的,我正在 chmod'ing 回到 755。我正在尝试不同的权限以使其正常工作。
    【解决方案2】:

    看起来你的$target_path 后面需要一个/,或者加入下一行只会创建一个文件,其中前面有他们的电子邮件地址。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多