Поврежденное изображение с readfile и file_get_contents

#php #image #file-get-contents #readfile

#php #изображение #file-get-contents #readfile

Вопрос:

Я пытаюсь использовать функцию, чтобы заставить это работать:

 <img src='login.php?image=ind_legend.jpg'>
  

Но я не могу пройти через функцию для размещения изображения. Я вернулся на пару шагов назад и попробовал только эту часть кода:

 <?php
$file = "http://localhost/sales/test.jpg";
header('Content-type: image/jpeg');
readfile($file);
?>
  

или с помощью этой функции:

 echo file_get_contents($source);
  

но факт в том, что единственное, что я получаю, это поврежденный крест изображения (IE) или ничего в Firefox.

Я был бы признателен за любые предложения

Заранее спасибо

Ответ №1:

используйте ob_clean() функцию php перед readfile()

Комментарии:

1. Это способ обойти проблему, фактическое решение проблемы находится в принятом anwser.

Ответ №2:

У вас, безусловно, есть некоторые пробелы в вашем PHP-скрипте или UTF-8 BOM невидимый перед вашим <?php маркером открытия. Используйте шестнадцатеричный редактор, чтобы выяснить.

Для дальнейшей отладки откройте URL изображения http://localhost/login.php?image=ind_legend.jpg сохраните файл непосредственно в вашем браузере. А затем сравните его с исходным JPEG.

Ответ №3:

Как упоминалось ранее, у вас, вероятно, есть некоторые пробелы. Я бы попробовал заменить весь файл приведенным ниже кодом. Удаление закрывающей инструкции php устраняет любую вероятность наличия дополнительных пробелов:

 <?php
$file = "http://localhost/sales/test.jpg";
header('Content-type: image/jpeg');
readfile($file);
  

Ответ №4:

прежде всего укажите вашему браузеру на http://youraddress/login.php?image=ind_legend.jpg и проверьте результат.

Возможно, файл /sales/test.jpg поврежден или вы не включили http: // оболочку для readline

Наконец, сохраните поврежденное изображение с помощью опции контекстного меню «Сохранить изображение как …» вашего браузера по выбору и попробуйте открыть его с помощью текстового редактора. Я не удивлюсь, если вы обнаружите сообщение об ошибке (если они у вас включены).