Как отобразить изображения в браузере, используя PHP и файлы из папки?

Как можно организовать папку с изображениями в корне вашего сайта так, чтобы изображения из нее отображались в окне браузера?
  • 2 июля 2024 г. 3:02
Ответы на вопрос 3
Для того чтобы отобразить изображения с помощью PHP, вам нужно создать файл PHP, который будет сканировать папку с изображениями и выводить их на страницу. 

Пример кода для такого файла PHP:

```php
<?php
$dir = "images/"; // путь к папке с изображениями
$files = scandir($dir); // сканируем папку

foreach($files as $file) {
    if(pathinfo($file, PATHINFO_EXTENSION) == "jpg" || pathinfo($file, PATHINFO_EXTENSION) == "png") {
        echo "<img src='$dir/$file' />";
    }
}
?>
```

Создайте папку "images" в корне вашего сайта и поместите в нее изображения. Затем создайте файл PHP с вышеприведенным кодом и разместите его также в корне сайта.

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

После этого откройте страницу со своим файлом PHP в браузере и изображения из папки "images" должны быть отображены на странице.
Не понятно причем тут php, но у apache есть режим отображения содержимого каталога как html, в виде списка файлов в табличном виде (имя, размер, дата модификации...), и имя файла будет ссылкой на этот файл, если кликнуть на файлы изображений или любых других файлов, типы которых зарегистрированы в браузере - они будут отображены внутри, иначе будет диалог загрузки файла. 
<Directory /var/www/html>
        Options +Indexes
        AllowOverride None
        Require all granted
    </Directory>

тут +Indexes делает именно это - генерацию html

p.s. если же нужно на php генерировать список файлов по своей логике то добавляешь поддержку php в apache (модуль mod_php или php-fpm) и index.php:
foreach (scandir('.') as $file)
{
    if ($file == '.' || $file == '..') continue;
    echo '<a href="' . htmlspecialchars($file) . '">' . htmlspecialchars($file) . '</a> - ' . filesize($file) . '<br>';
}
Я хочу вынести ее из публичной папки.
Зачем? Есть какая-то особенная необходимость? По логике все файлы сайта должны находиться в одной папке проекта, а файлы видимые из веба в публичной папке проекта. В некоторых случаях, например когда эти файлы не должны отдаваться без какого-то уровня доступа, их выносят выше публичной папки, таким образом закрывая от прямого доступа из веб. Далее доступ осуществляется через пхп, конкретная реализация сильно зависит от задач и имеющегося кода/фреймворка. Простейший вариант - имя файла читается как параметр из урл, далее делается readfile() из этой папки с файлами, предварительно отдаются заголовки, указывающие что это файл изображения. Хотя без понимания "зачем" реализация "как" это тыканье пальцем в небо. Может вам симлинк тупо подойдет...

В идеале - в любое место на диске, которое захочу.
Так делать не нужно. Это во первых нарушает безопасность, так как вы даете права на чтение из веба в папку, которая не должна быть доступной левым пользователям, во вторых распыляет проект по машине, что тоже не есть хорошо как минимум в плане организации.
Похожие вопросы