Изображение не может быть отображено, потому что оно содержит ошибки (нужна помощь !!!)

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

header('Content-type: image/jpeg');
$email= '[email protected]';
$email_length=strlen($email);
$font_size= 4;
$image_height= imagefontheight($font_size);
$image_width = imagefontwidth($font_size)*$email_length;
$image=imagecreate($image_width, $image_height);
imagecolorallocate($image,255,255,255);
$font_color= imagecolorallocate($image,0,0,0);
imagestring($image,$font_size, 0, 0, $email, $font_color);
imagejpeg($image);

0

Решение

Сообщение «Изображение не может быть отображено, потому что оно содержит ошибки» производится браузером. В заголовке ответа, полученного с сервера, говорится, что тело ответа следует интерпретировать как изображение JPEG (image/jpeg).

Формат файлов JPEG (как и большинства двоичных форматов) начинается с заголовка, который содержит «подпись» (последовательность байтов, используемых для идентификации файла как JPEG), информацию об изображении (ширина, высота), длина содержимого и т. Д.

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

Как отладить это

Удалить / прокомментировать header() Выровняйте или замените его временно:

header('Content-type: text/plain');

Это изменение перестанет указывать браузеру интерпретировать контент как изображение; он будет отображаться как есть, и вы можете просмотреть его и просмотреть предупреждения и уведомления PHP, если таковые имеются.

После того, как вы найдете и решите проблемы и код больше не выдает сообщений об ошибках, поставьте оригинал header линия назад, и это должно работать.

Другая возможная причина: спецификация

Если описанное выше изменение не выявило какого-либо сообщения, созданного кодом, и браузер все еще жалуется на ошибки в полученном контенте, убедитесь, что файл PHP НЕ сохранен как UTF-8 с BOM. UTF-8 в порядке, проблема в спецификации.

BOM (метка порядка байтов) — это последовательность байтов, которая записывается в самом начале файла, чтобы программы, которые его читают, знали, как символы кодируются в этом файле. Это жизненно важно для кодировки UTF-16, но совершенно бесполезно для UTF-8. Тем не менее, многие текстовые редакторы помещают его в файлы, и некоторые из них имеют возможность пропустить его.

Спецификация кодирует специальный символ пробела, который не виден и не занимает места. Он не может быть обнаружен визуальным осмотром сценария PHP или его вывода. Кроме того, нет способа обработать его из кода PHP, потому что, если он есть, он сохраняется в файле PHP перед открывающим тегом. <?php и интерпретатор PHP отправляет его в браузер вместе со всем, что находится за пределами тегов открытия и закрытия PHP.

Как это решить

Проверьте настройки своего редактора кода и снимите флажок с опции использования спецификации при сохранении файла (или отметьте параметр с надписью «пропустить спецификацию»).

Если в отношении спецификации нет настроек, измените кодировку на ISO-8859-1 (также известен как ISO-latin1). Эта кодировка не использует спецификацию и идентична UTF-8 для всех символов ASCII (цифр, строчных и прописных букв без акцентов или диакритических знаков, знаков пунктуации, скобок, математических операторов, прямых кавычек и других специальных символов, используемых в программе языки).

Изменение кодировки никак не повлияет на код, ставящий вопрос.

1

Другие решения

Убедитесь, что библиотека GD установлена

if (extension_loaded('gd') && function_exists('gd_info')) {
echo "PHP GD library is installed on your web server";
}
else {
echo "PHP GD library is NOT installed on your web server";
}
0

По вопросам рекламы [email protected]