Файл PNG не является допустимой ошибкой при чтении пути из БД, но работает, если путь жестко закодирован - PullRequest
1 голос
/ 02 апреля 2012

Я запускаю PHP 5.2 в Ubuntu с Apache 2.

Когда я хочу передать файл PNG из файла PHP, который жестко закодирован (с использованием $imgname), я могу добиться успеха. Однако, если я изменю $imgname на $imgdbname, браузер завершит работу с ошибкой и скажет, что это недопустимый файл PNG.

$imgname = "cachepics/c3s9taopkp.png";
$imgdbname = readfromdb();

header("Content-type: image/png");
print file_get_contents($imgname);

Однако, если я прокомментирую строку header("Content-type: image/png");, браузер покажет весь текст PNG-мусора в обоих случаях. Поэтому я уверен, что экземпляр PHP может получить доступ к этому файлу, прочитав путь из БД.

Выход

print "-".$imgname."-".$imgdbname."-";

кажется точно таким же.

-cachepics/c3s9taopkp.png-cachepics/c3s9taopkp.png-

Я сойду с ума и не знаю, почему не работает версия db.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Возможно, проблема в том, что readfromdb имеет ошибки и генерирует предупреждения, распечатывая эти предупреждения в STDIO, добавляя мусор к получающемуся изображению или прерывая любой более поздний заголовок (например, тип содержимого).Возможно, вы могли бы проверить журнал ошибок сервера для этого (любое предупреждение о стиле 'заголовок не может быть добавлено, потому что уже напечатано в файле ..'), или проверить, если оба получающихся файла имеют одинаковый размер.

0 голосов
/ 02 апреля 2012

Я не знаю причину возникновения этой проблемы, но, пожалуйста, используйте readfile для непосредственного вывода содержимого файла на PHP.

...