CodeIgniter使用Zip库压缩文件夹后,如何仅保留目标文件夹名解压
解决CodeIgniter Zip库压缩时保留完整路径的问题
这个问题是因为CodeIgniter的read_dir()方法默认会保留完整的文件路径前缀,导致解压后出现一长串绝对路径层级。要实现解压后仅显示pdf_files文件夹及其内容,你只需要调整read_dir()的第二个参数,指定要剥离的路径前缀即可。
具体修改方案
CodeIgniter的read_dir()方法支持第二个参数,用来设置要从文件路径中移除的前缀部分。你只需要传入pdf_files的上级路径,就能让压缩包只保留pdf_files这个目录及其内部内容:
$estructure = "/home/administrator/Downloads/pdf_files/"; // 调用read_dir时,第二个参数传入要剥离的前缀路径 $this->zip->read_dir($estructure, "/home/administrator/Downloads/"); // 建议给archive方法指定完整的文件名,避免生成无名称的压缩包 $this->zip->archive('/var/www/folder_name.zip'); $this->zip->download('folder_name.zip');
另一种替代思路
如果你不想手动拼接前缀路径,也可以通过切换工作目录的方式,用相对路径读取目标文件夹:
// 保存当前工作目录,避免影响后续代码 $current_dir = getcwd(); // 切换到pdf_files的上级目录 chdir("/home/administrator/Downloads/"); // 读取相对路径下的pdf_files文件夹 $this->zip->read_dir("pdf_files/"); // 切回原来的工作目录 chdir($current_dir); $this->zip->archive('/var/www/folder_name.zip'); $this->zip->download('folder_name.zip');
这样处理后,解压压缩包就只会得到pdf_files文件夹,里面包含原来的所有内容,不会出现多余的绝对路径层级了。
内容的提问来源于stack exchange,提问作者jikos
相关产品推荐
相关产品推荐

