Как отображать изображения из папки с помощью php – PHP

Было бы здорово, если бы кто-то помог мне понять, почему браузер не может загрузить изображения (ошибка 404). Код работает, и источник изображения правильный, но я не могу понять, что не так. (с использованием localhost)

$dir = '/home/user/Pictures'; $file_display = array( 'jpg', 'jpeg', 'png', 'gif' ); if (file_exists($dir) == false) { echo 'Directory \'', $dir, '\' not found!'; } else { $dir_contents = scandir($dir); foreach ($dir_contents as $file) { $file_type = strtolower(end(explode('.', $file))); if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true) { echo '<img src="', $dir, '/', $file, '" alt="', $file, '" />'; } } } 

Вы сделали ошибку в заявлении ниже. Используйте. не,

 echo '<img src="', $dir, '/', $file, '" alt="', $file, $ 

в

 echo '<img src="'. $dir. '/'. $file. '" alt="'. $file. $ 

а также

 echo 'Directory \'', $dir, '\' not found!'; 

в

 echo 'Directory \''. $dir. '\' not found!'; 

Вот возможное решение решения № 3 по моим комментариям к ответу Блюбилла:

 yourscript.php ======================== <?php $dir = '/home/user/Pictures'; $file_display = array('jpg', 'jpeg', 'png', 'gif'); if (file_exists($dir) == false) { echo 'Directory "', $dir, '" not found!'; } else { $dir_contents = scandir($dir); foreach ($dir_contents as $file) { $file_type = strtolower(end(explode('.', $file))); if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true) { $name = basename($file); echo "<img src='img.php?name={$name}' />"; } } } ?> img.php ======================== <?php $name = $_GET['name']; $mimes = array ( 'jpg' => 'image/jpg', 'jpeg' => 'image/jpg', 'gif' => 'image/gif', 'png' => 'image/png' ); $ext = strtolower(end(explode('.', $name))); $file = '/home/users/Pictures/'.$name; header('content-type: '. $mimes[$ext]); header('content-disposition: inline; filename="'.$name.'";'); readfile($file); ?> 

У вас есть два способа сделать это:

МЕТОД 1. Безопасный путь.

Поместите изображения на / www / htdocs /

 <?php $www_root = 'http://localhost/images'; $dir = '/var/www/images'; $file_display = array('jpg', 'jpeg', 'png', 'gif'); if ( file_exists( $dir ) == false ) { echo 'Directory \'', $dir, '\' not found!'; } else { $dir_contents = scandir( $dir ); foreach ( $dir_contents as $file ) { $file_type = strtolower( end( explode('.', $file ) ) ); if ( ($file !== '.') && ($file !== '..') && (in_array( $file_type, $file_display)) ) { echo '<img src="', $www_root, '/', $file, '" alt="', $file, '"/>'; break; } } } ?> 

МЕТОД 2. Небезопасный, но более гибкий.

Поместите изображения в любой каталог (у apache должно быть разрешение на чтение файла).

 <?php $dir = '/home/user/Pictures'; $file_display = array('jpg', 'jpeg', 'png', 'gif'); if ( file_exists( $dir ) == false ) { echo 'Directory \'', $dir, '\' not found!'; } else { $dir_contents = scandir( $dir ); foreach ( $dir_contents as $file ) { $file_type = strtolower( end( explode('.', $file ) ) ); if ( ($file !== '.') && ($file !== '..') && (in_array( $file_type, $file_display)) ) { echo '<img src="file_viewer.php?file=', base64_encode($dir . '/' . $file), '" alt="', $file, '"/>'; break; } } } ?> 

И создайте другой скрипт для чтения файла изображения.

 <?php $filename = base64_decode($_GET['file']); // Check the folder location to avoid exploit if (dirname($filename) == '/home/user/Pictures') echo file_get_contents($filename); ?>