Symfony3使用TwigExcelBundle导出Excel时ZipArchive类加载失败求助
嘿,咱们一步步来搞定这个问题。你碰到的ZipArchive错误直接和缺失PHP zip扩展有关,而依赖版本不匹配的问题又挡住了安装扩展的路。下面先讲怎么修复这个依赖问题,再给你推荐几个Symfony3下靠谱的Excel导出替代工具:
一、修复php7.0-zip扩展的依赖冲突
你遇到的是Ubuntu 16.04上dotdeb源包版本不兼容的典型问题,按以下步骤尝试解决:
先修复系统依赖链
按照系统提示,先执行强制修复命令,让APT自动理顺已有的依赖关系:sudo apt-get -f install这个命令会自动安装缺失的依赖包,或者调整已安装包的版本,确保系统依赖处于正常状态。
更新源并重新尝试安装扩展
修复完基础依赖后,先更新软件源列表,再安装php7.0-zip:sudo apt-get update sudo apt-get install php7.0-zip如果还是提示
libzip2无法安装,那是因为默认源里没有这个包,你可以添加Ubuntu 16.04的backports源来获取:sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse" sudo apt-get update sudo apt-get install libzip2安装好
libzip2后,再重新执行apt-get install php7.0-zip应该就能成功了。验证扩展是否生效
安装完成后,重启你的Web服务器(比如Apache或Nginx),然后通过命令行确认扩展是否加载:php -m | grep zip如果输出
zip,说明扩展已经成功加载,此时再用TwigExcelBundle导出Excel应该就正常了。
二、如果依赖问题难以解决,推荐这些替代工具
要是上面的方法还是搞不定,或者你想换个更省心、维护更活跃的工具,这几个Symfony3兼容的Excel导出方案值得试试:
PhpSpreadsheet(PHPExcel的官方继任者)
PHPExcel已经停止维护,PhpSpreadsheet是它的官方替代项目,由PHPOffice团队开发,支持XLSX、XLS、CSV等几乎所有主流Excel格式,更新更频繁,bug修复也及时。你可以直接用Composer安装:composer require phpoffice/phpspreadsheet在Symfony控制器里使用也很灵活,直接实例化类创建工作表、填充数据,然后输出响应就行,不需要额外Bundle,自由度很高。
LiipExcelBundle
这是一个基于PhpSpreadsheet的Symfony Bundle,和TwigExcelBundle的用法类似,支持用Twig模板生成Excel,也能直接从实体、数组生成文件,配置简单,维护状态也不错:composer require liip/excel-bundle配置好后,直接在控制器调用服务就能生成Excel响应,上手很快。
EasyAdminBundle(自带导出)
如果你用EasyAdmin做后台管理,它自带了Excel导出功能,只需要在实体的配置文件里开启导出选项就行,适合后台快速导出数据的场景。
三、临时应急的绕过方案(不推荐长期使用)
要是你急着用导出功能,不想折腾依赖,可以试试强制PHPExcel使用自带的PHPExcel_Shared_ZipArchive代替系统的ZipArchive。在你调用TwigExcelBundle的代码前添加这段:
use PHPExcel_Shared_ZipArchive; if (!class_exists('ZipArchive', false)) { class_alias('PHPExcel_Shared_ZipArchive', 'ZipArchive'); }
不过这只是临时 workaround,长期来看还是建议解决系统扩展的问题,因为原生ZipArchive的性能和稳定性都比PHP实现的版本好。
内容的提问来源于stack exchange,提问作者Lacky Raz

