【问题标题】:PHP move_uploaded_file filesystemsPHP move_uploaded_file 文件系统
【发布时间】:2014-08-10 08:05:23
【问题描述】:

每个人。我无法让 PHP 将文件向上移动到目录中。 mkdir 在创建目录时工作得很好,并且 mysql 表正在插入所有文件。不过,move_uploaded_file 步骤无法正常工作。

        //filestorage variables 
        $uniqid = uniqid();
        $folder = 'documents/' . $uniqid; //drill down further with m/d currentDate
        $file   = $_FILES['file'];
        $i      = 0;

        //iterate through $_FILES array
        foreach ($file as $f){      
            $temp   = $file['tmp_name'][$i];
            $name   = $file['name'][$i];
            $dest   = $folder . '/' . $name;

        //store file on server      
            if(!file_exists($folder)){
                mkdir($folder);
                chmod($folder, 0755);
                }
            if(isset($_FILES['file'])){                     
                move_uploaded_file($temp, $dest);
                echo "upload complete"; 
                if(move_uploaded_file($temp, $dest)){
                    echo '<p> successful step </p>' . $dest;
                   }
               }

        //prepare and submit files to database  
            if (count($_FILES) > 0){
                if(is_uploaded_file($temp)) {
                    echo '<p>' . "The file is, in fact, uploaded." . '</p>';
                    $sql = "INSERT INTO uploads (`file_dest`) VALUES ( :dest )";
                    $stmt = $pdo->prepare($sql);
                    $stmt->bindParam(':dest', $dest, PDO::PARAM_STR, strlen($dest));
                    $stmt->execute();
                    echo 'the following file was uploaded <p><img src="' . $dest . '" /></p>';
                    echo 'from ' . $folder . '/' . $name;
                    }
                }
            $i++;
            }

我是否需要将目标名称完全限定到根级别?在使目录名称变得有点棘手之后,我在某个时刻弄坏了一些东西。当文件夹刚刚被称为“文档”时,这是有效的(当然,当时的代码也有点不同。

我在 apache 的错误日志中收到的错误信息如下:

[Thu Jun 19 11:30:01 2014] [error] [client 127.0.0.1] PHP Warning: chmod() [function.chmod]: Operation not allowed in /Volumes/Secure/project/Web/Webroot/ public_html/index.php 在第 65 行,引用者:MyWebpage

[2014 年 6 月 19 日星期四 11:30:01] [错误] [客户端 127.0.0.1] PHP 警告:move_uploaded_file(documents/53a310094d082/0000b.jpg) [function.move-uploaded-file]:无法打开流: 第 68 行 /Volumes/Secure/project/Web/Webroot/public_html/index.php 中的权限被拒绝,引用者:MyWebpage

[Thu Jun 19 11:30:01 2014] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/private/var/tmp/ phptrm0HP' 到 /Volumes/Secure/ 中的 'documents/53a310094d082/0000b.jpg' project/Web/Webroot/public_html/index.php 第68行,referer:MyWebpage

【问题讨论】:

  • 您的代码很危险。您在目标路径中直接使用['name'],这允许恶意用户在您的服务器上随意乱写他们选择的文件。
  • 对于if(isset($_FILES['file'])){if(isset($_FILES['file'])){,您缺少右大括号}
  • 连接打开后立即添加$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  • 感谢这些建议。关于我要问的权限问题的任何意见?

标签: php mysql file-upload upload filesystems


【解决方案1】:

问题来自在 Mac OSX 上使用外部卷。它会自动在卷上标记此选项:

忽略所有权权限

取消选中该选项后,mkdir 和类似的命令可以在 Web 服务器上正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多