【问题标题】:php script is not uploading image to specified folderphp脚本未将图像上传到指定文件夹
【发布时间】:2013-12-01 20:10:29
【问题描述】:

虽然我知道这是一个无处不在的问题,但我找不到它不起作用的原因:

我已经收集了下面的代码来实现图片上传到我的网站:

<html>
<body>

<form action="insert.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

insert.php 是:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_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("/httpdocs/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "/httpdocs/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "/httpdocs/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
     echo "Invalid file";
  }
?>

嗯,成功消息显示正确。但是,没有文件上传到指定的文件夹。

有什么想法吗?

【问题讨论】:

  • 检查 move_uploaded_file() 是否返回 TRUE。你可能没有写权限什么的。
  • move_uploaded_file 根据成功与否返回真或假。你应该在使用它时检查它。
  • 并确保您已启用错误报告。如果失败,应该显示原因。
  • 您是否正在尝试写入文件系统 roothttpdocs 文件夹?很有可能这是不正确的。
  • 您应该在执行任何其他操作之前检查$_FILES["file"]["error"]

标签: php html image forms image-uploading


【解决方案1】:

从根目录运行脚本,创建一个名为 uploads 的文件夹,然后将 /httpdocs/ 的所有实例更改为 uploads/(如下所示)而不打开 /,它应该(理论上) 工作,就像它为我所做的那样。

需要注意的一点是,如果您的文件小于 20,000 字节,请确保增加此 &lt; 20000。如果你尝试上传的文件高于这个数字,那么脚本会抛出Invalid file的错误

确保文件夹是可写的,例如:07550777(在我的例子中是 0755)

这已在我自己的服务器上使用uploads 作为我的上传文件夹进行了测试。

加上Nikolay states in his answer,您可能还想检查一下。

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000) // <= you may have to increase this value
&& 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
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "uploads/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "uploads/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
     echo "Invalid file";
  }
?>

【讨论】:

  • 不知何故奏效了!可能我的文件传输文件夹错误,无论如何,非常感谢!
  • 非常欢迎您@PanosVakalopoulos 相对路径效果更好。 ;-)
【解决方案2】:

如果文件夹路径的所有内容都正确,您应该检查文件上传的限制,例如在.htaccess中:

php_value upload_max_filesize 10M
php_value post_max_size 10M

或在 pnp.ini 中:

upload_max_filesize = 10M
post_max_size = 10M

默认限制为 2048KB。

【讨论】:

    【解决方案3】:

    确定您的根文件夹$_SERVER["DOCUMENT_ROOT"] 以查看 php 是否可以访问该文件夹或将文件添加到正确的文件夹,否则一切看起来都很好。

    【讨论】:

      【解决方案4】:

      您指定的地址不正确!

      使用c:/wamp/www/site/httpdocs/之类的地址 不是 http://site/httpdocs/

      如果在 Linux 上检查文件夹的写入权限。

      【讨论】:

        【解决方案5】:

        这是 100% 且经过测试的代码 addimage1 是文件输入类型的名称 postimages 是一个文件夹 并成功提交到 postimages 文件夹中

        move_uploaded_file($_FILES["addimage1"]["tmp_name"], “postimages/”。 $_FILES["addimage1"]["name"]);

        【讨论】:

        • 您能否对您提供的解决方案添加更多描述?
        【解决方案6】:
        if you have try  image upload in php but not uplaod  
        
         if you are working on cpanel then 
            your image folder must be change permission from 755 to 777
            its work for me
        
        <?php  
        $target_path = "upload/";  
        $target_path = $target_path.basename( $_FILES['fileToUpload']['name']);   
        
        if(move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_path)) {  
            echo "File uploaded successfully!";  
        } else{  
            echo "Sorry, file not uploaded, please try again!";  
        }  
        ?> 
        
        if this helpful for you give a thumbs up
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-29
          • 1970-01-01
          • 2018-01-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多