php - 使用 PHP 检查 FTP 条目是文件还是文件夹

标签 php ftp

我正在编写用于连接到 FTP 的脚本,然后下载内容。

现在我的问题是检测每个项目是文件夹还是文件。 我的第一个想法是尝试使用 ftp_chdir,但这需要我使用 @ 来抑制错误,我不想这样做(我不希望抑制错误,但更愿意正确处理它们)。

还有其他方法可以检查我的项目是文件还是文件夹吗?

最佳答案

尝试 ftp_chdir 的坏处不是需要抑制错误。没关系,只要您有合理的理由预计会出现错误。这是更改目录的副作用。

如果我选择那个方向,我会尝试 ftp_size相反,因为它没有任何副作用。它应该对目录失败,对文件成功。


理想的解决方案是使用返回可靠的机器可读目录列表的 MLSD FTP 命令。但是 PHP 仅从 7.2 开始支持它的 ftp_mlsd function .检查 "type" 条目的 dir 值。

或者,ftp_rawlist命令的用户评论中有一个MLSD的实现:
https://www.php.net/manual/en/function.ftp-rawlist.php#101071

在采用这种方法之前,首先检查您的 FTP 服务器是否支持 MLSD,因为并非所有 FTP 服务器都支持(特别是 IIS and vsftpd don't)。


或者,如果你连接到一个特定的服务器,那么你知道它的目录列表格式,你可以使用 ftp_rawlist ,并解析其输出以确定条目是文件还是文件夹。

*nix 服务器上的典型 list 如下:

drwxr-x---   3 vincent  vincent      4096 Jul 12 12:16 public_ftp
drwxr-x---  15 vincent  vincent      4096 Nov  3 21:31 public_html
-rwxrwxrwx   1 vincent  vincent        11 Jul 12 12:16 file.txt

它是前导的 d 告诉您条目是否是目录。


您可能很幸运,在您的特定情况下,您可以通过文件名从目录中区分文件(即所有文件都有扩展名,而子目录没有)。

关于php - 使用 PHP 检查 FTP 条目是文件还是文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799181/

相关文章:

php ftp 检查文件夹是否存在总是返回错误创建文件夹

php - OpenSSL 启用但不工作

.net - 找不到类型[WinSCP.EnumerateOptions]

php - 在数据库中定义数组

php - 为什么 $_SERVER ['REQUEST_METHOD' ] 总是 GET?

php - jQuery 自动完成从 mysql 数据库获取提要

python - 访问 ftp 服务器中的文件

php - 具有分层邻接模型 MySql 和 PHP 的缩进 HTML <select> 下拉列表

php - 无法将 laravel 7 升级到 laravel 8

vb.net - 服务器上的 FTPWebRequest.GetResponse 超时,而不是本地调试上的超时