Заголовок PHP, Тип содержимого: изображение не допускает текст - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть переменная ($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 после этого.

Итак, я прочитал этот вопрос, который спрашивает, можете ли вы использовать два заголовка , которые вы не можете, но принятый ответ рекомендует, что-то вроде этого: <img src="my_img.php" />

Это, конечно, было бы хорошо, за исключением того, что я не знаю, как это решило бы мои проблемы с тех пор, даже если бы я знал источник этого изображения (, который я не знаю - так, это было бы моим первый вопрос, каков путь к сгенерированному изображению *) Я бы не изменил тот факт, что заголовок есть и не позволяет выводить текст.

Итак, как бы вы подошли к этому вопросу?

Заранее спасибо !!


* Я думаю, это решило бы мои проблемы, так как я мог бы сделать это с внешним файлом, и просто вызвать изображение (но, возможно, нет, так как мне нужно было бы включить, и это также включило бы заголовок), как вы видите Я немного смущен. Извините:)


UPDATE:

Итак, я вижу, что мой вопрос сбивает с толку, поэтому я добавлю еще немного кода, чтобы посмотреть, не прояснит ли это мою проблему немного больше:

<?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, описанный выше, но я не могу поместить его в тот же файл из-за заголовка.

Ответы [ 6 ]

3 голосов
/ 13 декабря 2010

Морбо говорит: «Ветряные мельницы так не работают! Спокойной ночи!»

Это означает, что вам нужно понять, как все это работает.Эта проблема указывает на то, что вы неправильно понимаете свои инструменты.HTML не может содержать изображения, он содержит ссылки на изображения.Таким образом, ваш скрипт должен быть включен с другой страницы с помощью тега изображения.(или CSS)

Однако все это хорошо.Это означает, что этот скрипт может иметь динамические элементы, которые создают новый образ при каждом его вызове.Или что он может защитить ваши изображения паролем, так что только зарегистрированные пользователи могут видеть его.

Существует множество способов использовать это.И как только вы поймете, что изображение похоже на страницу php, это открывает новые маршруты.Php может выводить что угодно.Word документы, Excel, PDF, CSS, даже JS.все это можно использовать для создания классных вещей.

Просто представьте себе изображение как отдельную страницу.Вы получите это.Это просто встанет на место в вашем уме.Один из тех больших «ага» моментов.

3 голосов
/ 13 декабря 2010

Вам необходимо создать отдельный скрипт PHP, который обслуживает изображение, а затем сделать тег <img>, который указывает на этот скрипт.

Вы можете отправить информацию в скрипт, используя строку запроса в URL-адресе изображения.

1 голос
/ 13 декабря 2010

Вы можете отправить изображение в строке с echo '<img src="data:image/png;base64,'. base64_encode(imagepng($im)) .'" /> вместо <img src="my_img.php">.
Не устанавливайте заголовок типа содержимого!Ваш вывод будет text / html, что вам не нужно объявлять, так как он используется по умолчанию в большинстве настроек сервера.

1 голос
/ 13 декабря 2010

Во-первых, путь.

Из руководства :

imagepng (ресурс $ image [, строка $ filename [, int $ quality [,int $ filters]]])

Это означает, что если вы не дадите второй аргумент (это так), у вас будет не путь к файлу, а данныефайл / изображение ресурса.Файл php будет понимать как файл png браузером благодаря заголовку, который вы даете.

Второй:

На вашей странице (т. Е. index.php ), вы можете добавить это вот так

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

и в вашем php-скрипте myimg.php у вас это будет выглядеть так:2 разделяет файлы.

0 голосов
/ 13 декабря 2010

my_img.php не является источником вашего изображения.Это источник сценария, генерирующего это изображение или считывающего его из файла и выводящего непосредственно в браузер.Очевидно, что подход с img src будет лучшим, потому что вы скроете всю «скучную» реализацию отображения строки изображения за механизмами браузера.

0 голосов
/ 13 декабря 2010

HTTP не работает таким образом. Когда вы передаете данные изображения / PNG, это как если бы вы обслуживали файл PNG с сайта, а не HTML-файл с изображением в нем. Что вы пытаетесь достичь?

...