PHP GD: не отображать изображение

1

Я являюсь абсолютным новичком в отношении PHP, но я пытался работать с отображением GD/изображений PHP, чтобы сделать некоторые графики.

Я попытался включить <?php echo "<p>Hello, Word!</p>"?> В файл HTML, и это сработало без проблем. Затем я попробовал пример отсюда и скопировал в button.php,

<?php

header("Content-type: image/png");
$string = $_GET['text'];
$im     = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);

?>

Затем я сделал test_button.html как

<html>

<head>
  <title>Testing button.php</title>
</head>

<body>

<p>It should be between here...</p>

<p align="center">
  <img src="button.php?text=text">
</p>

<p> ... and here</p>

</body>

</html>

И когда я открыл файл в своем браузере, я получил сломанный символ изображения. Если я попытаюсь получить файл php, у меня есть сообщение

Изображение http://.../button.php? Text = text невозможно отобразить, поскольку оно содержит ошибки.

Я попробовал это на малине pi с php5, apache и т.д. На сервере с LAMP. Или даже на моем ноутбуке. Все запускают Debian.

На малине pi я попробовал phpinfo() и получил, что GD включен. Libpng также.

Я просмотрел здесь или на другом сайте, но ни одна из подобных ошибок не относится ко мне. В файле PHP я сделал там, что перед <?php не было пробела/пробела и ни после ?>.

Я уверен, что мне не хватает базового шага. Но я не могу понять, что случилось. В другом подобном тесте без header() (закомментировано) я получил кучу символов.

Как это было раньше, я попытался проверить, не добавил ли vim некоторые странные символы из-за кодировок, я тестировал и получил

$ file -i button.php 
button.php: text/x-php; charset=us-ascii

и открывается другим редактором. Но нет, ничего там еще нет.

Может ли кто-нибудь указать мне на (возможно очевидную) ошибку, которую я делаю?


Редактировать из первых комментариев, комментируя header(...), удаляя трейлинг ?> И добавляя error_reporting(E_ALL); ini_set('display_errors', 1); error_reporting(E_ALL); ini_set('display_errors', 1);

Когда я получаю текст button.php? Text = text, я получаю

Warning: imagecreatefrompng(images/button1.png): failed to open stream: No such file or directory in /var/www/therm/button.php on line 6
Warning: imagecolorallocate() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 7
Warning: imagesx() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 8
Warning: imagestring() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 9
Warning: imagepng() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 10
Warning: imagedestroy() expects parameter 1 to be resource, boolean given in /var/www/therm/button.php on line 11
  • 2
    Если вы закомментируете header('Content-type...'); в файле button.php, а затем откройте его прямо в браузере, там должна отображаться ошибка, препятствующая отображению изображения. Если нет, попробуйте добавить error_reporting(E_ALL); ini_set('display_errors', 1); в начале файла, чтобы увидеть ошибки.
  • 0
    @drew010 drew010 именно то, что я думал,
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

После выполнения отладочных предложений я понял, что функция imagecreatefrompng() не удалось открыть поток. Это заставило меня осознать очевидную ошибку, которая заключается в том, что функция была предназначена для добавления некоторого текста в уже существующий PNG файл. Это было указано в источнике (если бы я потратил время, чтобы на самом деле прочитать все), так как

эту "текстовую" строку и накладывает ее поверх базового изображения, которое в данном случае является "images/button1.png" и выводит результирующее изображение

Поэтому я создал images/button1.png (фактически из Интернета), снова включил header() и на этот раз он сработал.

Спасибо за комментарии, они помогли мне узнать о некоторых инструментах отладки для PHP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню