Почему этот код не работает?
<!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>
Я всегда получаю ошибку The image cannot be displayed because it contains errors.
, Я уже включил php_gd2.dll
и memory_limit
в php.ini также 128M. Если я удаляю header('Content-type: image/png');
я не получаю ошибку, но я тоже не вижу изображение. Все, что я вижу, это: –
‰PNG IHDR È d ùHíH PLTEÌÌÌ Ó33d MIDATH‰c
£ Àx §” Nf*k²Ã)Ãø §”•5}À)ÅS†ÚšpJUà”a§²¦œ2ÔŽw<špJ‚Q0 †; uTBúŸ IEND®B
,`
Вы не должны выводить ничего перед header (). Просто запустите свой документ с помощью <?php
за которым следует код для отображения изображения. Пропустите теги html. Даже не пишите ни одну строчку перед заголовком ().
Если вы хотите отобразить изображение внутри своего html-документа, вы должны сделать это в двух файлах. Один, назовите его, например, image.php, содержащий только код php, включая заголовок. Второй файл, вызывающий его show.php или show.html, включает в себя HTML-код, который вам нравится, включая <img src="image.php" alt="Your generated image" />
.
Если вы base64 кодируете вывод, вы можете использовать изображение напрямую с помощью схемы URI данных .
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> </head> <body> <?php $myImage = imagecreate(200, 100); $myGray = imagecolorallocate($myImage, 204, 204, 204); $myBlack = imagecolorallocate($myImage, 0, 0, 0); imageline($myImage, 15, 35, 120, 60, $myBlack); ob_start(); imagepng($myImage); printf('<img src="data:image/png;base64,%s"/>', base64_encode(ob_get_clean())); imagedestroy($myImage); ?> </body> </html>
Обратите внимание, что URI данных не поддерживаются всеми браузерами (предположим, что).
Вы должны выводить только изображение. Вы выводите кучу меток. конкретно
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<title></title> </head> <body>
а затем изображение как двоичное. Если вы хотите увидеть это, wget
страницу со своего сервера и попробуйте открыть ее в редакторе. Ваш код должен начинаться с <?php
.
Удаление заголовка избавляется от уведомления клиенту о том, что это изображение, поэтому он попытается распечатать его в виде текста.
Даже если вы считаете, что вы удалили весь текст из заголовка (), ваш PHP-файл может содержать маркер порядка байтов
Это будет незаметно для вас в вашем редакторе, но ваш браузер увидит его и подумает, что изображение повреждено. Чтобы удалить любую спецификацию, вам необходимо выполнить действия, соответствующие вашему редактору.
Это все, что вам нужно. Вы ничего не можете напечатать, потому что он должен выглядеть как собственный файл. Вы можете вызвать этот 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); ?>
Я изолировал PHP-скрипт в своем собственном файле ( image.php
), и он отлично работал: у меня появился серый прямоугольник с черной наклонной строкой. Ваша проблема пытается внедрить это в HTML-файл.
Вам нужен PHP в своем собственном отдельном файле (как и я, назовите его image.php
или чем-то более подробным описанием для ваших нужд), а затем создайте файл HTML следующим образом:
<html> <head> <title>Document Title</title> </head> <body> <img src="image.php" alt="" /> </body> </html>
Тогда вы должны получить желаемый результат.
При попытке вывода jpg профиля профиля Facebook из их графического API с PHP я заметил, что если файл PHP сохраняется с кодировкой UTF-8 – эта ошибка была возвращена, но если файл был сохранен с кодировкой ANSI, тогда он работал нормально.
Если у вас есть эта проблема, попробуйте удалить любой пробел между началом скрипта и тегом php
> <?php
Я провел несколько часов, прежде чем осознал это. И теперь он работает нормально. Это происходит потому, что любой символ в файле изменяет формат png. Это отлично поработало для меня.
У меня была та же проблема, и решение заключалось в том, чтобы изменить кодировку кода с UTF-8 на ansi или наоборот. Если сервер настроен на UTF-8, а ваш код находится в ansi, это не работает, и если ваш код находится в ansi, а сервер также не настроен на UTF-8.
Если вы используете Filezilla
для загрузки своих веб-страниц, убедитесь, что вы выбрали тип передачи как 'Auto/Binary'
.
Transfer -> Тип передачи -> Авто / Двоичный.