Примеры как сделать <select>
для выбора загруженных файлов. Из PHP-функций для работы с файловой системой – opendir(), scandir(), glod(), лучше всех подходит scandir()
т.к. сразу возвращает отсортированный массив с именами файлов и директорий.
В примерах используется следующая структура файлов:
uploads/ ├── .htaccess ├── files/ │ ├── images/ │ ├── controls.png │ ├── loader.gif │ ├── ru.html │ ├── Новый текстовый документ.txt ├── index.jpg ├── marker.png ├── menu.png ├── reviews.png ├── robots.txt ├── Фонды.rtf
Самый не сложный вариант выведет список всех файлов в одной директории.
<?php
$path = __DIR__ . '/uploads';
?>
<select name="file" class="form-control">
<option value=""></option>
<?php
foreach(scandir($path) as $obj) {
if ($obj == '.' || $obj == '..') {
continue;
} elseif (!is_dir($path . '/' . $obj)) {
echo '<option value="/' . $obj . '">' . $obj . '</option>';
}
}
?>
</select>
Результат:
<select name="file" class="form-control">
<option value=""></option>
<option value="/.htaccess">.htaccess</option>
<option value="/index.jpg">index.jpg</option>
<option value="/marker.png">marker.png</option>
<option value="/menu.png">menu.png</option>
<option value="/reviews.png">reviews.png</option>
<option value="/robots.txt">robots.txt</option>
<option value="/Фонды.rtf">Фонды.rtf</option>
</select>
Второй вариант с фильтром по расширению файлов (jpg, png, gif):
<?php
$path = __DIR__ . '/uploads';
$filter = array('jpg', 'png', 'gif');
?>
<select name="file" class="form-control">
<option value=""></option>
<?php
foreach(scandir($path) as $obj) {
if ($obj == '.' || $obj == '..') {
continue;
} elseif (!is_dir($path . '/' . $obj)) {
$ext = mb_strtolower(mb_substr(mb_strrchr($obj, '.'), 1));
if (in_array($ext, $filter)) {
echo '<option value="/' . $obj . '">' . $obj . '</option>';
}
}
}
?>
</select>
Для селекта со списком всех файлов, включая подкатегории, понадобится рекурсивная функция.
Вывод названий категорий сделан в заблокированном <option>
т.к. <optgroup>
не может быть вложен друг в друга.
<?php
function tree_options($path, $_livel = 0, $_base = '')
{
if ($_livel == 0) {
$_base = $path;
}
$out = '';
$tab = implode('', array_fill(0, $_livel, ' '));
$objs = scandir($path);
foreach($objs as $obj) {
if ($obj == '.' || $obj == '..') {
continue;
} elseif (is_dir($path . '/' . $obj)) {
$out .= '<option disabled>' . $tab . $obj .'</option>';
$out .= tree_options($path . '/' . $obj, ++$_livel, $_base);
} else {
$out .= '<option value="' . str_replace($_base, '', $path . '/' . $obj) . '">' . $tab . $obj . '</option>';
}
}
return $out;
}
?>
<select name="file" class="form-control">
<option value=""></option>
<?php echo tree_options(__DIR__ . '/uploads'); ?>
</select>
Результат:
<select name="file" class="form-control">
<option value=""></option>
<option value="/.htaccess">.htaccess</option>
<option disabled>files</option>
<option disabled> images</option>
<option value="/files/images/controls.png"> controls.png</option>
<option value="/files/images/loader.gif"> loader.gif</option>
<option value="/files/ru.html"> ru.html</option>
<option value="/files/Новый текстовый документ.txt"> Новый текстовый документ.txt</option>
<option value="/index.jpg">index.jpg</option>
<option value="/marker.png">marker.png</option>
<option value="/menu.png">menu.png</option>
<option value="/reviews.png">reviews.png</option>
<option value="/robots.txt">robots.txt</option>
<option value="/Фонды.rtf">Фонды.rtf</option>
</select>
С фильтром
<?php
function tree_options($path, $filter, $_livel = 0, $_base = '')
{
if ($_livel == 0) {
$_base = $path;
}
$out = '';
$tab = implode('', array_fill(0, $_livel, ' '));
$objs = scandir($path);
foreach($objs as $obj) {
if ($obj == '.' || $obj == '..') {
continue;
} elseif (is_dir($path . '/' . $obj)) {
$out .= '<option disabled>' . $tab . $obj .'</option>';
$out .= tree_options($path . '/' . $obj, $filter, ++$_livel, $_base);
} else {
$ext = mb_strtolower(mb_substr(mb_strrchr($obj, '.'), 1));
if (in_array($ext, $filter)) {
$out .= '<option value="' . str_replace($_base, '', $path . '/' . $obj) . '">' . $tab . $obj . '</option>';
}
}
}
return $out;
}
?>
<select name="file" class="form-control">
<option value=""></option>
<?php echo tree_options(__DIR__ . '/uploads', array('jpg', 'png', 'gif')); ?>
</select>
Результат:
В целях безопасности не стоит выводить полные пути файлов на сервере, а так-же нужно проверять поступившие данные из форм.