文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Laravel如何操作宝塔面板API

2023-07-04 21:37

关注

今天小编给大家分享一下Laravel如何操作宝塔面板API的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Laravel 操作宝塔面板 API

代码如下:

<?phpnamespace App\Http\Controllers\Custom;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\Http;class BtPanel extends Controller{        private function sendRequest(string $path, array $query)    {        // 宝塔面板秘钥        $secretKey = config('custom.bt.key');        // 宝塔面板地址 http://xxx.xxx.xxx:2222 填写至端口即可        $panelPath = config('custom.bt.panel_path');        $time = time();        $response = Http::withOptions(['verify' => false])            ->retry(2, 5000) // !!!这里时间不适用于 GetApplyCert 接口            ->attach('cookie', $secretKey, 'bt.cookie') // 随便传东西就行            ->post($panelPath . $path, array_merge([                'request_token' => md5($time . '' . md5($secretKey)),                'request_time' => $time            ], $query))            ->json();        return $response ?: false;    }        public function SiteSearch(string $search = null)    {        $search = $search ?: config('custom.bt.domain');        $response = $this->sendRequest('/data?action=getData&table=sites', [            'limit' => 5,            'search' => $search        ]);        // 获取失败        if (!isset($response['data'])) return false;        // 不允许出现相似的网站名        if (count($response['data']) != 1) return false;        $site = $response['data'][0];        return [            'id' => $site['id'],            'name' => $site['name'],            'path' => $site['path'],            'ps' => $site['ps'],            'php' => str_replace('.', '', $site['php_version'])        ];    }        public function AddSite(string $domain)    {        $data = [            'webname' => json_encode([                'domain' => $domain,                'domainlist' => [],                'count' => 0            ]),            'path' => config('custom.bt.site_path'),            'type_id' => '0',            'type' => 'PHP',            'version' => '74',            'port' => '80',            'ps' => $domain,            'ftp' => 'false',            'sql' => 'false'        ];        $response = $this->sendRequest('/site?action=AddSite', $data);        return (isset($response['siteStatus']) && $response['siteStatus'] === true) ? (int)$response['siteId'] : false;    }        public function DeleteSite(string $siteName): bool    {        $site = $this->SiteSearch($siteName);        $response = $this->sendRequest('/site?action=DeleteSite', [            'id' => $site['id'],            'webname' => $site['name']        ]);        return isset($response['status']) && $response['status'] === true;    }        public function SiteStart(string $siteName): bool    {        $site = $this->SiteSearch($siteName);        $response = $this->sendRequest('/site?action=SiteStart', [            'id' => $site['id'],            'name' => $site['name']        ]);        return isset($response['status']) && $response['status'] === true;    }        public function SiteStop(string $siteName): bool    {        $site = $this->SiteSearch($siteName);        $response = $this->sendRequest('/site?action=SiteStop', [            'id' => $site['id'],            'name' => $site['name']        ]);        return isset($response['status']) && $response['status'] === true;    }        public function AddDomain(string $siteName, string $domain)    {        $site = $this->SiteSearch($siteName);        $response = $this->sendRequest('/site?action=AddDomain', [            'id' => $site['id'],            'webname' => $site['name'],            'domain' => $domain        ]);        // 绑定成功 status === true        // 绑定失败 和 指定域名已绑定过  都返回 status === false        // 不好区分 失败 还是 域名已绑定        return isset($response['status']);    }        public function DelDomain(string $siteName, string $domain)    {        $site = $this->SiteSearch($siteName);        $response = $this->sendRequest('/site?action=DelDomain', [            'id' => $site['id'],            'webname' => $site['name'],            'port' => '80',            'domain' => $domain        ]);        return isset($response['status']) && $response['status'] === true;    }        public function SetSSL(string $domain, string $key, string $csr): bool    {        $data = [            'type' => 1,            'siteName' => $domain,            'key' => '',            'csr' => ''        ];        $response = $this->sendRequest('/site?action=SetSSL', $data);        return isset($response['status']) && $response['status'] === true;    }        public function GetSSL(string $domain)    {        $data = [            'siteName' => $domain        ];        $response = $this->sendRequest('/site?action=GetSSL', $data);        return (isset($response['status']) && $response['status'] === true && $response['cert_data']) ? $response['cert_data']['notAfter'] : false;    }        public function SetSiteRunPath(int $siteId, string $runPath = '/public'): bool    {        $data = [            'id' => $siteId,            'runPath' => $runPath        ];        $response = $this->sendRequest('/site?action=SetSiteRunPath', $data);        return isset($response['status']) && $response['status'] === true;    }        public function GetFileBody(string $domain)    {        $data = [            'path' => "/www/server/panel/vhost/rewrite/$domain.conf"        ];        $response = $this->sendRequest('/files?action=GetFileBody', $data);        return (isset($response['status']) && $response['status'] === true) ? $response['data'] : false;    }        public function SaveFileBody(string $domain, string $htaccess = null): bool    {        $htaccess = $htaccess ?: config('custom.bt.htaccess');        $data = [            'path' => "/www/server/panel/vhost/rewrite/$domain.conf", // 伪静态文件路径            'data' => $htaccess, // 伪静态规则内容 ==> 字符串            'encoding' => 'utf-8'        ];        $response = $this->sendRequest('/files?action=SaveFileBody', $data);        return isset($response['status']) && $response['status'] === true;    }        public function GetApplyCert(int $id, string $domain)    {        $data = [            "domains" => json_encode([$domain]),            "auth_type" => "http",            "auto_wildcard" => 0,            "auth_to" => $id,            "id" => $id,            "siteName" => $domain        ];        $response = $this->sendRequest('/acme?action=apply_cert_api', $data);//        $response = [//            'cert' => '',//            'root' => '',//            'private_key' => '',//            'cert_timeout' => 1679184499,//            'status' => true//        ];        if (isset($response['status']) && $response['status'] === true) {            Storage::put("ssl/$domain.txt", json_encode($response));            $res = $this->SetSSL($domain, $response['private_key'], $response['cert'] . $response['root']);            return $res ? $response['cert_timeout'] : false;        }        return false;    }}

以上就是“Laravel如何操作宝塔面板API”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯