Я хочу распечатать список файлов и только файлы с FTP-сервера, вот что я смог выполнить.
<?php $ftp_server = "my ftp server"; $conn_id = ftp_connect($ftp_server); $ftp_user_name = "ftp username"; $ftp_user_pass = "ftp password"; $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); $contents = ftp_nlist($conn_id, '/'); for ($i = 0 ; $i < count($contents) ; $i++) echo "<li>" . substr($contents[$i],1) . "</li>"; ftp_close($conn_id); ?>
но это печатает имена файлов и папок. Как я могу просто распечатать имена файлов (файлы могут не иметь расширений!)
Опции:
1) вы можете использовать ftp_rawlist
вместо ftp_nlist
чтобы получить полный список для каталога file /, который должен указывать, является ли это каталогом. Однако формат этого списка будет зависеть от операционной системы ftp-сервера. Например, в системе unix / linux исходный список может выглядеть примерно так:
drwxrwxr-x 3 jm72 jm72 4096 Nov 2 16:39 myDir -rw-rw-r-- 1 jm72 jm72 257 Nov 2 16:39 myFile
где «d» в первом столбце скажет вам, что это каталог. Не уверен, как это будет выглядеть на сервере Windows.
2) для каждого возвращаемого имени файла, попробуйте записать его в CD. Если это возможно, это каталог!
if (ftp_chdir($conn_id, substr($contents[$i],1)) { //it's a directory, don't include it in your list ftp_cdup($conn_id) //don't forget to go back up to the directory you started in! }
Вот сценарий, который сделает это за вас, любезно предоставленный плакат на ftp_nlist (PHP Docs) :
<?php //identify directories function ftp_is_dir($dir) { global $ftp_connect; if (@ftp_chdir($ftp_connect, $dir)) { ftp_chdir($ftp_connect, '..'); return true; } else { return false; } } $ftp_nlist = ftp_nlist($ftp_connect, "."); //alphabetical sorting sort($ftp_nlist); foreach ($ftp_nlist as $v) { //1. ftp_is_dir() is true => directory if (ftp_is_dir($v)) { //output as [ directory ] echo "[ " . $v . " ]<br />\n"; } } foreach ($ftp_nlist as $v) { //2. ftp_is_dir() is false => file if (!ftp_is_dir($v)) { //output as file echo "" . $v . "<br />\n"; } } ?>
если вы используете ftp_rawlist так:
$rawfiles = ftp_rawlist($conn, true); //true being for recursive foreach ($rawfiles as $rawfile) { $info = preg_split("/[\s]+/", $rawfile, 9); if($info[0]{0} == 'd') { //Directory }else { //File $size = byteconvert($info[4]); $chmod = chmodnum($info[0]); $date = strtotime($info[6] . ' ' . $info[5] . ' ' . $info[7]); } }
Вы должны приблизиться к своей цели.
Вы также можете использовать ftp_mdtm()
. Это всегда возвращает ошибку (-1), когда она терпит неудачу, что указывает на каталог, поскольку эта функция не работает для каталогов. Одно из предостережений заключается в том, что оно не работает на некоторых системах (в руководстве не указаны какие), поэтому вам нужно будет проверить, работало ли оно в первую очередь.
Если вы находитесь на одном сервере, вы можете:
$contents = ftp_nlist($conn_id, '/'); // set the path to the folder $path = '/home/user/public_html/my_folder/'; foreach ( $contents as $item ) { if ( is_file( $path . $item ) ) { echo $item . PHP_EOL; } else { continue; } }
Для удаленного сервера вы можете проверить, существует ли файл с другими методами .