2010-01-23 3 views
0

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

$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; 

ответ

0

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

Включите error logging, specify an error log и проверьте его на наличие ошибок при вызове сценария.

+0

на IE7, он фактически выводит jibberish, содержащий «СОЗДАТЕЛЬ: Г.Д.-JPEG v1.0 (с использованием V62 IJG JPEG)», поэтому я думаю, что GD работает – KalenGi

+0

Включение протоколирования ошибок показал много не-GD ошибки что должно вызывать нечетное поведение. – KalenGi

0

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

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

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

Смежные вопросы