Возвращая тег <img>
, вы в основном дублируете тег <img>
в атрибут src
тега <img>
, который фактически выглядит так:
<img src="<img src="data:image/jpeg;base64">">
В вашем сценарии showImage
нет причин кодировать что-либо в base64, это нужно только тогда, когда вы используете текстовый транспорт, например HTML. Поскольку вы передаете через HTTP, который поддерживает двоичный код, вы можете просто отправить файл. Есть несколько способов, но самый простой:
echo file_get_contents($image);
exit;
Другой вариант, который немного более эффективен для больших файлов:
readfile($image);
exit;
Если вы хотите получить немного более интересный , вы также можете вывести MIME для файла:
header('Content-Type: ' . mime_content_type($image));
readfile($image);
exit;
edit
Я также должен указать, что передача имен файлов в качестве параметров без очистки и проверки является большой проблема безопасности, которая может привести к проблемам с обходом пути . Как минимум, я бы назвал basename()
по предоставленному параметру, но вам, вероятно, следует посмотреть в свои настройки c, чтобы увидеть, что может или не может go неправильно.