Загрузка файлов с сервера php

У меня есть URL, где я сохраняю некоторые проекты из своей работы, это в основном файлы MDB, но некоторые JPG и PDF тоже есть.

Что мне нужно сделать, так это перечислить каждый файл из этого каталога (уже сделано) и дать пользователю возможность его загрузить.

Как это достигается с помощью PHP?

Solutions Collecting From Web of "Загрузка файлов с сервера 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'; } }