【问题标题】:PHP file upload not working in centos serverPHP文件上传在centos服务器中不起作用
【发布时间】:2014-05-02 23:29:24
【问题描述】:

这些是我用于文件上传的代码。在 Xammp 窗口中一切正常。但是它在centos服务器下不起作用。它抛出错误“无效文件”。

上传.php

   <?php

    $allowedExts = array("json");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);

    if ((($_FILES["file"]["type"] == "application/json"))
          && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts))
    {

      if ($_FILES["file"]["error"] > 0)
       {
         echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
       }

       else
         {
           echo "Upload: " . $_FILES["file"]["name"] . "<br>";
           echo "Type: " . $_FILES["file"]["type"] . "<br>";
           echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
           echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

          if (file_exists("uploads/" . $_FILES["file"]["name"]))
            {
             echo $_FILES["file"]["name"] . " already exists. ";
            }
            else
            {
           $dir="uploads";
               if ($handle = opendir($dir)) {
               while (false !== ($entry = readdir($handle))) {
               if ($entry != "." && $entry != "..") {
           unlink("uploads/$entry");
            }
          }
          closedir($handle);
        }             
         move_uploaded_file($_FILES["file"]["tmp_name"],
         $f="uploads/" . $_FILES["file"]["name"]);
     chmod($f, 0777);
         echo "Stored in: " . "uploads/" . $_FILES["file"]["name"];
     header("Location: user.php");
        }
      }
   }
  else
   {
     echo "Invalid file";
   }


  ?>

HTML

     <form action="upload.php" method="POST" enctype="multipart/form-data">
     <label for="file"><span style="color:#ffffff;">Upload File:</span></label>
     <input type="file" name="file" id="file">
     <input class="btn btn-success btn-block" type="submit" name="submit" value="Submit">

上传的文件为Json文件,文件大小为1.02kb。

请有人帮我解决这个问题。

【问题讨论】:

  • 你能正确缩进你的代码吗?
  • 这里有多个PHP问题: 1.你没有检查move_uploaded_file()的结果; 2.你chmod文件到777,这会造成安全错误; 3.(推荐)你在header('Location: ...')之后没有调用exit
  • @Raptor 完成。上传的文件是一个1.02kb大小的json文件
  • @Raptor 我使用 777 检查天气问题是由权限引起的

标签: php linux file file-upload centos


【解决方案1】:

使用它会起作用,

替换下一行,

move_uploaded_file($_FILES["file"]["tmp_name"], $f="uploads/" . $_FILES["file"]["name"]);

下面一行,

move_uploaded_file($_FILES["file"]["name"], "uploads/" . $_FILES["file"]["name"]);

除了检查您的文件夹权限之外,如果有任何进一步的疑问,请查看此内容,

http://www.projectpier.org/node/285

【讨论】:

  • 已经试过了。它执行了代码但没有上传文件
  • 检查您的文件夹权限,或查看此projectpier.org/node/285
【解决方案2】:

如果程序流程进入“无效文件”情况,则意味着:

假设您选择了一个有效的文件来上传

  1. $_FILES["file"]["type"] 不是 application/json
  2. $_FILES["file"]["size"] >= 20000 字节
  3. $extension 不是 json

要调试,

  1. 回显$_FILES["file"]["type"]
  2. 回显$_FILES["file"]["size"]
  3. 回显$extension

目前没有足够的详细信息来进一步诊断您的问题。

【讨论】:

  • 查了一下,找到了源。文件类型显示为“application/octet-stream”而不是“application/json”
  • application/octet-stream 是一个二进制字节文件。您确定您上传的文件是 ASCII 编码的文本文件吗?
猜你喜欢
  • 2012-01-10
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2021-10-01
  • 1970-01-01
  • 2014-11-12
  • 2016-09-25
相关资源
最近更新 更多