У меня есть URL, где я сохраняю некоторые проекты из своей работы, это в основном файлы MDB, но некоторые JPG и PDF тоже есть.
Что мне нужно сделать, так это перечислить каждый файл из этого каталога (уже сделано) и дать пользователю возможность его загрузить.
Как это достигается с помощью PHP?
Чтобы прочитать содержимое каталога, вы можете использовать readdir () и использовать скрипт в моем примере download.php
для загрузки файлов
if ($handle = opendir('/path/to/your/dir/')) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { echo "<a href='download.php?file=".$entry."'>".$entry."</a>\n"; } } closedir($handle); }
В файле download.php
вы можете заставить браузер отправлять данные загрузки и использовать basename (), чтобы убедиться, что клиент не передает другое имя файла, например ../config.php
$file = basename($_GET['file']); $file = '/path/to/your/dir/'.$file; if(!$file){ // file does not exist die('file not found'); } else { header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=$file"); header("Content-Type: application/zip"); header("Content-Transfer-Encoding: binary"); // read the file from disk readfile($file); }
Если папка доступна из браузера (не за пределами корня документа вашего веб-сервера), вам просто нужно выводить ссылки на локации этих файлов. Если они находятся за пределами корневого каталога документа, вам понадобятся ссылки, кнопки и т. Д., Которые указывают на PHP-скрипт, который обрабатывает файлы из своего местоположения и потоковой передачи в ответ.
Вот более простое решение, чтобы перечислить все файлы в каталоге и загрузить его.
В вашем файле index.php
<?php $dir = "./"; $allFiles = scandir($dir); $files = array_diff($allFiles, array('.', '..')); // To remove . and .. foreach($files as $file){ echo "<a href='download.php?file=".$file."'>".$file."</a><br>"; }
Функция scandir () перечисляет все файлы и каталоги внутри указанного пути. Он работает как с PHP 5, так и с PHP 7.
Теперь в файле download.php
<?php $filename = basename($_GET['file']); // Specify file path. $path = ''; // '/uplods/' $download_file = $path.$filename; if(!empty($filename)){ // Check file is exists on given path. if(file_exists($download_file)) { header('Content-Disposition: attachment; filename=' . $filename); readfile($download_file); exit; } else { echo 'File does not exists on given path'; } }