如何通过PHP FTP搜索文件名以awesome_开头的文件?
在PHP FTP中搜索以awesome_开头的文件
嘿,我来帮你搞定这个FTP文件搜索的问题!既然你已经成功用ftp_connect()建立了连接,那接下来我们只需要几步就能筛选出以awesome_开头的文件啦:
步骤1:切换到目标目录
首先得确保我们在public_html/folder/这个目标目录下,用ftp_chdir()函数就能轻松实现:
// 假设你已经有了$ftp_conn这个连接资源 $targetDir = 'public_html/folder/'; if (!ftp_chdir($ftp_conn, $targetDir)) { die("无法切换到目标目录: $targetDir"); }
步骤2:获取目录内所有条目
用ftp_nlist()函数可以获取当前目录下的所有文件和子目录,它会返回一个包含所有条目名称的数组:
$allEntries = ftp_nlist($ftp_conn, ".");
步骤3:筛选符合条件的文件
接下来我们遍历这个数组,先排除掉子目录(通过ftp_size()判断,目录的大小会返回-1),然后检查文件名是否以awesome_开头:
$awesomeFiles = []; foreach ($allEntries as $entry) { // 确认当前条目是文件而非目录 if (ftp_size($ftp_conn, $entry) != -1) { // PHP 8及以上版本可以用str_starts_with直接判断 if (str_starts_with($entry, 'awesome_')) { $awesomeFiles[] = $entry; } // 如果你用的是PHP 8以下版本,改用substr判断: // if (substr($entry, 0, 8) === 'awesome_') { // $awesomeFiles[] = $entry; // } } }
完整示例代码
把所有步骤整合起来,就是一个可以直接运行的完整脚本啦:
// 建立FTP连接(你已经实现这部分,这里做完整参考) $ftp_server = "你的FTP服务器地址"; $ftp_user = "你的FTP用户名"; $ftp_pass = "你的FTP密码"; // 初始化连接 $ftp_conn = ftp_connect($ftp_server) or die("无法连接到FTP服务器"); $loginSuccess = ftp_login($ftp_conn, $ftp_user, $ftp_pass); // 检查连接和登录状态 if (!$ftp_conn || !$loginSuccess) { die("FTP连接或登录失败,请检查账号信息"); } // 目标目录 $targetDir = 'public_html/folder/'; // 切换到目标目录 if (!ftp_chdir($ftp_conn, $targetDir)) { die("无法访问目标目录: $targetDir,请检查路径或权限"); } // 获取目录下所有条目 $allEntries = ftp_nlist($ftp_conn, "."); // 筛选符合条件的文件 $awesomeFiles = []; foreach ($allEntries as $entry) { if (ftp_size($ftp_conn, $entry) != -1) { // 根据你的PHP版本选择判断方式 if (str_starts_with($entry, 'awesome_')) { $awesomeFiles[] = $entry; } } } // 输出结果 echo "找到的以awesome_开头的文件:<br>"; foreach ($awesomeFiles as $file) { echo "- " . $file . "<br>"; } // 记得关闭FTP连接 ftp_close($ftp_conn);
一些小提示
- 确保你的FTP账号拥有读取目标目录的权限,否则
ftp_nlist()会返回空数组或者报错。 - 如果目标目录里有大量文件,这个遍历筛选的方式可能会有点慢,但对于大多数日常场景来说完全够用。
ftp_nlist()返回的条目名称一般是当前目录下的文件名,不会包含完整路径,如果你需要完整路径,可以自己拼接目标目录和文件名。
内容的提问来源于stack exchange,提问作者user9387976
相关产品推荐
相关产品推荐

