Я являюсь абсолютным новичком в отношении 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
После выполнения отладочных предложений я понял, что функция imagecreatefrompng()
не удалось открыть поток. Это заставило меня осознать очевидную ошибку, которая заключается в том, что функция была предназначена для добавления некоторого текста в уже существующий PNG файл. Это было указано в источнике (если бы я потратил время, чтобы на самом деле прочитать все), так как
эту "текстовую" строку и накладывает ее поверх базового изображения, которое в данном случае является "images/button1.png" и выводит результирующее изображение
Поэтому я создал images/button1.png
(фактически из Интернета), снова включил header()
и на этот раз он сработал.
Спасибо за комментарии, они помогли мне узнать о некоторых инструментах отладки для PHP.
header('Content-type...');
в файле button.php, а затем откройте его прямо в браузере, там должна отображаться ошибка, препятствующая отображению изображения. Если нет, попробуйте добавитьerror_reporting(E_ALL); ini_set('display_errors', 1);
в начале файла, чтобы увидеть ошибки.