Я пытаюсь отобразить изображение с сервера PHP.
Вот моя функция:
function get_file($path) {
$fileToGet = $GLOBALS['homedir'].$path;
//echo $fileToGet.PHP_EOL;
if (file_exists($fileToGet)) {
//echo 'file exists';
header('Content-Type: image/png');
header('Content-Length: '.filesize($fileToGet));
echo file_get_contents($file);
}
}
Я использую браузер или почтальона, и изображение недействительно.
Чего мне не хватает?
Я немного отредактировал вашу функцию:
function get_file( $path ){
$fileToGet = $GLOBALS['homedir'];
if( substr( $fileToGet, -1) != '/' ){
// add trailing slash if needed
$fileToGet .= '/';
}
$fileToGet .= $path;
if (file_exists($fileToGet)) {
header('Content-Type: image/png');
header('Content-Length: '.filesize($fileToGet));
echo file_get_contents($fileToGet);
}
}
Просто подсказка безопасности: если $path
приходит от пользователя может быть проблема, потому что он сможет получить доступ к другому файлу.
Подумайте об этом коде:
get_file( $_GET['path'] );
тогда пользователь может вызвать этот URL
yoursite/yourpage.php?path=../../../mypreciousimage.png
Вы не выводите содержимое файла, который вы читаете:
file_get_contents($file);
Вам нужно будет повторить это:
echo file_get_contents($file);
Или же:
readfile($file);
Вы, вероятно, также хотите добавить exit;
до конца этой функции, чтобы гарантировать, что никакой другой код не выполняется и никакие другие выходные данные не отправляются.
Пытаться
print file_get_contents($file);
Вместо
file_get_contents($file);