thinkphp8.0后台运行实操

场景:调用第三方接口,需要存储上万条数据,如果在浏览器端运行,会出现超时的情况;数据存储不完整,利用centOS stream 9的no hup命令来实现;切记:在宝塔上不可采用计划任务、进程守护等来解决该问题,这些是循环往复的,会造成数据存储时,大量重复数据;

我们利用tp8文档中的自定义指令;

https://doc.thinkphp.cn/v8_0/create_php_think.html

我创建了多应用模式,在index应用下,command文件夹下,创建了hello命令:

namespace app\index\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;

use think\facade\Db;
use think\facade\Log;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

class Hello extends Command
{
    protected function configure()
    {
        $this->setName('hello')
            ->addArgument('name', Argument::OPTIONAL, "your name")
            ->addOption('city', null, Option::VALUE_REQUIRED, 'city name')
            ->setDescription('Say Hello');
    }

    protected function execute(Input $input, Output $output)
    {
        $output->writeln("开始拉取数据...");
        $this->getFlow();
        $output->writeln("完成!");
    }
    
    public function getFlowData(int $advID)
    {
        $client = new Client();

        $url = 'https://ad.oceanengine.com/open_api/2/advertiser/fund/daily_stat/';
    
        $headers = [
            'Access-Token' => '', // 替换为真实 token
            'Content-Type'  => 'application/json'
        ];
        
        $startDate = '2025-02-01';
        $endDate = '2025-02-28';
        
        $body = [
            'advertiser_id'    => $advID, // 替换为真实ID
            'start_date'       => $startDate,
            'end_date'         => $endDate,
            'page' => 1,
            'page_size' => 31
        ];
    
        try {
            $response = $client->request('GET', $url, [
                'headers' => $headers,
                'json'    => $body,
                'delay'   => 2 
            ]);
    
            $responseBody = $response->getBody()->getContents();
            $data = json_decode($responseBody, true);
            // dd($data);
            if($data['code'] == 0){
                $result = $data['data']['list'];
                $count = $data['data']['page_info']['total_number'];
                if (!empty($result)) {
                    $records = [];
                    foreach ($result as $key => $val){
                        $records[] = [
                            'advertiser_id' => $val['advertiser_id'],
                            'date' => $val['date'],
                            'non_grant_balance' => $val['non_grant_balance'],
                            'frozen' => $val['frozen'],
                            'company_wallet_cost' => $val['company_wallet_cost']
                        ];
                    }
                
                    try {
                        Db::name('flow')->insertAll($records);
                    } catch (\Exception $e) {
                        Log::error('数据库插入失败:'.$e->getMessage());
                    }
                }
            }
        } catch (RequestException $e) {
            // return json(['code'=>1,'msg'=>$e->getMessage()]);
            Log::error('错误信息:'.$e->getMessage());
        }
        
        sleep(2);
    }
    
    public function getFlow()
    {
        $result = Db::name('recharge')->distinct(true)->field('adv_id')->whereBetweenTime('operation_time','2025-02-01','2025-02-28')->select();
        
        foreach ($result as $val){
            $this->getFlowData((int) $val['adv_id']);
        }
    }
}

最后一步:在宝塔终端:输入命令:

cd /www/wwwroot/www.quweiie.cn
nohup php think hello quwei > runtime/hello.log 2>&1 &

php think hello quwei命令一定要在tp的根目录下运行;hello.log在runtime目录下查看;

部分含义
nohup防止任务因终端关闭而中断
php think hello quwei执行你的命令,传入参数 quwei
>将标准输出写入 log 文件
2>&1将错误输出也重定向到 log 文件中
&让命令在后台运行
基于thinkphp3.1.2的通用网站后台 本通用后台包含以下功能: 1、RBAC权限管理功能; 便捷地对系统中用户进行权限分配,所以权限分配可以在一个页面分配完成。 2、简单新闻发布版块; 基本的新闻发布、修改、删除。 3、无极限分类功能; 满足新闻分类等的无极限分类的功能,你可以根据实际情况修改。 4、每月自动备份功能; 管理员每个月第一次登陆后台,系统会后台自动进行当月数据备份功能。 5、备份、还原数据库,打包已备份sql文件 备份数据量大时,系统会自动分隔备份成多个sql文件,每个sql文件头部记录了当前sql文件包含了那些表数据。支持其他软件导入的sql文件导入(支持导入>200M的sql文件,目前只测试过200M左右的sql文件,虽然支持但是还是不建议这么做)。 6、打包已备份sql文件,在线解压zip数据文件 考虑到节省磁盘空间,你可以将已备份是sql文件打包成zip压缩文件(对应打包的sql文件会被清除),同时你可以在线解压之间zip打包的文件(zip文件保留)。 7、邮件发送sql备份,下载数据库备份文件 在你配置了系统邮件信息后,你可以轻松将你的备份sql文件打包发送到你指定的邮箱中,如果发送的sql文件较多较大,系统考虑到备份邮箱不支持大附件系统将分成多封邮件发送(压缩前50M一封,压缩后一般在6~7M左右),同时你可以将系统备份的sql文件下载到你本地。 8、数据优化修复功能 你可以轻松优化修复你的mysql数据库。 9、缓存清除功能 你不用去一个一个目录地清除缓存文件了,只要勾选确定就可以了 10、JS\CSS 压缩缓存 系统加入了minify压缩js、css缓存,为了和TP的分隔符分开,如果你要将你的js、css加入到minify中,你必须使用竖线“|”将多个文件分隔开。 11、后台有二维码访问图 如果你不需要请自行在/Admin/Lib/Action/CommonAction.class.php 里去掉,同时修改模板文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值