从脚本运行时,函数可能需要 ftp_pasv,以将服务器切换到被动模式。
如果您的网络位于防火墙之后,ftp_mlsd 将返回 FALSE,否则会返回。
(PHP 7 >= 7.2.0, PHP 8)
ftp_mlsd — 返回给定目录中的文件列表
成功时返回一个包含指定目录中的文件信息的数组,错误时返回 false
。
版本 | 描述 |
---|---|
8.1.0 | 现在 ftp 参数期望一个 FTP\Connection 实例;以前,期望一个 资源。 |
示例 #1 ftp_mlsd() 示例
<?php
// 设置基本连接
$ftp = ftp_connect($ftp_server);
// 使用用户名和密码登录
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);
// 获取当前目录的内容
$contents = ftp_mlsd($ftp, ".");
// 输出 $contents
var_dump($contents);
?>
上面的示例将输出类似于以下内容
array(5) { [0]=> array(8) { ["name"]=> string(1) "." ["modify"]=> string(14) "20171212154511" ["perm"]=> string(7) "flcdmpe" ["type"]=> string(4) "cdir" ["unique"]=> string(11) "811U5740002" ["UNIX.group"]=> string(2) "33" ["UNIX.mode"]=> string(4) "0755" ["UNIX.owner"]=> string(2) "33" } [1]=> array(8) { ["name"]=> string(2) ".." ["modify"]=> string(14) "20171212154511" ["perm"]=> string(7) "flcdmpe" ["type"]=> string(4) "pdir" ["unique"]=> string(11) "811U5740002" ["UNIX.group"]=> string(2) "33" ["UNIX.mode"]=> string(4) "0755" ["UNIX.owner"]=> string(2) "33" } [2]=> array(8) { ["name"]=> string(11) "public_html" ["modify"]=> string(14) "20171211171525" ["perm"]=> string(7) "flcdmpe" ["type"]=> string(3) "dir" ["unique"]=> string(11) "811U5740525" ["UNIX.group"]=> string(2) "33" ["UNIX.mode"]=> string(4) "0755" ["UNIX.owner"]=> string(2) "33" } [3]=> array(8) { ["name"]=> string(10) "public_ftp" ["modify"]=> string(14) "20171211174536" ["perm"]=> string(7) "flcdmpe" ["type"]=> string(3) "dir" ["unique"]=> string(11) "811U57405EE" ["UNIX.group"]=> string(2) "33" ["UNIX.mode"]=> string(4) "0755" ["UNIX.owner"]=> string(2) "33" } [4]=> array(8) { ["name"]=> string(3) "www" ["modify"]=> string(14) "www" ["perm"]=> string(7) "flcdmpe" ["type"]=> string(3) "dir" ["unique"]=> string(11) "811U5740780" ["UNIX.group"]=> string(2) "33" ["UNIX.mode"]=> string(4) "0755" ["UNIX.owner"]=> string(2) "33" } }
从脚本运行时,函数可能需要 ftp_pasv,以将服务器切换到被动模式。
如果您的网络位于防火墙之后,ftp_mlsd 将返回 FALSE,否则会返回。
我还没有找到这个问题的解决方案;但我注意到 ftp_mlsd 命令一次可以获取的文件数量有限。对我来说,它介于 7,500 到 8,500 个文件之间。在我看来,它有一个最大查询持续时间,你得到的结果取决于文件枚举的速度。
有时有必要设置
ftp_set_option($this->connection_id, FTP_USEPASVADDRESS, false)
在你设置之前
ftp_pasv($this->connection_id, $state)