我正在尝试使用 PHP 在 SFTP 服务器上查找特定文件。文件列表非常大,因此我希望使用通配符过滤结果,而不是迭代每个文件(如果可能的话)。
当我使用 psftp 甚至默认的 Windows 命令行 sftp 命令时,我可以使用类似
ls prefix_*.txt
或其他内容来过滤结果,并且返回的文件如预期的那样,通过我使用的文件掩码进行过滤。
但是,phpseclib3\Net\SFTP 似乎没有
ls
命令,只有 nlist
和 rawlist
。两者都提供了排序选项,但似乎不适用于通配符。
我也尝试过这个,认为 SSH 命令也许可以工作:
$sftp->exec('ls');
,但服务器退出并显示“此服务仅允许 sftp 连接。”
所以我的问题是这在 PHP 中是否可能,或者我需要接受每次我想要过滤它们时都必须循环遍历所有返回的文件。如果是这样,其他工具中的
ls
命令如何工作?过滤是否在 psftp 和 windows sftp 应用程序中本地处理(即它们仍然需要在幕后检索完整的目录列表)?
sftp
和psftp
中的过滤是在本地完成的。在SFTP协议中,没有API可以在服务器端进行过滤。
phpseclib 没有实现本地过滤。你确实必须自己做。