简体   繁体   English

PHP imagejpeg无法正常工作

[英]PHP imagejpeg doesn't work

So I looked almost every question and tried to work to show my image using the php script below. 因此,我几乎查看了每个问题,并尝试使用下面的php脚本显示我的图像。 But it doesn't work. 但这是行不通的。 I also tried to see if GD library is enabled with PHPInfo() and it is working as well. 我还尝试查看GD库是否已通过PHPInfo()启用,并且它也正常工作。 I am very new to PHP but can't seem to get this working. 我对PHP非常陌生,但似乎无法正常工作。 Thanks for your help! 谢谢你的帮助!

EDIT: I get a broken image icon after I click on upload a doc button. 编辑:单击上传文档按钮后,我得到了一个损坏的图像图标。

<?php
 if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_FILES['photo'])
        && is_uploaded_file($_FILES['photo']['tmp_name'])
        && $_FILES['photo']['error'] == UPLOAD_ERR_OK) {
            foreach ($_FILES['photo'] as $key => $value) {
                echo "$key : $value<br />";
            }
            if($_FILES['photo']['type'] == 'image/jpeg') {
                $tmp_img = $_FILES['photo']['tmp_name'];
                $image = imagecreatefromjpeg($tmp_img);
                header('Content-Type: image/jpeg');
                imagejpeg($image,NULL);
                imagedestroy($image);
            } else {
                echo "Uploaded file ewas not a jpg image.";
            }
                echo "no photo uploaded.";
              }
}
?>
<form enctype="multipart/form-data" action="book.php" method="post">
<input type="file" name="photo">
<input type="submit" value="upload a doc">
</form>

You can try add die(); 您可以尝试添加die(); after imagedestroy($image); imagedestroy($image); to prevent any other output except image data. 以防止除图像数据外的任何其他输出。 Also change imagejpeg($image,NULL); 同时更改imagejpeg($image,NULL); to imagejpeg($image); imagejpeg($image); .

You cannot access to image direcly with tmp_name . 您不能使用tmp_name直接访问映像。 Firstly you should save the image to the server and after that you can use with imagecreatefromjpeg 首先,您应该将映像保存到服务器,然后可以与imagecreatefromjpeg使用

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_FILES['photo'])
        && is_uploaded_file($_FILES['photo']['tmp_name'])
        && $_FILES['photo']['error'] == UPLOAD_ERR_OK) {
            if($_FILES['photo']['type'] == 'image/jpeg') {
                $tmp_img = $_FILES['photo']['tmp_name'];
                $uniq_name = uniqid().".".explode(".",$tmp_img)[1];
                move_uploaded_file($_FILES['photo']['tmp_name'],$uniq_name);
                $image = imagecreatefromjpeg($uniq_name);
                header('Content-Type: image/jpeg');
                imagejpeg($image);
                imagedestroy($image);
            } else {
                echo "Uploaded file ewas not a jpg image.";
            }
                echo "no photo uploaded.";
              }
}
?>
<form enctype="multipart/form-data" action="book.php" method="post">
<input type="file" name="photo">
<input type="submit" value="upload a doc">
</form>

I think the problem lies with the echo and the output strings after the PHP section (HTML code). 我认为问题出在PHP部分(HTML代码)后的echo和输出字符串。 Remove the foreach loop and output HTML only if it is a new page or if something is wrong. 删除foreach循环并仅在新页面或出现问题时才输出HTML。

<?php
  if($_SERVER['REQUEST_METHOD'] == 'POST') {
    if(isset($_FILES['photo'])
        && is_uploaded_file($_FILES['photo']['tmp_name'])
        && $_FILES['photo']['error'] == UPLOAD_ERR_OK) {
            if($_FILES['photo']['type'] == 'image/jpeg') {
                $tmp_img = $_FILES['photo']['tmp_name'];
                $image = imagecreatefromjpeg($tmp_img);
                header('Content-Type: image/jpeg');
                imagejpeg($image,NULL);
                imagedestroy($image);
                exit; // Add this to stop the program here.
            } else {
                echo "Uploaded file was not a jpg image.";
            }
    } else {
      echo 'No file was sent.';
    }
}
?>
<form enctype="multipart/form-data" action="book.php" method="post">
<input type="file" name="photo">
<input type="submit" value="upload a doc">
</form>

And one other thing, if you code using Notepad, be sure that there are no hidden characters at the beginning of your file. 另外,如果您使用记事本编写代码,请确保文件开头没有隐藏的字符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM