2014-12-12 2 views
0

У меня есть следующий PHP-код, который подключается к FTP-серверу и проходит через каждый элемент в каталоге в виде файла. Проблема в том, что некоторые из этих элементов являются каталогами, и я хотел бы иметь возможность различать каталоги и файлы. Если это каталог, файл значка должен быть изменен.PHP - Идентификация каталогов и файлов в FTP

Любые идеи, как я могу это достичь?

Благодаря

$icon = "<img src=\"/icons/file.png\" border="\0\">"; 

$conn = ftp_connect($ftp_server); 
$login = ftp_login($conn, $ftp_username, $ftp_password); 
$files = ftp_nlist($conn, "."); 
ftp_close($conn); 

foreach ($files as $file) { 
    echo $icon." - ".$file."<br />"; 
} 
+2

в противном случае этот комментарий на php.net может помочь -> http://php.net/manual/en/function.ftp-nlist.php#54307 –

+2

Это каталог, если вы можете 'ftp_chdir()' в него , Другого способа определить эту серверную сторону нет. См. Дубликат. – CodeCaster

ответ

0

Эта функция просто возвращает string array.

Вы можете использовать функцию ftp_rawlist. Documnetation

В этом вы можете получить тип, как показано ниже:

$children = ftp_rawlist($connetion, $directory); 

foreach ($children as $child) { 
    $chunks = preg_split("/\s+/", $child); 
    $type=($chunks[0]{0} === 'd' ? 'directory' : 'file'); 
    $name=implode(' ', array_splice($chunks, 0, 8)); 
    //do whatever you want with $name & $type || if($type=='file') echo $icon." - ".$name."<br />"; 
} 

второй вариант: И как упомянуто в вопросе комментарий, который вы можете вызвать функцию ftp_chdir к ftp_server. link_for_this_method | Но запрашивать FTP-сервер каждый раз для всего списка потребуется время.

+0

Спасибо. Но чтобы получить имя файла, мне пришлось изменить ($ chunks, 0, 8), чтобы прочитать 0, 9, а затем повторить имя, которое мне нужно было сделать $ name [8]. Это верно? – John

+0

'ftp_rawlist()' возвращает список каталогов в формате, определенном сервером. Вам нужно разобрать это по-разному на каждую версию FTP-сервера. – CodeCaster

+0

@John Неправильно, это даст вам правильный результат, если имя файла не имеет пробела по имени. Вот почему вам нужно сохранить все элементы массива после 8-го индекса. затем присоедините их к 'implode'. См. Отредактированный ответ. См. Следующий комментарий для ответа на CodeCaster, если хотите. –

Смежные вопросы