Вопрос:
Мне нужна опция, чтобы показать другим людям, которые не являются программистами, разнообразие файлов, которые они могут загрузить из папки FTP-сервера (я использую WinSCP)
Теперь проблема с кодом заключается в том, что если вы напишите одно конкретное имя файла в сценарии PHP, вы можете скачать его без проблем. Но мне нужно, чтобы они загрузили (что работает нормально), а также чтобы они могли (в другой раз или кто-то еще) выбирать из предыдущих загруженных файлов и загружать тот конкретный, который они выбрали.
Таким образом, нам нужно открыть папку, показать все файлы, а затем выбрать один из этих файлов и загрузить его.
Кто-нибудь знает, как это решить или это вообще возможно?
<?php //uploads is the folder name at the ftp server if ($handle = opendir(‘uploads/’)) { while (false !== ($entry = readdir($handle))) { // if ($entry != «.» && $entry != «..») { //download.php is the file where we write the code echo «<a href=’download.php?file=».$entry.»‘>».$entry.»</a>n»; } } closedir($handle);// } // we are trying to get the files by listing it with .$file variable $file = basename($_GET[‘file’]); $file = ‘uploads/’.$file; //here we are $mimi = $file; if(!mimi_exists($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); } ?>
В этом предыдущем коде имена файлов (из папки) перечислены и показаны в виде ссылок, но мы не нажимаем на них.
Лучший ответ:
Код, который
- Списки файлов
- Скачивает файл
должен быть отдельным.
(Хотя это и не обязательно), проще всего поместить их в отдельные файлы, такие как list.php и download.php. list.php сгенерирует список ссылок для скачивания, которые будут opendir на download.php (что вы уже делаете в opendir… closedir):
if ($handle = opendir(‘uploads/’)) { while (false !== ($entry = readdir($handle))) { // if ($entry != «.» && $entry != «..») { //download.php is the file where we write the code echo «<a href=’download.php?file=».$entry.»‘>».$entry.»</a>n»; } } closedir($handle);// }
Файл download.php будет содержать остальную часть вашего кода:
// we are trying to get the files by listing it with .$file variable $file = basename($_GET[‘file’]); $filepath = ‘uploads/’.$file; if(!file_exists($filepath)){ // 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($filepath); }
(Я заменил ваши странные mimi_exists на file_exists и file_exists проблемы, связанные с тем, что внутренний путь загрузки файла был случайно отправлен в браузер)
Аналогичный вопрос: список и загрузка кликаемого файла с FTP.
Ответ №1
Спасибо, это сработало, но теперь проблема в том, что когда мы загружаем файл, он автоматически добавляет uploads_ к имени, например uploads_filename.txt, что препятствует нормальному открытию файла. Он меняет формат, поэтому его нельзя открыть. (это также для .png,.pdf или любого другого формата)