【问题标题】:Form not passing file/picture through submit表单未通过提交传递文件/图片
【发布时间】:2013-05-15 12:47:24
【问题描述】:

我正在使用 php/html5 并尝试上传文件,但 $_FILES['picture'] 似乎从未包含任何内容。我浏览了很多帖子并寻找常见的修复方法,但它们似乎都不起作用,首先是代码;

表格;

<form enctype="multipart/form-data" action="decodeQR.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
  <input type="file" name="picture" id="picture" value="picture" accept="picture/*" capture>
  <input type="submit" value="Upload">
</form>

decodeQR.php;

<?php
include 'header.php';


$upload_status = FALSE;
if(isset($_FILES['picture']))
{
    echo 'picture set <br>';
}
else
{
    echo 'picture not set <br>';
}

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

if (isset($_FILES['picture']) && file_exists($_FILES['picture']['tmp_name']))
{
    $image = $_FILES['picture']['tmp_name'];

    //~ Check if image is an image
    if (@getimagesize($image))
    {
        $upload_status = TRUE;
        //~ from here you can use yours image as $_FILES['picture']['name'], for example to copy it
        move_uploaded_file($image, realpath(dirname(__FILE__)).'/images/'.$_FILES['picture']['name']);

        //~ Also be noticed that the image curently is in OS tmp folder and if you dont copy it, it will be deleted after script execution.
    }
}
if ($upload_status)
{
    echo 'Image successfully uploaded. <br> <img src="images/'.$_FILES['picture']['name'].'">';
}
else
{
    echo 'nope.jpg';
}

?>

输出总是;

图片未设置

不.jpg

这意味着$_Files['picture'] 没有设置,并且文件数组中没有错误。

从上面的代码可以看出,我已经尝试了以下修复;

  • 添加了表单编码类型的标记; enctype="multipart/form-data"
  • 添加了隐藏的MAX_FILE_SIZE 属性
  • 代码中不显示,我尝试在文件标签中添加 size='30000000'
  • 我检查了设置和获取文件时值/名称是否相同
  • 我还检查了 php.ini 以确保允许 file_upload

我可能会错过什么?

编辑;我已经在我的桌面和移动浏览器上尝试过了。

【问题讨论】:

  • 您检查过您的服务器错误日志吗?您在 phpinfo() post_max_size、max_file_uploads、file_uploads 等中的文件处理值是什么
  • 使用var_dump($_FILES) 并检查。
  • post_max_size 为 8m,upload_max_filesize 为 2m,max_file_uploads 为 20,file_uploads 开启。现在检查 var_dump($_Files)
  • @YogeshSuthar var_dump($_FILES) 返回 array(0) { },所以它没有被通过..但是为什么...我已经尝试了我的问题中解释的所有事情。
  • 您的代码没有问题。我刚刚测试了您的表单,并将一个文件上传到一个脚本,该脚本只是 &lt;?php var_dump($_FILES); ,问题必须与您尝试上传的文件、浏览器或服务器配置有关。愚蠢的问题。你上传的文件有多大?不会超过 2mb 吧?

标签: php html forms jquery-mobile


【解决方案1】:

我发现解决方案实际上是显而易见的(无法使用 ajax 上传文件)和 jquerymobile 框架之间的问题,该框架默认在其表单上使用 ajax。

为了解决我添加的问题data-ajax='false'

<form enctype="multipart/form-data" action="decodeQR.php" method="post" data-ajax='false'>

文件上传工作正常,所以我将这个答案发布给任何使用 jquerymobile 并遇到这个问题的人! :)

【讨论】:

    【解决方案2】:

    你检查过浏览器发送的请求中是否包含文件吗?

    顺便说一句。我是新来的。你们如何将这些“cmets”添加到问题中?

    【讨论】:

    • 我相信您需要一定的代表才能添加 cmets。它通常就在问题之下。
    猜你喜欢
    • 2020-06-07
    • 2013-01-08
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多