【问题标题】:Uploading image failing on php back-endphp后端上传图片失败
【发布时间】:2012-01-13 19:47:34
【问题描述】:

我正在尝试实现一个小的更新个人资料图片表单。

<form method="post" action="<?php echo $filename;?>" name="change_picture_form" id="change_picture_form" enctype="multipart/form-data">
    <input type="hidden" name="action" value="change_picture" />
    <input type="file" name="new_user_picture">
    <input type="submit" class="submitButton" value="Save Changes"/>
</form>

目标php文件有如下代码:

echo $_FILES['new_user_picture']['size']." ";
echo $_FILES['new_user_picture']['tmp_name']." ";
echo $_FILES['new_user_picture']['name']." ";
echo $_FILES['new_user_picture']['error']." ";
echo $_FILES['new_user_picture']['type']." ";
$picture_uploaded = $_FILES["new_user_picture"]["tmp_name"];
if( is_uploaded_file( $picture_uploaded ) ) {
    $imagesize = getimagesize( $picture_uploaded );
    switch( $imagesize[2] ) {
        case IMAGETYPE_PNG:
              $extension = '.png';
              echo "<script>console.log('Reached here!!')</script>";
              try {
                  $image_original = imagecreatefrompng( $picture_uploaded );
                  if (!$image_original)
                      echo '<script>console.log("not image original")</script>';
              } catch(Exception $e) {
                  echo "<script>console.log('Error!!')</script>";
              }
              break;
        case IMAGETYPE_JPEG: ....
        ...
    }
}

在这里,我有许多图像类型的类似代码。我通过尝试上传 png 图像来测试此代码。前 5 个 echo 语句显示预期结果 - 大小、零错误值、名称、类型和临时名称。

我得到“到达这里!!”在我的控制台上。 然而,imagecreatefrompng 似乎无声无息地崩溃了。 Try-catch 似乎无法捕捉到错误。

帮助?谢谢!

【问题讨论】:

  • 你是什么意思'静默崩溃'你在日志或屏幕上得到任何错误?
  • 我猜你不能直接转换为临时上传的文件,你如何 move_uploaded_file() 然后执行 imagecreatefrom png ?
  • @Navneet 代码按书面方式工作。我看不出有什么不妥。您将获得 imagecreatefrompng() 函数的资源 ID,请参阅 php.net/manual/en/function.imagecreatefrompng.php ,即为什么您没有获得非原始图像。
  • 我已经尝试过先移动。最初,我认为问题出在权限上。但它仍然存在。所以,现在我将文件复制到另一个文件夹,然后调用 imagecreatefrompng()。我在控制台上完全没有错误。我在这个函数调用之后添加了一些 echo 语句,它们都没有出现在页面或控制台上。

标签: php forms


【解决方案1】:

我一直没有在 PHP 中处理文件上传,但是这行是否可能:

$picture_uploaded = $_FILES["new_user_picture"]["tmp_name"]

应该是

$picture_uploaded = $_FILES["new_user_picture"]?

按原样,第一行应该为您获取上传文件的文件名,而第二行(上面已编辑的行)应该是对文件本身的引用。

HTH。

编辑:好吧,看看我的答案是不正确的......这有帮助吗? http://www.php.net/manual/en/function.imagecreatefromstring.php .用户注释/cmets 中有一个帮助函数,可以简化你正在做的事情

【讨论】:

  • 函数实际上需要文件名和路径。这行不通。
  • 果然。刚刚阅读完手册,并准备相应地编辑我的答案......对不起。 :p
猜你喜欢
  • 2014-10-25
  • 2014-07-22
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多