【问题标题】:PHP header, Content type: image not allowing textPHP 标头,内容类型:图像不允许文本
【发布时间】:2011-05-24 18:15:37
【问题描述】:

我有一个设置为字符串的变量 ($output)。

我使用PHP: GD Library 为这个字符串创建一个图像。

特别是 imagestring() 函数,我在使用它时稍作修改:

<?php
// Create a 100*30 image
$im = imagecreate(100, 30);

// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// Write the string at the top left
imagestring($im, 5, 0, 0, $output, $textcolor); #here is my string $output

// Output the image
header('Content-type: image/png');

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

这按预期工作:它将$output 转换为图像。

所以,我的问题是(或至少我的最佳猜测):

header('Content-type: image/png');

这之后不允许我输出任何 html。

所以我读了这个问题,asks if you can use two headers,你不能,但是the accepted answer 推荐,像这样:&lt;img src="my_img.php" /&gt;

这当然没问题,但我不知道这将如何解决我的问题,因为即使我知道这张图片的来源(我不知道 - 所以,那将是我的第一个问题,生成图像的路径是什么*)我不会改变标题存在并且不允许我输出文本的事实。

那么,我将如何处理这个问题?

提前致谢!!


*我想这会解决我的问题,因为我可以在外部文件上执行此操作,并且只需调用图像(但可能不会,因为我必须执行包含,这也将包含标题)如您所见我有点困惑。对不起:)


更新:

所以我看到我的问题令人困惑,所以我将添加更多代码,看看这是否能更清楚地说明我的问题:

<?php

$x = mt_rand(1,5);
$y = mt_rand(1,5);

function add($x, $y) { return $x + $y; }
function subtract($x, $y) { return $x - $y; }
function multiply($x, $y) { return $x * $y; }

$operators = array(
    'add',
    'subtract', 
    'multiply'
    );

$rdno = $operators[array_rand($operators)];

$result = call_user_func_array($rdno, array($x, $y));
session_start();
$_SESSION['res'] = $result;

if ($rdno == "add") {
    $whato = "+";
}elseif ($rdno == "subtract") {
    $whato = "-";
} else {
    $whato = "*";
}
$output = $x . $whato . $y . " = ";
?>
<form name="input" action="check.php" method="post">
<input type="text" name="result" />
<input type="submit" value="Check" />
</form>

我希望 $output 成为图像,所以这让我尝试使用上面的 PHP:GD 脚本,但由于标题的原因,我无法放入同一个文件中。

【问题讨论】:

    标签: php image header gd content-type


    【解决方案1】:

    您需要创建一个单独的 PHP 脚本来提供图像,然后创建一个指向该脚本的 &lt;img&gt; 标记。

    您可以使用图像 URL 中的查询字符串向脚本发送信息。

    【讨论】:

    • 好吧,我想我知道你要去哪里了。
    • +1 - 您想要放置图像的位置需要&lt;img src="yourcurrentscript.php" alt="Some alt text" /&gt;。因为您提供的是 image/png 内容类型,所以它会将脚本返回的任何内容视为图像。
    • @SLaks 问题是我正在动态生成这个$output,所以我看不到如何将它放在另一个文件中,因为该过程将生成变量,我猜是会话将其发送到执行 PHP:GD 的文件,然后获取源代码。这有点令人困惑,我是在解释自己吗?谢谢!!
    • @Akinator:您需要将该代码移动到单独的文件中。您可以在查询字符串中传递它需要的任何信息。
    【解决方案2】:

    莫博说:“风车不是这样工作的!晚安!”

    这意味着您需要了解这一切是如何运作的。这个问题表明你对你的工具有一个基本的误解。 HTML 不能包含图像,它包含指向图像的链接。因此,您的脚本需要通过图像标签从另一个页面包含在内。 (或 CSS)

    不过,这一切都是好事。这意味着该脚本可以具有动态元素,每次调用时都会生成新图像。或者它可以用密码保护您的图像,以便只有登录的用户才能看到它。

    有很多方法可以使用它。一旦你意识到图像就像一个 php 页面,这就会打开新的路线。 PHP 可以输出任何东西。 Word docs、excel、pdf、css,甚至 JS。所有这些都可以用来做很酷的事情。

    只需将图像视为一个单独的页面。你会明白的。它会在您的脑海中点击到位。那些“啊哈”的重要时刻之一。

    【讨论】:

    • 我并不是说我可能不会对一些基本概念感到困惑,但在这种情况下,我认为更多的是表达自己的问题。我知道 html 不能包含图片 :)
    • 所以在你的问题中,带有 my_img.php 的标签。该文件包含您的图像脚本。 a 标签所在的文件就是页面本身。
    • 同意,但我不明白如何链接到它,因为当我必须调用它时,我会“尚未创建”或者所以 O 认为请查看我的更新。
    • 您正在调用的 PHP 脚本将动态创建图像。并且不要将其保存在任何地方。
    【解决方案3】:

    首先是路径。

    From the manual

    imagepng ( 资源 $image [, string $filename [, int $quality [, int $filters ]]] )

    这意味着如果你不给第二个参数(这里就是这种情况),你没有文件的路径,而是文件/图像资源的数据。由于您提供的标头,php 文件将被浏览器理解为 png 文件。

    第二:

    在你的页面(即index.php)中,你可以这样添加

    <img src="myimg.php?output=[...]" />
    

    在你的 php 脚本 myimg.php 你有这样的:

    <?php
    $output = $_GET['output'] // getting your text
    
    // Create a 100*30 image
    $im = imagecreate(100, 30);
    
    // White background and blue text
    $bg = imagecolorallocate($im, 255, 255, 255);
    $textcolor = imagecolorallocate($im, 0, 0, 255);
    
    // Write the string at the top left
    imagestring($im, 5, 0, 0, $output, $textcolor); #here is my string $output
    
    // Output the image
    header('Content-type: image/png');
    
    imagepng($im);
    imagedestroy($im);
    ?>
    

    2 分隔文件。

    【讨论】:

      【解决方案4】:

      您可以使用echo '&lt;img src="data:image/png;base64,'. base64_encode(imagepng($im)) .'" /&gt; 而不是&lt;img src="my_img.php"&gt; 内联发送图像。
      不要设置内容类型标题!您的输出是 text/html,您不必宣布,因为它是大多数服务器设置中的默认设置。

      【讨论】:

        【解决方案5】:

        HTTP 不能那样工作。当您提供图像/png 数据时,就好像您提供的是来自站点的 png 文件,而不是其中包含图像的 html 文件。你想完成什么?

        【讨论】:

          【解决方案6】:

          my_img.php 不是您图像的来源。它是生成该图像的脚本的来源,或者从文件中读取它并直接输出到浏览器中。显然,使用 img src 的方法是最好的,因为您将在浏览器机制后面隐藏所有显示图像字符串的“无聊”实现。

          【讨论】:

            猜你喜欢
            • 2016-06-19
            • 2013-08-21
            • 2018-03-12
            • 1970-01-01
            • 2017-07-22
            • 2022-12-21
            • 2021-04-19
            • 1970-01-01
            • 2012-09-05
            相关资源
            最近更新 更多