PHP, IIS Изображение не отображается в браузере - PullRequest
0 голосов
/ 23 января 2010

Следующий код не отображает изображение из IIS 6 / PHP 5.2.9. Работает нормально с XAMPP (PHP 5.3)

$img = @imagecreate(200, 200);
$background_color = imagecolorallocate($img, 0, 0, 0);
$text_color = imagecolorallocate($img, 233, 14, 91);
imagestring($img, 12, 60, 90,  'image here', $text_color);
header('Last-Modified: ' . date('D, d M Y H:i:s')); 
header('Content-type: image/jpg');
header('Content-Disposition: inline; filename=blank_jpeg.jpg'); 
ob_start();
    imagejpeg($img);
    imagedestroy($img);
    $jpeg = ob_get_contents();
ob_end_clean();
header ('Content-length: ' . strlen($jpeg));
echo $jpeg;
exit;

Ответы [ 2 ]

0 голосов
/ 25 января 2010

Я наконец отследил ошибку до ее корней. Этот код был в плагине, работающем на Wordpress. Сейчас в сообществе Wordpress есть методика, используемая для включения симпатичных URL-адресов в системах на основе IIS, которые не имеют подходящего способа обработки mod_rewrite. Техника включает в себя захват 404 ошибок, вызванных симпатичными URL-адресами, и перенаправление страницы через index.php.

Оказывается, что где-то по пути некоторые 3 символа ( & iuml; , " и & iquest; ) вставляются в выходной поток перед любыми другими вывод страницы. Это не проблема для html-страниц, поскольку символы невидимы, а браузер просто игнорирует их. Однако в случае изображений формат двоичных данных имеет решающее значение. Поэтому вставка этих трех символов перед данными изображения приводит к неузнаваемой последовательности байтов, которая отклоняется браузером, поскольку она ожидает изображение.

Решение в моем конкретном случае состояло в том, чтобы включить обработку mod_rewrite, и проблема исчезла. Я надеюсь, что эта информация сэкономит кому-то часы отладки.

0 голосов
/ 23 января 2010

Скорее всего, GD неправильно установлен для IIS.

Включите протоколирование ошибок , укажите журнал ошибок и проверьте его на наличие ошибок при вызове сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...