分享Laravel是怎么操作宝塔面板API

本文由laravel教程栏目给大家介绍laravel+宝塔面板的相关知识,主要给大家分享laravel是怎么操作宝塔面板api,下面就带大家一起来看看,希望对需要的朋友有所帮助!

分享Laravel是怎么操作宝塔面板API

Laravel 操作宝塔面板 API

不一样的地方根据自身业务修改!!!

其他的接口请查看官方文档:https://www.bt.cn/api-doc.pdf。

代码如下:

 true/false  "msg" => "申请成功!" * 官方API文档  https://www.bt.cn/api-doc.pdf */class BtPanel extends Controller{    /**     * 发送请求     * @param string $path /data?action=getData&table=sites 请求路径     * @param array $query 请求参数     */    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;    }    /**     * 查询网站     * @param string|null $search 需要搜索的关键词     * @return array|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'])        ];    }    /**     * 创建网站     * !!!PS: 使用API创建网站时  最好 不要创建相似网站名的网站  不然查询时有些麻烦     * @param string $domain 网站域名     * @param [type] json webname        网站域名     * @param [type] string path         网站路径 /www/wwwroot/www.baidu.com     * @param [type] integer type_id     网站分类ID     * @param [type] string type         网站类型 PHP/JAVA     * @param [type] string version      PHP版本 73/74     * @param [type] string port         网站端口     * @param [type] string ps           网站备注     * @param [type] bool ftp            是否创建FTP     * @param [type] string ftp_username  FTP用户名 // ftp为true必传     * @param [type] string ftp_password  FTP密码  // ftp为true必传     * @param [type] bool sql            是否创建数据库     * @param [type] string codeing      数据库编码类型 utf8|utf8mb4|gbk|big5  // sql为true必传     * @param [type] string datauser     数据库账号 // sql为true必传     * @param [type] string datapassword 数据库密码 // sql为true必传     * @return false|int     */    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;    }    /**     * 删除网站     * @param string $siteName 网站名称 一般是网站域名     * @return bool     */    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;    }    /**     * 开启网站     * @param string $siteName 网站名称 一般是网站域名     * @return bool     */    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;    }    /**     * 关闭网站     * @param string $siteName 网站名称 一般是网站域名     * @return bool     */    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;    }    /**     * 为网站绑定域名     * @param string $siteName 网站名称 一般是网站域名     * @param string $domain 需要绑定的域名     * @return bool     */    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']);    }    /**     * 删除网站绑定的域名     * @param string $siteName 网站名称 一般是网站域名     * @param string $domain 需要删除的域名     * @return bool     */    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;    }    /**     * 网站设置SSL证书     * @param string $domain 站点域名     * @param string $key     * @param string $csr     * @return bool     */    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;    }    /**     * 获取SSL状态及证书详情     * @param string $domain 站点域名     * @return string|false 成功则返回证书到期时间     */    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;    }    /**     * 设置网站运行目录     * @param int $siteId 站点域名     * @param string $runPath 运行目录路径     * @return bool     */    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;    }    /**     * 获取网站预置伪静态规则内容(文件内容)     * @param string $domain 网站域名     * @param [type] $type 0->获取内置伪静态规则 /www/server/panel/rewrite/nginx/xxxxx.conf;1->获取当前站点伪静态规则 /www/server/panel/vhost/rewrite/www.baidu.com.conf     * @return string|false 成功则返回伪静态规则内容     */    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;    }    /**     * 保存网站伪静态规则内容(保存文件内容)     * 0->系统默认路径;1->自定义全路径     * @param string $domain     * @param string|null $htaccess     * @return bool     */    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;    }    /**     * 网站申请并设置SSL证书     * !!!PS:当前请求比较耗时间 20s-60s不等  最好单独使用     * @param int $id 站点ID     * @param string $domain 需要申请的域名     * @return bool|integer     */    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视频教程》《宝塔使用教程》

以上就是分享Laravel是怎么操作宝塔面板API的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/66171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月12日 05:06:51
下一篇 2025年11月12日 05:35:23

相关推荐

  • RSS如何实现分页加载?

    RSS协议本身不支持分页,因其设计为一次性推送最新内容;可通过服务器端动态生成带页码参数的Feed链接,或创建多个独立的历史存档Feed来模拟分页效果,但主流阅读器通常只订阅主URL,难以自动加载多页内容。 RSS本身的设计初衷,其实并没有直接内置“分页”这个概念。它更像是一个新闻快讯的广播台,一次…

    2025年12月17日
    000
  • RSS怎样处理动态参数?

    rss本身不支持动态参数,但可通过后端实现动态内容。1.创建多个独立rss源,按分类或标签生成不同订阅地址;2.利用服务器端逻辑解析url参数,动态筛选内容生成对应xml;3.确保每个item的指向规范url;4.引入缓存机制提升性能,如缓存特定标签的rss内容;5.通过html头部标签和订阅页面增…

    2025年12月17日
    000
  • GolangWeb表单验证与输入校验实践

    Golang无内置表单验证因遵循“显式优于隐式”哲学,需依赖结构体绑定与第三方库(如validator)实现声明式验证,并结合手动清理确保安全;通过分离绑定、验证与清理步骤,提升代码可维护性,同时利用ValidationErrors返回具体错误信息以优化用户体验,配合HTML转义、参数化查询等手段完…

    2025年12月15日 好文分享
    000
  • 现代软件开发中的语言选择策略:PHP、GoLang与多语言栈的构建

    本文探讨了在Web、桌面及高性能应用开发中,如何权衡PHP、GoLang等编程语言的选择。面对快速开发与极致性能的需求,没有单一“完美”语言。教程强调应充分利用PHP在Web领域的现有优势,并通过C/C++等语言弥补性能短板,同时根据具体平台(桌面、移动)选择最合适的工具,构建灵活高效的多语言技能栈…

    2025年12月15日
    000
  • PHP与Go-lang抉择:构建高效多平台应用的语言策略

    在编程语言选择上,没有一劳永逸的“完美”方案。本文探讨了在Web开发中继续利用PHP的优势,并结合C/C++处理性能瓶颈的策略。同时,针对桌面和移动应用,提出了基于特定平台和性能需求的语言选择建议,强调采用多语言、多技术栈的综合方法来应对多样化的开发挑战。 Web开发:PHP的持续价值与性能优化 对…

    2025年12月15日
    000
  • Laravel在Debian上如何备份数据

    在debian系统上如何备份laravel项目的数据?以下是详细的步骤和脚本示例: 数据库备份:根据你使用的数据库类型,使用mysqldump或pg_dump进行备份。存储目录备份:将Laravel的storage目录,包括文件、缓存、日志等,备份到安全位置。环境配置文件备份:确保备份.env文件,…

    2025年12月15日
    000
  • EMQX、Go-Gin设备通信:认证、指令发送及业务处理如何实现?

    EMQX、Go-Gin 与物联网设备通信:安全机制与业务流程 本文阐述如何利用 EMQX MQTT 服务器和 Go-Gin 框架构建高效安全的物联网设备通信系统,涵盖设备认证、指令分发和业务逻辑处理三个关键环节。 一、统一认证机制:EMQX 与 HTTP API 的 JWT Token 共享 EMQ…

    2025年12月15日
    000
  • EMQX与Golang-Gin集成:如何实现高效安全的MQTT认证及业务处理?

    EMQX和Golang-Gin框架集成:实现高效安全的MQTT认证与业务逻辑处理 本文阐述如何结合EMQX MQTT消息服务器和Golang-Gin框架,构建高效安全的MQTT认证和业务处理流程。我们将围绕三个核心问题展开:如何利用JWT令牌在EMQX和HTTP服务间实现统一认证?如何向EMQX中的…

    2025年12月15日
    000
  • php中的codeIgniter框架是什么?

    CodeIgniter 因轻量、易上手、高效和灵活被广泛使用,适合初学者和小型项目。其详细文档和简洁语法降低学习门槛,无需复杂工具即可运行;核心小、加载快,资源消耗低;支持按需使用组件,不强制结构;内置数据库操作、表单验证等功能,开箱即用;采用 MVC 架构,分离数据、界面与逻辑,提升可维护性;常用…

    2025年12月14日
    000
  • php中Larave框架中间件是什么?

    中间件是Laravel中用于过滤HTTP请求的机制,可在请求到达控制器前后执行逻辑。1. 可实现身份认证、权限控制、日志记录和安全防护等功能;2. Laravel内置auth、csrf等中间件,也可通过php artisan make:middleware自定义;3. 可在路由或控制器构造函数中绑定…

    2025年12月14日
    000
  • php与python建站的区别有哪些

    PHP专为Web开发设计,适合快速建站,如用WordPress搭建内容类网站;Python是通用语言,适合复杂应用及AI等扩展。1. PHP语法嵌入HTML方便,Python通过Django/Flask实现模块化开发。2. PHP生态有成熟CMS,开发效率高;Python框架功能强,适合数据处理与全…

    2025年12月14日
    000
  • 构建双服务器通信:Laravel 与 Python Flask 的异步请求处理

    本文旨在解决 Laravel 服务器和 Python Flask 服务器之间进行双向通信时,避免阻塞连接的问题。通过探讨传统 HTTP 服务器的局限性,介绍了使用异步编程模型(如 asyncio 和 aiohttp)来优化服务器性能的方法。文章将重点讲解如何在 Flask 框架中利用异步特性,以及如…

    2025年12月14日
    000
  • 使用异步请求在 Laravel 和 Flask 服务器之间进行通信

    本文档介绍了如何在 Laravel (PHP) 和 Flask (Python) 服务器之间实现非阻塞的双向请求通信。传统 HTTP 服务器的线程模型限制了并发处理能力,当一个服务器需要等待另一个服务器的响应时,会阻塞当前线程。本文将探讨使用异步编程解决此问题的方法,重点介绍如何在 Flask 中利…

    2025年12月14日
    000
  • 使用异步方式在 Laravel 和 Flask 服务器之间进行通信

    本文档介绍了如何在 Laravel 和 Python Flask 服务器之间实现非阻塞的请求通信。针对机器学习任务,Flask 服务器需要从 Laravel 服务器获取最新数据,传统同步方式会阻塞连接。本文将探讨使用异步编程解决此问题,重点介绍 asyncio 和 aiohttp,并提供示例代码和注…

    2025年12月14日
    000
  • 实现服务器间非阻塞通信:Python Flask与Laravel的异步交互策略

    本文探讨了在Python Flask和Laravel服务器之间进行数据交互时,如何避免传统阻塞式请求导致的性能瓶颈。核心解决方案是采用异步I/O模型,特别是利用Python的asyncio和aiohttp库,或支持异步的Web框架(如Flask 3.0+或Starlette),以实现服务器线程在等待…

    2025年12月14日
    000
  • 使用异步请求在 Laravel 和 Flask 服务器间进行通信

    本文探讨了如何在 Laravel 和 Python Flask 服务器之间实现非阻塞的请求通信。传统的 HTTP 服务器模型在处理请求时会阻塞线程,影响性能。本文介绍了两种解决方案:使用多线程/进程,以及采用异步服务器架构。重点讲解了如何利用 asyncio 和 aiohttp 等库,将 Flask…

    2025年12月14日
    000
  • 如何进行数据库迁移(Migration)?

    数据库迁移的核心理念是“结构演进的版本控制”,即通过版本化、可追踪、可回滚的方式管理数据库Schema变更,确保团队协作中数据库结构的一致性。它关注的是表结构、索引、字段等“骨架”的变化,如添加字段或修改列类型,强调与应用代码迭代同步。而数据迁移则聚焦于“血肉”,即数据内容的转移、清洗、转换,例如更…

    2025年12月14日
    000
  • Python数据库操作:必须使用对象映射吗?

    Python数据库操作:灵活选择,无需拘泥于对象映射 学习Python数据库操作时,你可能会接触到SQLAlchemy、MongoDB等ORM框架。许多初学者都会问:Python数据库操作必须依赖对象映射吗?面对数百张数据库表,难道要创建同样数量的对象文件?本文将解答这些疑问,并探讨Python数据…

    2025年12月13日
    000
  • Python数据库操作:ORM映射是唯一途径吗?

    Python数据库操作:灵活选择,ORM并非唯一 许多Python开发者在使用Flask框架和数据库驱动(如SQLAlchemy或PyMongo)时,常常纠结于数据库操作是否必须进行ORM(对象关系映射)。本文将结合代码示例,阐明Python数据库操作的灵活性和多种途径。 问题在于,SQLAlche…

    2025年12月13日
    000
  • Python数据库操作:必须使用ORM吗?

    Python数据库操作:ORM并非唯一选择 许多Python开发者习惯使用ORM(对象关系映射)工具,例如SQLAlchemy,来操作数据库。 但一个常见问题是:是否必须为每个数据库表都创建对应的ORM映射?尤其面对大量表时,这种方法显得冗余且效率不高,与PHP框架(如Laravel)直接使用SQL…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信