PHP-код, используемый для перечисления файлов и каталогов.
$buff = ftp_nlist($conn_id,$dir );
$ buff – это массив файлов и каталогов.
Есть ли способ получить 2 отдельных массива, 1 содержит только файлы и другие только каталоги.
Вы можете пройти через массив и проверить, что элемент является каталогом, используя функцию типа
function ftp_is_dir($conn_id, $dir) { if (ftp_chdir($conn_id, $dir)) { ftp_chdir($conn_id, '..'); return true; } else { return false; } }
РЕДАКТИРОВАТЬ:
Другая возможность
<?php function is_ftp_dir($file, $conn_id){ if(ftp_size($conn_id, $file) == '-1'){ return true; }else{ return false; } } ?>
Обратите внимание, что не каждый ftp-сервер поддерживает ftp_size ().
Из документации :
directory
Каталог, который будет указан. Этот параметр также может содержать аргументы , например. ftp_nlist ($ conn_id, "-la / your / dir"); Обратите внимание, что этот параметр не экранирован, поэтому могут возникнуть проблемы с именами файлов, содержащими пробелы и другие символы.
Поэтому дважды выполните ftp_nlist
: после предоставления аргументов, которые дают вам только файлы, а затем предоставляют аргументы, которые дают вам только каталоги. Это будет опираться на систему, в которой находятся сайты FTP-сервера .
В качестве альтернативы вы можете использовать это более подробное решение, которое использует ftp_chdir
, или тот, который использует ftp_size
.
Вы пробовали ftp_rawlist()
? Эта функция возвращает массив, содержащий строки, такие как:
06-21-11 01:49PM <DIR> 01 06-21-11 02:20PM <DIR> 02 06-21-11 03:33AM 456 default.html 06-21-11 04:59PM 123 robots.txt
Или:
drwxr-xr-x 12 ftp ftp 4096 Mar 25 1999 ACS drwxr-xr-x 14 ftp ftp 4096 Mar 18 2001 ATHENA drwxr-xr-x 2 ftp ftp 4096 Jul 10 1998 XNeXT drwxr-xr-x 3 ftp ftp 4096 Jul 10 1998 elib drwxrwxr-x 349 ftp ftp 98304 Jul 02 06:30 gnu drwxr-xr-x 3 ftp ftp 4096 Jul 10 1998 lpf -rw-r--r-- 1 ftp ftp 3448992 Oct 16 2003 ls-lR drwxr-xr-x 2 ftp ftp 4096 Jul 10 1998 palladium drwxr-xr-x 2 ftp ftp 4096 Jul 10 1998 palladium2 drwxr-xr-x 2 ftp ftp 4096 Jul 10 1998 virus
С этого момента вы можете использовать ftp_systype()
чтобы определить, как интерпретировать вышеуказанные ответы.
Или используйте эвристику, например, в Windows каталоги будут содержать строку <DIR>
где, как и в Linux, вы должны найти каждый каталог, начинающийся с d
за которым следует что-то вроде rwxrwxrwx
.
Можно сопоставить файлы, которые вам нужны. Если вы можете полагаться на файлы с расширениями и каталогами без «.» в, вы можете получить все имена файлов, а просто так:
$filenames = ftp_nlist( $conn_id, '*.*' );