Php 无法显示图像,因为它包含错误

Php 无法显示图像,因为它包含错误,php,Php,为什么这个代码不起作用 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> </head> <body> <?php header('Content-type: image/png');

为什么这个代码不起作用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>

        <title></title>
    </head>
    <body>
        <?php
        header('Content-type: image/png');
        $myImage = imagecreate(200, 100);
        $myGray = imagecolorallocate($myImage, 204, 204, 204);
        $myBlack = imagecolorallocate($myImage, 0, 0, 0);
        imageline($myImage, 15, 35, 120, 60, $myBlack);

        imagepng($myImage);
        imagedestroy($myImage);
        ?>
    </body>
</html>

我总是收到错误
图像无法显示,因为它包含错误。
。我已经在php.ini中启用了
php\u gd2.dll
,并且
内存限制也为128M。如果我删除
标题('Content-type:image/png')我没有得到错误,但我也没有看到图像。我所看到的是:-


°PNG��� IHDR���È���D���ùHíH���请注意���Ó33d���中间‰c
x�§“Nf*kÃ)Ãø�§“•5}À)äS†ÚšpJUá”a§?阿尔法2ÔŽw您不得在
标题()之前输出任何内容。只需以
开始您的文档,这就是您所需要的。您不能打印任何其他内容,因为它需要看起来像它自己的文件。您可以调用此image.php并向其传递一个变量,以定义要输出的图像

<?php
    header('Content-type: image/png');
    $myImage = imagecreate(200, 100);
    $myGray = imagecolorallocate($myImage, 204, 204, 204);
    $myBlack = imagecolorallocate($myImage, 0, 0, 0);
    imageline($myImage, 15, 35, 120, 60, $myBlack);

    imagepng($myImage);
    imagedestroy($myImage);
?>

您应该只输出图像。您正在输出一组标记。具体地



然后将图像作为二进制文件。如果您想看到这一点,
wget
从服务器上删除页面,然后尝试在编辑器中打开它。您的代码应该从
开始如果您对输出进行base64编码,您可以直接使用带有



请注意,并非所有浏览器都支持数据URI(猜猜是哪个)。

我将PHP脚本隔离到它自己的文件(
image.PHP
)中,它工作正常:我得到了一个带有黑色斜线的灰色矩形。您的问题是试图将其嵌入到HTML文件中

您需要将PHP放在自己的单独文件中(正如我所做的,将其称为
image.PHP
或更符合您需要的描述),然后创建一个HTML文件,如下所示:

<html>
  <head>
    <title>Document Title</title>
  </head>
  <body>
    <img src="image.php" alt="" />
  </body>
</html>

文件标题

然后,您应该可以获得所需的输出。

在尝试使用PHP从图形API输出Facebook个人资料图片的jpg时, 我注意到,如果PHP文件使用UTF-8编码保存,则返回此错误, 但是如果文件是用ANSI编码保存的-
然后它工作正常。

如果您有这个问题,请尝试删除脚本开头和php标记之间的任何空格字符

> <?php

我也遇到了同样的问题,解决方案是将代码的字符集从UTF-8更改为ansi或viceversa。如果服务器设置为UTF-8,而您的代码为ansi,则这不起作用,如果您的代码为ansi,而服务器也配置为UTF-8。

即使您认为已删除了头()之前的所有文本,您的PHP文件可能包含


这将在编辑器中对您不可见,但您的浏览器将看到它并认为图像已损坏。您需要采取适合编辑器的步骤来删除任何BOM表。

如果您使用
Filezilla
上载网页,请确保选择传输类型为
'Auto/Binary'


传输->传输类型->自动/二进制。

对不起,我不明白。我需要做哪些更改?header()已经是php的第一行了。如果你是说我应该删除
html
head
等等,我也试过了。如果我这样做,我仍然会得到
图像包含错误
@Nitesh,您不必有两个文件。有两个文件更合理、更可靠。在文件开头删除额外的空格为我解决了错误:)好吧,不一定在它自己的文件中。只是输出不应该混合HTML和PNG.interest变量。您能控制web浏览器缓存此图像的方式吗?@Johan此图像不是此方法的外部资源。不会有过期标题之类的东西。这是服务页面上的文本。任何适用于页面的缓存都将应用于图像。谢谢Yuval,这一切都解决了我的问题。php文件的编码!注意PHP错误报告,尤其是5.4以后。错误不会打印在屏幕上,但会在图像中引发错误。请尝试“错误报告(0);”在你代码的顶端,为我工作。
<html>
  <head>
    <title>Document Title</title>
  </head>
  <body>
    <img src="image.php" alt="" />
  </body>
</html>
> <?php