IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> tp6+swoole+execl -> 正文阅读

[PHP知识库]tp6+swoole+execl

tp6+swoole+execl
仅有导出
因为有的时候导出文件时间实在是太久,不想再浏览器转圈圈
笨方法解决 用的Swoole的task

// 测试3000+图片 导出13分钟导出文件1g

<?php
declare (strict_types=1);


namespace app\command;


use think\console\Input;
use think\console\Output;
use Vtiful\Kernel\Excel;

class SwooleTest extends \think\console\Command
{


    protected function configure(): void
    {
        $this->setName('SwooleTest')
            ->addArgument('status', null, '是否守护启动,启动是1,默认0', '0')
            ->addArgument('reload', null, '是否重启服务, 是 1,默认0', '0')
            ->setDescription('Swoole 测试脚本');
    }

    protected function execute(Input $input, Output $output)
    {
        $port = config('Settings.EXCEL_SWOOLE_SERVER_PORT')?:9502;
        $reload = trim($input->getArgument('reload'));
        if ($reload == 1) {
            $is_there = exec('lsof -i:'.$port);
            if ($is_there) {
                $pid = cache('excel_swoole_pid');
                system('kill -9 '.$pid);
                echo '停止服务成功'.PHP_EOL;
                die();
            } else {
                echo '当前端口无占用,可以直接启动服务'.PHP_EOL;
                die();
            }
        }

        $server = new \Swoole\Server("127.0.0.1", $port, SWOOLE_PROCESS);
        $status = trim($input->getArgument('status'));
        $server->set(array(
            'task_worker_num' => 4,
            'daemonize' => $status == 1
        ));

        $server->on('Receive', function (\Swoole\Server $server, $fd, $reactor_id, $data) {
            $data = trim($data);
            $task_id = $server->task($data, -1, function (\Swoole\Server $server, $task_id, $data) {
                // 任务完成的回调
                var_dump($task_id, $data);
            });
            // return 的地方
            $server->send($fd, json_encode([
                'msg' => "分发任务,任务id为$task_id",
                'task_id' => $task_id
            ]),JSON_UNESCAPED_UNICODE);
        });

        $server->on('Task', function (\Swoole\Server $server, $task_id, $reactor_id, $data) {
            $info = $this->exportLeaseTaskPayOrder();
            $server->finish($info);
        });

        $server->on('Finish', function (\Swoole\Server $server, $task_id, $data) {
            // 完成
            dump($data);
            echo 'Finish-------------------------Finish';
        });

        $server->on('workerStart', function (\Swoole\Server $server, $worker_id) {
            echo 'workerStart-------------------------workerStart' . PHP_EOL;
            // $worker_id 存放好
            $pid = $server->getMasterPid();
            cache('excel_swoole_pid', $pid);
            global $argv;
            if ($worker_id >= $server->setting['worker_num']) {
                swoole_set_process_name("php {$argv[0]}: task_worker");
            } else {
                swoole_set_process_name("php {$argv[0]}: worker");
            }
        });
        echo "启动成功\r\n" . PHP_EOL;
        $server->start();
    }


    public function exportLeaseTaskPayOrder($screen = [])
    {
//        $page_no = 1;
//        $page_size = 10;
//        $all = true;
//        $list = \app\model\LeaseTaskOrder::getExportLeaseTaskOrderList($screen, $page_no, $page_size, $all);
        // 设置表头
        $table_header = config('Settings.LEASE_TASK_ORDER_TABLE_HEADER');
//        include '../extend/PHPExcel/demo.php';
        // 数据表
        $data = array(
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '11'
            ],
            [
                'img' => 'https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg',
                'age' => '13'
            ],
        );
        // 控制类型和写入字段
        $data_index = array(
            [
                'value' => 'img',
                'type' => 'img'
            ],
            'age'
        );
        $base_dir = root_path() . 'public/';
        $path_dir = '/excel/'.date('Ymd', time()).'/temp/export/';
        $path_img = '/excel/'.date('Ymd', time()).'/temp/img/';
        if (!file_exists($base_dir.$path_dir)) mkdir($base_dir.$path_dir, 0777, true);
        if (!file_exists($base_dir.$path_img)) mkdir($base_dir.$path_img, 0777, true);
        $config = ['path' => $base_dir.$path_dir];
        try {
            $excel = new Excel($config);
            $fileName = time().md5((string)rand(10000, 99999)) . '.xlsx';
            $freeFile = $excel->fileName($fileName);
            foreach ($table_header as $key => $item) {
                $freeFile->insertText(0, $key, $item['value'])->setColumn('A:A', $item['width']);
            }
            $data_yield = $this->createYield($data);
            foreach ($data_yield as $key => $item) {
                echo '正在写入' . ($key + 1) . '条' . PHP_EOL;
                fileOPen('1.log',array('正在写入' . ($key + 1) . '条' . PHP_EOL));
                foreach ($data_index as $k => $i) {
                    if (is_array($i)) {
                        if (isset($i['type']) && $i['type'] == 'img') {
                            $temp_pic = $this->download($item[$i['value']], $path_img,$base_dir);
                            echo $temp_pic.PHP_EOL;
                            list($width, $height, $type, $attr) = getimagesize($base_dir.$temp_pic);
                            $freeFile->insertImage($key + 1, $k, $base_dir.$temp_pic, 50 / $width, 50 / $width * $height / $height)->setRow('A' . ($key + 2), 50 / $width * $height);
                        } else {
                            // 判断value在不在
                            if (isset($i['value'])) {
                                $freeFile->insertText($key + 1, $k, $item[$i['value']]);
                            }
                        }
                    } else {
                        $freeFile->insertText($key + 1, $k, $item[$i]);
                    }
                    dump(123123123123123);
                }
            }
            $filePath = $freeFile->output();
            // /www/wwwroot/file_dispose/******/public/excel/20211204/temp/export/1638599046.xlsx
            $filePath = str_replace($base_dir,'' ,$filePath);
            return model_return(true,'成功',array('url' => $filePath));
        } catch (\Exception $e) {
            dump($e);
            return model_return(false,$e->getMessage());
        }
    }


    public function createYield($data)
    {
        foreach ($data as $item) {
            yield $item;
        }
    }

    public function download($url, $path,$base_dir)
    {
        fileOPen('1.log',array('下载图片',$url,$path));
        $file = file_get_contents($url);
        $name = time() . rand(10000, 99999). md5((string)rand(10000, 99999));
        $url = $path . $name . '.jpg';
        $filename = $base_dir.$url;//二维码
        $filepath = $base_dir.$path;//二维码
        if (!file_exists($filepath)) {
            mkdir($filepath, 0777, true);
        }
        file_put_contents($filename, $file);
        return $url;
    }

}



  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:50:17  更:2021-12-07 11:51:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:50:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码