Добрый день всем. Хочу получить массив имен файлов с путями с ftp ресурса (/folder1/folder2/file.txt). Написал код (он ниже). Но проблема в том, что ftp имеет довольно разветвленную систему файлов и папок и уже на 3-м уровне вложенности вылетает тайм аут. Возможно ли как-то этого избежать? ПС с set_time_limit игрался, не помогает Код: PHP: // Устанавливаем время исполнения скрипта 120 с set_time_limit(520); // Пытаемся установить соединение с FTP-сервером $ftp = ftp_connect($ftp_server, $ftp_port, 300); // $ftp = ftp_ssl_connect($ftp_server); if(!$ftp) puterror("К сожалению, не удаётся установить соединение с FTP-сервером $ftp_server"); // Осуществляем регистрацию на сервере $login = ftp_login($ftp, $ftp_user, $ftp_password); //$login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); if(!$login) puterror("К сожалению, не удаётся зарегистрироваться на сервере"); //Объявляем 2 массива для папок и файлов $files = $folders = array(); //старт сканирования для полученияданных корнеовй директории $start = ftp_mlsd($ftp, "."); // print_r(ftp_mlsd($ftp, $start[8]['name'])); //Выбераем стартовую директорию $startFolder = $start[8]['name']; //инициируем генератор $ddd = selectDir($ftp, $startFolder); //генератор, выдает массив с типом ресурса (папка или файл) и его названием function selectDir($ftp, $dir){ $data = ftp_mlsd($ftp, $dir); foreach ($data as $value) { yield array('Type' => $value['Type'], 'name' => $value['name']); } } //цикл для разбора данных генератора по массивам files и folders foreach ($ddd as $value) { if($value['Type'] == 'dir'){ array_push($folders, "/".$startFolder."/".$value['name'] . "/"); } else if($value['Type'] == 'file') array_push($files, "/".$value['name']); } //count - глубина сканирования папок (на сколько папок проваливаться вглубь) $count = 2; for ($i= 1; $i <= $count; $i++) { //в цикле формируется стек с именами папок (folders) и именами с путями файлов (files) // Устанавливаем время исполнения скрипта 120 с set_time_limit(520); foreach ($folders as $value) { $data = selectDir($ftp, $value); foreach ($data as $subvalue) { if($subvalue['Type'] == 'dir'){ array_push($folders, $value . $subvalue['name'] . "/"); // array_push($folders, $value . $subvalue['name'] . "/"); } else if($subvalue['Type'] == 'file') array_push($files, $value . $subvalue['name']); } array_shift($folders); } } print_r($folders); print_r($files);
set_time_limit(0); - без ограничений, и устанавливается один раз в начале скрипта обход папок и файлов лучше всего сделать рекурсивно + возможно нужно покрутить сам ftp чтоб стал отзывчив