为啥我的文件没有被加载?

Posted

技术标签:

【中文标题】为啥我的文件没有被加载?【英文标题】:Why is my file not being loaded?为什么我的文件没有被加载? 【发布时间】:2013-02-28 22:02:24 【问题描述】:

我只是想上传一个文件,但没有任何效果。

 <!DOCTYPE html>
 <html><body>

            <form id="exp" enctype = "multipart/form-data" action="../cgi-bin/uploadPic.php">
                <input type="file" id="profilePic2" name="newPic"></input> <br /><br /><br />
                <input type="submit" value="Upload Pic" style="color:black;"></input>
            </form>
  </body></html>

我的 php 文件正在执行。请注意草率的代码,我正在尝试通过 echo 进行调试。

 <html>
 <body>
 <?php

$loadFile = true; // error code
$allowedExts = array("jpg","jpeg","gif","png");
$extension = end(explode(".", $_FILES["newPic"]["name"]));

$file = $_FILES["newPic"];
$picIncluded = false;

if((    ($_FILES["newPic"]["type"] == "image/gif")
||  ($_FILES["newPic"]["type"] == "image/jpeg")
||  ($_FILES["newPic"]["type"] == "image/png")
||  ($_FILES["newPic"]["type"] == "image/pjpeg"))
&&  ($_FILES["newPic"]["size"] < 5000000)
&&  in_array($extension, $allowedExts))
    if($_FILES["newPic"]["error"] > 0)
        echo "pnl"; // error code returned to client
    
    else if(file_exists("../profile-pics/" . $file["name"]))
        echo "pld"; // picture loaded duplicate
     else 
        $picIncluded = true;
        echo "finally";
        if(move_uploaded_file($file["name"]["tmp_name"],"./" . $file["name"]))
            echo "Success again!";
        
        $path = "../profile-pics/" . $file["name"];
    

if(is_uploaded_file($_FILES["newPic"]["name"]["tmp_name"]))
    echo "Good news!";


 ?>

 </body>
 </html>

无论如何,函数 move_uploaded_file() 正在返回 false,因为它找不到临时文件。 is_uploaded_file() 也返回 false。我的扩展和一切都是正确的,但仍然无济于事,没有上传文件。我该如何调试?

【问题讨论】:

你有足够的文件夹权限吗? 如何检查?我正在使用 Fedora。我的 php 在 /var/www/cgi-bin/ 中。临时文件将写入哪里? 哎呀。不知道 Fedora。有人可以帮助你。 我还发现当你检查文件时你使用了这个目录../profile-pics/但是当你上传文件时你没有使用它...... 我只是在调试。我只是看看我是否保存了它。这段代码是一个更大的脚本的一部分。 【参考方案1】:

改一下

if(move_uploaded_file($file["name"]["tmp_name"],"./" . $file["name"]))

if(move_uploaded_file($file["tmp_name"],"./" . $file["name"]))

因为你已经分配了

$file = $_FILES["newPic"];

【讨论】:

我觉得不是这个原因。 @Mr.Student 一旦你分配了$file = $_FILES["newPic"];,你只能引用$file的一维数组,$file中没有二维数组。【参考方案2】:

同样为了安全检查,上传前必须检查is_uploaded_file():

if(is_uploaded_file($_FILES["newPic"]["tmp_name"]))
 if(move_uploaded_file($_FILES["newPic"]["tmp_name"],"../profile-pics/" . $file["name"]))
  echo 'file uploaded...';
 
else
  echo "Possible file upload attack: ";

【讨论】:

感谢您告诉我。我不知道这一点,我一直在学习最佳实践。

以上是关于为啥我的文件没有被加载?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的文件加载线程没有与主线程并行?

Django 为啥我的静态 JS 文件没有加载

为啥我的网站没有加载,而是出现此错误 - “Smarty:无法写入文件”?

为啥我的 UIView 在重新加载后没有响应?

为啥我的 cookie 设置没有被应用?

Flutter:为啥我的构建器在 Web 服务调用后没有重新加载?