php高性能的导出excel读写扩展——xlswriter,比传统的Spreadsheet要快很多

1、安装pecl最简单方式

参考:https://zhuanlan.zhihu.com/p/434020011

  • 查询自己的php目录

    bash 复制代码
    find / -name php-config 2>/dev/null
  • 先进入php安装的bin目录

    bash 复制代码
    cd /www/server/php/74//bin/
  • 下载php安装pecl的脚本

    bash 复制代码
    wget --no-check-certificate http://pear.php.net/go-pear.phar -O go-pear.php
  • 安装pecl

    bash 复制代码
    php go-pear.php
  • pecl基本命令

    bash 复制代码
    pecl search xlswriter    #查找扩展

2、安装xlswriter

参考:https://xlswriter-docs.viest.me/zh-cn/an-zhuang/pecl-tui-jian

通过pecl 安装指定版本xlswriter,注意要指定版本,默认安装的是最新版,这不是我们想要的

bash 复制代码
#安装扩展
pecl install xlswriter-1.3.7

可能会报错:configure: error: Cannot find php-config. Please use --with-php-config=PATH ERROR:/tmp/pear/install/xlswriter/configure --enable-reader=yes' failed

这个错误是因为 PECL 找不到 php-config,这通常发生在 PHP 不是通过标准包管理器安装,或者路径不在系统 PATH 中的情况。

使用 PECL 但先设置环境变量

bash 复制代码
# 设置 PHP 相关路径到环境变量
export PATH=/www/server/php/74/bin:$PATH

# 验证 php-config 可用
php-config --version

# 现在可以正常安装了
pecl install xlswriter-1.3.7

3、安装laravel-xlswriter和使用

参考:https://learnku.com/articles/56844

参考代码

bash 复制代码
<?php

namespace App\Exports;

use Lysice\XlsWriter\Interfaces\FromArray;
use Lysice\XlsWriter\Traits\Exportable;
use Lysice\XlsWriter\Excel;

class UserExport implements FromArray
{
    use Exportable;

    private $data = [];
    private $headers = [];
    private $filename = 'demo.xlsx';
    private $disk = 'public';
    private $visibility = 'private';

    /**
     * 通过构造函数传入动态数据
     */
    public function __construct(array $data = [], array $headers = [], string $filename = null)
    {
        $this->data = $data;
        $this->headers = $headers;
        
        if ($filename) {
            $this->filename = $filename;
        }
    }

    /**
     * @return array
     */
    public function array(): array
    {
        return $this->data;
    }

    /**
     * @return array
     */
    public function headers(): array
    {
        return $this->headers;
    }

    /**
     * 设置文件名
     */
    public function setFilename(string $filename): self
    {
        $this->filename = $filename;
        return $this;
    }

    /**
     * 设置存储磁盘
     */
    public function setDisk(string $disk): self
    {
        $this->disk = $disk;
        return $this;
    }

    /**
     * 设置可见性
     */
    public function setVisibility(string $visibility): self
    {
        $this->visibility = $visibility;
        return $this;
    }

    /**
     * 保存文件(封装后的方法)
     */
    public function save(): string
    {
        return $this->store(
            $this->filename,
            $this->disk,
            Excel::TYPE_XLSX,
            ['visibility' => $this->visibility]
        );
    }
}

调用方式:

bash 复制代码
// 最简单的调用
$export = new UserExport($data, $headers);
$path = $export->save();

// 或者链式调用自定义配置
$path = (new UserExport($data, $headers))
    ->setFilename('users.xlsx')
    ->setDisk('public')
    ->setVisibility('private')
    ->save();
相关推荐
小白跃升坊2 小时前
PHP2Shell:AI 两天挖出 9.2 分漏洞,让全球 70% 网站连夜打补丁!1Panel 已经把修复版本封装好,推到了你的应用商店里。
php·开源安全·1panel·ai安全·漏洞披露
Json____4 小时前
PHP 突发严重安全漏洞,AI 开始改变网络安全的攻防方式
人工智能·web安全·php·it学习·wwwoop.com
catchadmin5 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
Web极客码5 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
xuefeiniao6 小时前
PHP2Shell漏洞修复
运维·服务器·php
ServBay7 小时前
AI说代码没漏洞?马上被 PHP 打脸了
aigc·php·ai编程
tq10869 小时前
对PHP漏洞的思考
php
wangruofeng9 小时前
黑色十月:AI 找到的漏洞,两小时数十万次利用
人工智能·安全·php
陌陌龙12 小时前
【紧急预警!PHP 核弹级漏洞 php2shell】
开发语言·php
企业解惑小能手-域智盾系统12 小时前
内网监控软件策略不生效、日志缺失?一套从现象到根因的排查框架
开发语言·php·域智盾