Отдельные файлы и каталоги в PHP

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

$buff = ftp_nlist($conn_id,$dir ); 

$ buff – это массив файлов и каталогов.

Есть ли способ получить 2 отдельных массива, 1 содержит только файлы и другие только каталоги.

Solutions Collecting From Web of "Отдельные файлы и каталоги в PHP"

Вы можете пройти через массив и проверить, что элемент является каталогом, используя функцию типа

 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, '*.*' );