За последние 24 часа нас посетили 24123 программиста и 1677 роботов. Сейчас ищут 1724 программиста ...

Помогите (Вывод файлов для скачивания на сайт из FTP)

Тема в разделе "PHP для новичков", создана пользователем FANYPLAY, 17 мар 2020.

Метки:
  1. FANYPLAY

    FANYPLAY Новичок

    С нами с:
    17 мар 2020
    Сообщения:
    3
    Симпатии:
    0
    Помогите пожалуйста, нашёл код для своей нужды, он не работает ни на какой из версий php
    Пытался решить проблему сам но безуспешно
    Код:

    PHP:
    1. <?php
    2. // Данные
    3. $ftphost    = 'Айпи';                // Адрес FTP сервера
    4. $ftpport    = 'Порт';                        // Порт FTP серверар
    5. $ftpuser    = 'Имя';                    // Пользователь FTP
    6. $ftppasswd    = 'Пароль';                // Его пароль
    7.  
    8. // Папка, которую нужно выводить
    9. $folder        = '/212.22.93.37_50230/Servers/SRVGame/Rocket/Logs';
    10.  
    11. // Первые буквы файлов, которые можно выводить
    12. $prepend    = array(
    13.     'Rocket',
    14.     'R',
    15. );
    16.  
    17. // Запрещенные файлы (файлы, в которых имеются такие буквы)
    18. $denyed        = array(
    19.     'vipasdads',
    20.     'txtasdad',
    21. );
    22.  
    23. // Отключим ошибки =)
    24. ini_set('display_errors', 1);
    25.  
    26. /**
    27. * Системный класс приложения
    28. * @package Скрипт вывода файлов с FTP
    29. * @author Урих Александр <urichalex@mail.ru>
    30. * @link http://craft-soft.ru Команда разработчиков CraftSoft
    31. */
    32.  
    33. class System {
    34.    
    35.     private $ftphost;
    36.     private $ftpport;
    37.     private $ftpuser;
    38.     private $ftppasswd;
    39.     private $logfolder;
    40.     private $res;
    41.  
    42.     /**
    43.      * Параметры для подключения к FTP
    44.      * @param string $ftphost Адрес FTP
    45.      * @param string $ftpuser Логин пользователя FTP
    46.      * @param string $ftppasswd Пароль
    47.      * @param string $ftpport Порт
    48.      * @param string $logfolder Папка, из которой брать файлы
    49.      */
    50.     public function __construct($ftphost, $ftpuser, $ftppasswd, $ftpport, $logfolder) {
    51.         $this->ftphost = $ftphost;
    52.         $this->ftpuser = $ftpuser;
    53.         $this->ftppasswd = $ftppasswd;
    54.         $this->ftpport = $ftpport;
    55.         $this->logfolder = $logfolder;
    56.        
    57.         $this->res = ftp_connect($this->ftphost, $this->ftpport);
    58.         $login = ftp_login($this->res, $this->ftpuser, $this->ftppasswd);
    59.        
    60.         if(!$this->res || !$login)
    61.         {
    62.             $this->res = FALSE;
    63.         }
    64.         ftp_chdir($this->res, $this->logfolder);
    65.     }
    66.    
    67.     public function __destruct()
    68.     {
    69.         ftp_close($this->res);
    70.     }
    71.    
    72.     /**
    73.      * Получение списка файлов
    74.      * @param string $allowed Разрешенные префиксы
    75.      * @return array Список файлов массивом
    76.      */
    77.     public function getFiles($prepend, $denyed)
    78.     {
    79.         // Получим список файлов с FTP
    80.         $files = $this->listFiles();
    81.        
    82.         // Если файлы есть, возвращаем их
    83.         if($files !== FALSE)
    84.         {
    85.             $return = array();
    86.             foreach($files as $file)
    87.             {
    88.                 $file = basename($file);
    89.                 if($this->check($file, $prepend, TRUE) || $this->check($file, $denyed)) continue;
    90.                 $return[] = $file;
    91.             }
    92.         }
    93.         return $return;
    94.     }
    95.    
    96.     /**
    97.      * Получение файла на скачивание
    98.      * @param string $file Им файла
    99.      */
    100.     public function getFile($file)
    101.     {
    102.         $content = file_get_contents(
    103.             'ftp://'.$this->ftpuser.':'.$this->ftppasswd.'@'.$this->ftphost.'/'.$this->logfolder.'/'.$file
    104.         );
    105.        
    106.         if(!$content)
    107.             return FALSE;
    108.  
    109.         $this->sendFile($file, $content, 'application/download');
    110.     }
    111.    
    112.     private function check($string, $pattern, $prepend = FALSE)
    113.     {
    114.         if(empty($pattern))
    115.             return FALSE;
    116.         if($prepend)
    117.         {
    118.             foreach($pattern as $p)
    119.             {
    120.                 $pr = substr($string, 0, strlen($p));
    121.                 if($pr === $p)
    122.                     return FALSE;
    123.             }
    124.             return TRUE;
    125.         }
    126.        
    127.         else
    128.         {
    129.             foreach($pattern as $p)
    130.             {
    131.                 if(strpos($string, $p) !== FALSE)
    132.                     return TRUE;
    133.             }
    134.         }
    135.         return FALSE;
    136.     }
    137.  
    138.     /**
    139.      * Получение списка файлов с FTP
    140.      * @return array Массив с фафлами
    141.      */
    142.     private function listFiles()
    143.     {
    144.         return ftp_nlist($this->res, '.');
    145.     }
    146.    
    147.     /**
    148.      * Отдает файл по содержимому
    149.      * @param type $fileName Имя файла
    150.      * @param type $content Содержимое файла
    151.      * @param type $mimeType MINE тип файла
    152.      */
    153.     private function sendFile($fileName,$content,$mimeType='text/plain')
    154.     {
    155.         $fileSize=(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content));
    156.         $contentStart=0;
    157.         $contentEnd=$fileSize-1;
    158.  
    159.         $length=$contentEnd-$contentStart+1;
    160.         header('HTTP/1.1 200 OK');
    161.         header('Pragma: public');
    162.         header('Expires: 0');
    163.         header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    164.         header("Content-Type: $mimeType");
    165.         header('Content-Length: '.$length);
    166.         header("Content-Disposition: attachment; filename=\"$fileName\"");
    167.         header('Content-Transfer-Encoding: binary');
    168.         $content=function_exists('mb_substr') ? mb_substr($content,$contentStart,$length) : substr($content,$contentStart,$length);
    169.  
    170.         echo $content;
    171.         exit();
    172.     }
    173. }
    174.  
    175.  
    176. $data = new System($ftphost, $ftpuser, $ftppasswd, $ftpport, $folder);
    177.  
    178. if(isset($_GET['file']))
    179.     $data->getFile($_GET['file']);
    180.  
    181. ?>
    182. <!DOCTYPE html>
    183. <html lang="ru">
    184.     <head>
    185.         <meta charset="utf-8" />
    186.         <title>Скачать файлы</title>
    187.         <style type="text/css">
    188.             table {
    189.                 width: 100%
    190.             }
    191.             td {
    192.                 padding: 7px;
    193.                 border: 1px solid #c1c1c1
    194.             }
    195.             .container {
    196.                 width: 500px;
    197.                 margin: 20px auto 0 auto;
    198.             }
    199.         </style>
    200.     </head>
    201.     <body>
    202.         <div class="container">
    203.             <h3>Скачать файлы</h3>
    204.             <table>
    205.                 <?php foreach($data->getFiles($prepend, $denyed) as $file):?>
    206.                 <tr>
    207.                     <td>
    208.                         <a href="?file=<?php echo $file?>"><?php echo $file?></a>
    209.                     </td>
    210.                 </tr>
    211.                 <?php endforeach;?>
    212.             </table>  
    213.         </div>
    214.     </body>
    215. </html>
    Вот вся страница с кодом php
    Ошибка:

    Notice: Undefined variable: return in /hlds/web/sites/7db/fc1/s334/root/htdocs/membrii/logs/index.php on line 94

    Warning: Invalid argument supplied for foreach() in /hlds/web/sites/7db/fc1/s334/root/htdocs/membrii/logs/index.php on line 206


    Ссылка - http://logs.fanyplay.ru/membrii/logs/

    Очень прошу, помгоите!
     
  2. FANYPLAY

    FANYPLAY Новичок

    С нами с:
    17 мар 2020
    Сообщения:
    3
    Симпатии:
    0
    Айпи порт имя и пароль я ввёл правильно
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    750
    Адрес:
    Татарстан
    Реально - такая папка есть на сервере?

    и у вас не ошибки а предупреждения
    в первом случае - не объявленная переменная - так как список похоже пуст,
    во втором - попытка перебрать массив - который пуст из-за первого случая

    а по ссылке совсем другие предупреждения, в том числе - что пользователь не смог залогинится....
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    Судя по коду, эта ошибка означает, что вызов на строке 81 вернул false. Надо в $return бы на такой случай записывать пустой массив.
     
  5. FANYPLAY

    FANYPLAY Новичок

    С нами с:
    17 мар 2020
    Сообщения:
    3
    Симпатии:
    0
    upload_2020-3-19_0-12-18.png

    Папка есть и файлы тоже
    --- Добавлено ---
    Я отключил скрипт из-за того что он долго грузил сайт, а отключил таким способом)
    --- Добавлено ---
    Я пока только изучаю web часть, и до php не дошёл пока. Так что половину большую не понимаю. Сайт нужен для себя и модераторов.
     

    Вложения: