PHP скрипт для загрузки файлов через сайт со страницы списка, содержащей файлы в указанной папке на сервере - PullRequest
0 голосов
/ 03 июля 2019

Мне нужна опция, чтобы показать другим людям, которые не являются программистами, разнообразие файлов, которые они могли бы загрузить из папки 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);
}
?>

С этим предыдущим кодом имена файлов (из папки) перечислены и показаны как ссылки, но при нажатии на них никаких действий не происходит.

1 Ответ

0 голосов
/ 03 июля 2019

Код

  1. Список файлов
  2. Загрузка файла

должна быть отдельной.


(Хотя это и не обязательно), простой способ - поместить их в отдельные файлы, например list.php и download.php.list.php создаст список ссылок для скачивания, которые будут указывать на 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 и исправил ошибки, из-за которых внутренний путь к файлу «загрузки» был случайно отправлен набраузер)


Аналогичный вопрос: Перечислите и загрузите кликнувший файл с FTP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...