PHP пишет PNGs, постоянная проблема в IE8 - PullRequest
0 голосов
/ 12 ноября 2010

Если я позвоню: http://localhost/info/imgfeed.php?img=deer.png в адресной строке IE, то отображается нормально.

Если я свяжу URL-адреса в файле HTML следующим образом:

<img src="imgfeed.php?img=dove.png" alt="" height="" width="" />
<img src="imgfeed.php?img=dolphin.png" alt="" height="" width="" />
<img src="imgfeed.php?img=deer.png" alt="" height="" width="" />

Тогда он с треском проваливается в IE, но отлично работает в других браузерах (проверено Chrome / FF в новейших стабильных выпусках). Мой код PHP выглядит следующим образом (почти дословно скопировано из руководства по PHP):

<?php
$server = $_SERVER['DOCUMENT_ROOT'];
$path = basename(dirname(__FILE__));
write_img($server.'/'.$path.'/'.$_GET["img"]);

function write_img($filename) {
  $size = getimagesize($filename);
  if ($size && $fp) {
    header("Content-type: {$size['mime']}");
    header("Cache-Control: no-cache");
    header("Expires: -1");
    readfile($filename);
    exit;
  } else {
    // error
  }
}
?>

Любые идеи относительно того, что происходит, будут высоко оценены, я попробовал ряд трюков с заголовками, а также с .htaccess (создание файла PHP в виде PNG), но ни одно из этого не имеет никакого влияния на рендеринг в IE, который в конечном итоге показывает только 3 маленьких точки (которые можно сохранить как untitled.bmp).

Обновление проблема решена благодаря Meagar (уберите ширину / высоту из HTML и все хорошо). Обновленный пример обновлен, чтобы отразить совет Марка Б относительно fpassthru vs readfile.

Ответы [ 3 ]

3 голосов
/ 12 ноября 2010

Вы пытались опустить атрибуты width и height для тега <img>? Код на стороне сервера почти наверняка хорош; IE, вероятно, интерпретирует width="" как width="0" и отображает крошечные точки, которые вы упомянули.

1 голос
/ 12 ноября 2010

Вы можете попробовать добавить еще несколько заголовков, которые иногда исправляют проблемы с IE:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

Но, как говорит Мигар, IE6 не любит пустые атрибуты ширины и высоты и всегда требует значения в нем.

0 голосов
/ 12 ноября 2010

пытались ли вы использовать

imagepng($output);

для рендеринга изображения?

также может помочь использовать

ob_clean();
flush();

перед fpassthru ($ fp);очистить буфер перед рендерингом.

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