业务背景PHP环境下的导出功能优化改造,单次同步导出数据量2万多条。原来导出功能用的是PHP5.6+PHPExcel。这次换成了PHP7.2+php-ext-excel-export。官方github地址https://github.com/viest/php-ext-excel-export扩展安装安装扩展失败跟踪记录官方扩展安装建议在Liunx开发环境下使用peclinstallxls-writerPHP7.2.13(cli)(built:Dec8201812:27:01)(NTS)版权所有(c)1997-2018ThePHPGroupZendEnginev3.2.0,版权所有(c)1998-2018ZendTechnologieswithZendOPcachev7.2.7,版权所有(c)1999-2018,通过ZendTechnologiesCentOS6.7编译安装扩展报错sudomake&&makeinstallInfileincludedfrom/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:186:/usr/local/src/php-ext-excel-export/library/third_party/minizip/crypt.h:35:error:expected';',','or')'before'*'令牌/usr/local/src/php-ext-excel-export/library/third_party/minizip/crypt.h:48:error:expected';',','or')'before'*'令牌/usr/local/src/php-ext-excel-export/library/third_party/minizip/crypt.h:65:error:expected';',','or')'b在“*”令牌之前/usr/local/src/php-ext-excel-export/library/third_party/minizip/crypt.h:94:error:expected';',','或')'在'*'之前token/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:在函数'zipOpenNewFileInZip4_64':/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1245:错误:“curfile64_info”没有名为“crypt_header_size”的成员/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1251:错误:'curfile64_info'没有名为'pcrc_32_tab'的成员/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1254:错误:'curfile64_info'没有名为'pcrc_32_tab'/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1255的成员:错误:'curfile64_info'没有名为'crypt_header_size'/usr/的成员local/src/php-ext-excel-export/library/third_party/minizip/zip.c:在函数'zip64FlushWriteBuffer':/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1375:错误:“curfile64_info”没有名为“pcrc_32_tab”的成员/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1375:error:'curfile64_info'没有名为'pcrc_32_tab'的成员/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:In函数'zipCloseFileInZipRaw64':/usr/local/src/php-ext-excel-export/library/third_party/minizip/zip.c:1610:error:'curfile64_info'没有名为'crypt_header_size'的成员make:***[library/third_party/minizip/zip.lo]Error1在github上以Issues(https://github.com/viest/php-ext-excel-export/issues/139)的形式和官方沟通后,大家来了upwith2结论1可以尝试使用yuminstallphp-pecl-xlswriter来解决yuminstallphp-pecl-xlswriter2编译错误是因为服务器centos版本太低投稿人回复这个问题只在CentOS6出现,因为CentOS6太旧了。技术关键对于数据导出功能的开发,这里主要讲一下同步导出。数据同步导出功能有几个关键路径。1无论使用哪种导出扩展或组件,数据都有一个重新组装的过程,应尽量减少。数组循环和与数据库或第三方服务交互的次数。多次循环的性能浪费会触及PHP的性能底线,比如运行超时。2对于业务方来说,大多希望一次导出一个周期内的数据,比如一个月或者三个月。如果数据的来源是直接访问数据库,那么这里的数据库访问SQL必须是分页的形式很重要,每页的pagesize可以比较大,比如3000或者5000。不要根据查询条件一次查询所有数据。这在生产环境中绝对是一个隐患。跑了一段时间,总会遇到瓶颈。php-ext-excel-export扩展的性能还是可以的,验证了5万到6万条数据的同步导出还是可以处理的。当然,对于导出网页的功能,如果我是产品经理,我更愿意使用异步的方式,以报表框的形式呈现结果。如果要问我为什么,留下悬念,我会单独写一篇总结文章。核心代码扩展安装sudoyum安装php-pecl-xlswriterTotal968kB/s|147kB00:00Runningrpm_check_debugRunningTransactionTestTransactionTestSucceededRunningTransactionInstalling:libxlsxwriter-0.8.7-1.el6.remi.x86_641/2Installing-pecling:xlswriter-1.2.5-1.el6.remi.7.2.x86_642/2Verifying:php-pecl-xlswriter-1.2.5-1.el6.remi.7.2.x86_641/2验证:libxlsxwriter-0.8.7-1。el6.remi.x86_642/2Installed:php-pecl-xlswriter.x86_640:1.2.5-1.el6.remi.7.2DependencyInstalled:libxlsxwriter.x86_640:0.8.7-1.el6.remi扩展使用渲染数据,设置对齐,设置表头加粗/***渲染数据**@parammixed$headerexceltitlebar*@parammixed$dataarray**@returnmixed*/publicfunctionmake($header,$data){/*新扩展1.2.5开始*/$fileHandle=$this->handle->getHandle();$format=new\Vtiful\Kernel\Format($fileHandle);$alignStyle=$format->align(Format::FORMAT_ALIGN_LEFT,Format::FORMAT_ALIGN_LEFT)->toResource();第$is->handle->header($header)->data($data)->setRow('A1',30,$boldStyle)->setRow('A1',30,$alignStyle)->output();}/***export**@returnmixed*/publicfunctionoutput(){$res=$this->handle->output();如果($res){return['root'=>$this->filePath,'file'=>$this->fileName];}}查看扩展版本的常用基本命令php--rixlswritershowxlswritersupport=>enabledVersion=>1.2.5libxlsxwriterheadersversion=>0.8.7libxlsxwriterlibraryversion=>0.8.7pearpear和pecl的区别在于php包管理。pecl是php扩展管理。查看扩展模块php-m|grepxlswriter相关通讯链接https://github.com/viest/php-ext-excel-export/issues/134#issuecomment-507160228https://github.com/viest/php-ext-excel-export/issues/139文章已同步至公众号《图南日晟》欢迎关注
