如何使用PHP实现的FTP递归删除目录的ftpDeleteDirectory函数?
PHP FTP递归删除函数调用方法
前置依赖说明
你提供的函数依赖全局变量$conn_id作为已生效的FTP连接标识符,调用前必须先完成FTP服务器的连接、登录操作。
完整调用流程
1. 建立FTP连接
// 配置FTP信息 $ftp_server = '你的FTP服务器地址'; $ftp_username = 'FTP登录账号'; $ftp_password = 'FTP登录密码'; // 创建FTP连接 $conn_id = ftp_connect($ftp_server); if (!$conn_id) { die('FTP服务器连接失败'); } // 登录FTP $login_result = ftp_login($conn_id, $ftp_username, $ftp_password); if (!$login_result) { ftp_close($conn_id); die('FTP账号登录失败'); } // 开启被动模式(绝大多数云服务器、虚拟主机的FTP需要开启,否则无法正常读取目录列表) ftp_pasv($conn_id, true);
2. 调用删除函数
// 填入你要删除的目标目录路径,支持FTP根目录相对路径或绝对路径,例如要删除FTP根目录下的test文件夹就填'test' $target_delete_dir = '要删除的目录路径'; // 调用函数并解析返回结果 $delete_result = json_decode(ftpDeleteDirectory($target_delete_dir), true); if ($delete_result) { echo '目录删除成功'; } else { echo '目录删除失败,请检查路径是否存在、账号是否有删除权限'; } // 操作完成后关闭FTP连接 ftp_close($conn_id);
注意事项
- 不要传入空路径,函数内置了空值校验,避免误删FTP根目录下所有内容
- 如果FTP服务器为Windows系统,需要把路径分隔符从
/替换为\ - 原函数未过滤目录列表中的
.和..特殊目录,部分FTP服务器返回列表时会携带这两个值,可能导致递归死循环,建议修改函数内的遍历逻辑:foreach($filelist as $file) { // 新增过滤逻辑 if($file == '.' || $file == '..') continue; ftpDeleteDirectory($directory.'/'.$file); } - 排查错误时可以暂时去掉函数内的
@错误抑制符,查看具体的FTP操作报错信息 - 该函数同时支持单个文件的删除,传入文件路径即可直接调用
内容的提问来源于stack exchange,提问作者emn
相关产品推荐
相关产品推荐

