Изображение SRC из PHP-скрипта на IIS - не отображается последовательно - PullRequest
0 голосов
/ 28 июня 2010

На прошлой неделе я преобразовал значения img src своей страницы из указателей на файлы изображений и использовал скрипт PHP для обработки изображений.Основной причиной было использование как файлов, так и больших двоичных объектов базы данных в качестве фактического источника.

Теперь, когда пользователь заходит на страницу, иногда изображения показываются, а иногда нет.Если нет, и страница обновляется \ перезагружается, то появляется изображение.Когда изображения не появляются, иногда это изображение, к которому пользователь уже обращался ранее.

Я в тупике.

Вот тег img:

<img src="../somedir/image_script.php?i=1234">

Файл image_script.php выясняет, где взять изображение, а затем заканчивает с:

header("Content-type: image/jpeg");
if($from_db){
    print $image_blob;
} else {
    $im = imagecreatefromjpeg($image_file);
    imagejpeg($im,null,100);
    imagedestroy($im)
}

Я использую PHP 5.2.8 на IIS 6 с использованием FastCGI.В файле image_script.php и в каталоге, в котором он находится, нет заголовков кэша. В настоящее время 99,9% изображений основаны на файлах, поэтому я не знаю, есть ли разница в результатах между изображениями на основе БД и на основе файлов,Когда я в браузере перехожу непосредственно к файлу image_script.php, он возвращает запрошенное изображение (i = ????) в 100% случаев.

a> Любая подсказка о том, почему попадание и пропуск изображения происходитотображается?и,

b> что было бы правильным способом фактически кэшировать изображения, обслуживаемые сценарием PHP?(они очень статичны)

  • Скотт

1 Ответ

1 голос
/ 28 июня 2010

Хм. Не могу сказать наверняка, но, может быть, у вашего imagecreatefromjpeg иногда не хватает памяти? В этом случае вы бы отправили сообщение об ошибке в виде данных JPEG и никогда его не увидели, верно?

Кстати, не будет ли более эффективным захват файла изображения в виде строки и его выравнивание без прохождения imagecreatefromjpeg / imagejpeg / imagedestroy? Похоже, что вы читаете файл JPEG, создаете из него изображение внутренней памяти PHP, затем преобразуете его в JPEG (с высоким качеством 100%), затем передаете эти данные, когда вы можете просто прочитать данные файла JPEG в и распечатайте его, как вы делаете это из базы данных.

Что произойдет, если вы скажете ...

...
} else {
    header ('Content-length: ' .filesize($image_file));
    readfile ($image_file);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...