kangle支不支持PHP_【转载】PHP调用kangle的API

a30fed385935a686f61fe67bf35c70da.png摘要:

根据管理的API公布写了一个类封装了一个操作集合,这是一个kangleAPI的一个封...

根据管理的API公布写了一个类封装了一个操作集合,这是一个kangleAPI的一个封装吧,是在其他地方看到的,接口包含获取easypanel的信息(包括了kangle的信息)、获取站点信息、创建kangle站点、修改指定kangle站点信息、获取kangle站点列表、修改指定kangle站点密码、修改指定kangle站点状态、删除指定kangle站点、获取指定kangle站点的数据库使用量。功能很强大,像EP分销这些都是利用的kangle接口开发的,你还可以开发其他的产品,需要的直接带走。代码中包含作者版权,未修改。

调用页示例:<?php

//引入类

include_once('kangle_init.class.php');

//初始化

//$kangle = new kangle_init('IP或域名(默认127.0.0.1)','端口(默认3312)','秘钥(默认test)','协议(http/https,默认http)');

$kangle = new kangle_init('127.0.0.1','3312','asfsvsvsyYD6Y6ue','http');

//调用方法示例,具体请参照类文件,有详细的代码注释说明

$kangle->update_vh('test',0)

封装的函数:<?php

class kangle_init{

/*

* 配置需求:PHP >= 5.2.0

* by:  千里溃

* 参照出处: https://www.kanglesoft.com/thread-44506-1-1.html

* c : (control)表示哪个控制文件(目前有whm,cdn)

* a : (action)表示哪个方法,以下介绍

* r : 随机数

* s : 秘钥,通过md5(a + skey +r)得到,如a=add,skey=test,r=888,则s=md5(addtest888)

* 其中skey是服务器安全码

* 所有返回成功都报[result] => 200

* 不成功报[result] => 500 或者 新建(修改)站点时 product_id 和 product_name 都存在参数时报 [result] => 505

*/

public $protocol ;

public $ip;

public $port;

public $r;

public $skey;

public function __construct($ip = '127.0.0.1',$port = '3312',$skey = 'test',$protocol = 'http')

{

$this->protocol = $protocol; //仅支持http和https

$this->ip = $ip;

$this->port = $port;

$this->r = rand(100000,999999);

$this->skey = $skey;

}

public function __destruct()

{

// TODO: Implement __destruct() method.

}

public function url($info=array()){

$url = '';

foreach ($info as $k=>$v){

$url .= $k.'='.$v.'&';

}

return $this->protocol.'://'.$this->ip.':'.$this->port.'/api/index.php?'.$url.'r='.$this->r.'&s='.md5($info['a'].$this->skey.$this->r).'&json=1';

}

public function open($info=array()){

$url = $this->url($info);

if(function_exists('curl_init')){

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_TIMEOUT, 5);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if ($this->protocol == 'https' or $this->protocol == 'HTTPS'){

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在

}

$r = curl_exec($ch);

curl_close($ch);

return json_decode($r,true);

}else{

return json_decode(file_get_contents($url),true);

}

}

//获取easypanel的信息(包括了kangle的信息)

public function info(){

/*

* c : whm

* a : info

* 调用成功后你将得到如下返回数据:

* {"result":200,"server":[{"0":"kangle"}],"version":[{"0":"3.4.8"}],"type":[{"0":"enterprise"}],"os":[{"0":"windows"}],"license_id":[{"0":"73646_1387957818"}],"license_name":[{"0":"dsdds"}],"total_run":[{"0":"611038"}],"connect":[{"0":"4"}],"request":[{"0":"14105"}],"accept":[{"0":"4722"}],"vh":[{"0":"43"}],"kangle_home":[{"0":"D:\\\easypanel\\"}],"update_code":[{"0":"win_x64"}],"easypanel_version":"2.6.17"}

* 其中result=200表示调用成功。

* version是kangle的版本

* type是kangle的商业版还是免费版(enterprise  or free)

* total_run 是运行时间

* vh 是虚拟主机数量

* connect是当前有多少请求进来。

*

*/

return $this->open(array('c'=>'whm','a'=>'info'));

}

//获取站点信息

public function getvh($name = null){

/*

* c : whm

* a : getVh

* name : (虚拟主机名称)

*

* 返回的虚拟主机的参数说明

* name : 主机名称

* doc_root:主机的主目录

* uid:系统生成(用户在服务器上的账户ID),权限控制使用。不可更改。

* gid :系统账户组ID

* module:是属于哪个模块,目前有php和iis两个模块。

* templete,subtemplete,已废弃

* create_time :创建时间

* expire_time2 :过期时间

* status:站点状态,0正常,1为关闭。

* subdir_flag 是否允许子域名,1为允许,0为不允许

* subdir 默认子目录名称

* web_quota 空间大小

* db_quota 数据库大小

* domain :允许绑定域名数量 -1为不限

* max_connect 最多连接数

* max_worker 最多工作者

* ftp : 是否开通ftp,1为开通,0为不开通

* db_name 数据库名称(一般和主机名称等同,sql server 特殊)

*/

return $this->open(array('c'=>'whm','a'=>'getVh','name'=>$name));

}

//创建站点

public function add_vh($info = array()){

/*

* 固定值:

* c : whm

* a : add_vh

* r : 随机

* s : 秘钥

* init : 1  //表示创建

* name:网站账号,数据库账号,ftp账号同步

* passwd:网站密码,数据库密码,ftp密码同步(只创建时同步)

* product_id 和 product_name 都存在参数时报 [result] => 505,product_id 和 product_name 只能存在一个或者 一个都不存在,当一个都不存在时 详细配置虚拟主机参数

*/

if(trim(intval($info['product_id'])) != null and trim($info['product_name']) != null){

return array('result'=>'505');

}elseif(trim(intval($info['product_id'])) != null){

return $this->open(array('c'=>'whm','a'=>'add_vh','init'=>1,'name'=>$info['name'],'passwd'=>$info['passwd'],'product_id'=>$info['product_id']));

}elseif (trim($info['product_name']) != null){

return $this->open(array('c'=>'whm','a'=>'add_vh','init'=>1,'name'=>$info['name'],'passwd'=>$info['passwd'],'product_id'=>$info['product_name']));

}else{

/*

* 详细配置模式下的传入值列表

* cdn:是否为CDN空间,是则发送1

* Templete:语言(html|php|iis)

* Subtemplete:语言引擎,php52|php53|php5217

* web_quota:网页空间大小,数字

* db_quota:数据库大小,数字

* db_type:数据库类型,mysql|sqlsrv

* subdir_flag:是否允许绑定子目录,1为是

* Subdir:默认绑定目录,可为空,例:wwwroot

* max_subdir:最多子目录数

* domain:需要绑定的域名,可空,默认会绑定到subdir指 定的目录下。

* ftp:是否开启ftp,1为是

* ftp_connect:ftp最多连接数

* ftp_usl:ftp上传速度限制,单位kb

* ftp_dsl:ftp下载限制。单位kb

* access:是否启用自定义控制,如果是请输入自定义控制文件名access.xml

* speed_limit:带宽限制,数字型,默认为不限(kb)

* log_handle:是否开启日志析分功能,1为是

* flow_limit:流量限制,数字型,默认不限(kb)

*/

$info=array('c'=>'whm','a'=>'add_vh','init'=>1,'name'=>$info['name'],'passwd'=>$info['passwd']);

return $this->open($info);

}

}

//修改站点信息

public function edit_vh($info = array()){

/*

* 固定值:

* c : whm

* a : add_vh

* r : 随机

* s : 秘钥

* edit : 1  //表示修改

* name:网站账号,数据库账号,ftp账号同步

* passwd:网站密码,数据库密码,ftp密码同步(只创建时同步)

*  product_id 和 product_name 都存在参数时报 [result] => 505,product_id 和 product_name 只能存在一个或者 一个都不存在,当一个都不存在时 详细配置虚拟主机参数

*/

if(trim(intval($info['product_id'])) != null and trim($info['product_name']) != null){

return array('result'=>'505');

}elseif(trim(intval($info['product_id'])) != null){

return $this->open(array('c'=>'whm','a'=>'add_vh','edit'=>'1','name'=>$info['name'],'passwd'=>$info['passwd'],'product_id'=>$info['product_id']));

}elseif (trim($info['product_name']) != null){

return $this->open(array('c'=>'whm','a'=>'add_vh','edit'=>'1','name'=>$info['name'],'passwd'=>$info['passwd'],'product_id'=>$info['product_name']));

}else{

/*

* 详细配置模式下的传入值列表

* cdn:是否为CDN空间,是则发送1

* Templete:语言(html|php|iis)

* Subtemplete:语言引擎,php52|php53|php5217

* web_quota:网页空间大小,数字

* db_quota:数据库大小,数字

* db_type:数据库类型,mysql|sqlsrv

* subdir_flag:是否允许绑定子目录,1为是

* Subdir:默认绑定目录,可为空,例:wwwroot

* max_subdir:最多子目录数

* domain:需要绑定的域名,可空,默认会绑定到subdir指 定的目录下。

* ftp:是否开启ftp,1为是

* ftp_connect:ftp最多连接数

* ftp_usl:ftp上传速度限制,单位kb

* ftp_dsl:ftp下载限制。单位kb

* access:是否启用自定义控制,如果是请输入自定义控制文件名access.xml

* speed_limit:带宽限制,数字型,默认为不限(kb)

* log_handle:是否开启日志析分功能,1为是

* flow_limit:流量限制,数字型,默认不限(kb)

*/

$info=array('c'=>'whm','a'=>'add_vh','edit'=>'1','name'=>$info['name'],'passwd'=>$info['passwd']);

return $this->open($info);

}

}

//获取站点列表

public function listvh(){

/*

* a : whm

* c : listVh

*/

return $this->open(array('c'=>'whm','a'=>'listVh'));

}

//修改站点密码

public function change_password($name,$passwd){

/*

* c :whm

* a : change_password

* name :站点名称

* passwd :新的密码

*/

return $this->open(array('c'=>'whm','a'=>'change_password','name'=>$name,'passwd'=>$passwd));

}

//修改站点状态

public function update_vh($name,$status){

/*

* c :whm

* a : update_vh

* name :站点名称

* status : 新状态(0正常,1关闭)

*/

return $this->open(array('c'=>'whm','a'=>'update_vh','name'=>$name,'status'=>$status));

}

//删除站点

public function del_vh($name){

/*

* c :whm

* a : del_vh

* name :站点名称

*/

return $this->open(array('c'=>'whm','a'=>'del_vh','name'=>$name));

}

//获取站点的数据库使用量

public function getDbUsed($name){

/*

* c :whm

* a : getDbUsed

* name :站点名称

*/

return $this->open(array('c'=>'whm','a'=>'getDbUsed','name'=>$name));

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6 学习笔记(一)let,const和解构赋值

let和const let和const是es6新增的两个变量声明关键字&#xff0c;与var的不同点在于&#xff1a; &#xff08;1&#xff09;let和const都是块级作用域&#xff0c;在{}内有效&#xff0c;这点在for循环中非常有用&#xff0c;只在循环体内有效。var为函数作用域。 &#xff0…

mysql数据库容量和性能_新品速递丨容量盘性能提升超 300%,数据库支持 MySQL 8.0...

2关系型数据库 MySQL Plus支持 MySQL 8.0 内核及 XtraBackup 物理在线迁移方式关系型数据库服务 MySQL Plus 发布新版本 1.0.6 &#xff0c; 新增多项功能&#xff0c;提升了集群自动化运维能力。主要升级有&#xff1a;- 支持 MySQL 8.0 内核&#xff1a;根据官方测试&#xf…

10. Python面向对象

Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。如果接触过java语言同学应该都知道&#xff0c;Java面向对象三大特征是&#xff1a;封装、继承、多态。Python面向对象也有一些特征&#xff0c;接下来我…

mysql聚簇索引 和主键的区别_[MySQL] innoDB引擎的主键与聚簇索引

MysqL的innodb引擎本身存储的形式就必须是聚簇索引的形式,在磁盘上树状存储的,但是不一定是根据主键聚簇的,有三种情形:1. 有主键的情况下,主键就是聚簇索引2. 没有主键的情况下,第一个非空null的唯一索引就是聚簇索引3. 如果上面都没有,那么就是有一个隐藏的row-id作为聚簇索引…

前端页面:一直报Cannot set property 'height' of undefined

1、出现错误的例子&#xff0c;只拷贝了项目中关键出现问题的部分 例子中明明写了styleheight:16px这个属性&#xff0c;但是为什么还说height未定义呢 通过打印发现&#xff1a;cks.each(function () { autoTextAreaHeight($(this)); });中的$(this)取出来…

mysql表在线转成分区表_11g普通表在线转换分区表

本帖最后由 灯和树 于 2016-5-4 14:58 编辑由于业务系统数据量增大&#xff0c;对其用户表在线完成分区表转换过程&#xff0c;记录如下&#xff0c;11g数据库支持。创建过渡分区表根据USER_ID创建分区表CREATE TABLE SDP_SMECD.TEST_T_USER_ID(USER_ID NUMBER(13) …

tiger4444/rabbit4444后缀勒索病毒怎么删除 能否百分百恢复

上海某客户中了tiger4444的勒索病毒&#xff0c;找到我们后&#xff0c;一天内全部恢复完成。说了很多关于勒索病毒的事情&#xff0c;也提醒过大家&#xff0c;可总是有人疏忽&#xff0c;致使中招后&#xff0c;丢钱丢面子&#xff0c;还丢工作。 那么要怎样预防呢与处理呢&a…

mysql远程一会不用卡住_连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,...

连接远程MySQL数据库项目启动时&#xff0c;不报错但是卡住不继续启动的&#xff0c;2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factory.support.DefaultListableBeanFactory.doGetBean():251 -Returning cached instance of singleton bean ‘org.spring…

GPT-5、开源、更强的ChatGPT!

年终岁尾&#xff0c;正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布&#xff0c;AGI&#xff08;稍晚一些&#xff09;、GPT-5、更好的语音模型、更高的费率限制&#xff1b; 更好的GPTs&#xff1b;更好的推理…

CentOS_7 安装MySql5.7

2019独角兽企业重金招聘Python工程师标准>>> 下载mysql的源 wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm 安装yum库 yum localinstall -y mysql57-community-release-el7-7.noarch.rpm 安装MySQL yum install -y mysql-community-…

python查询mysql decimal报错_python读取MySQL数据表时,使用ast模块转换decimal格式数据的坑...

概述MySQL中常用的数据格式有tinyint()、int()、float()、double()、decimal() 、varchar、enum()、datetime;小数格式中decimal比较常用&#xff0c;因为更加精确&#xff0c;这里就以decimal为例。从MySQL中读取了一行数据&#xff0c;内容为&#xff1a;(17479, datetime.da…

性能测试总结(一)---基础理论篇(转载)

随着软件行业的快速发展&#xff0c;现代的软件系统越来越复杂&#xff0c;功能越来越多&#xff0c;测试人员除了需要保证基本的功能测试质量&#xff0c;性能也随越来越受到人们的关注。但是一提到性能测试&#xff0c;很多人就直接连想到Loadrunner。认为LR就等于性能测试&a…

java listen_JavaWeb之Filter、Listener

昨天和大家介绍了一下JSON的用法&#xff0c;其实JSON中主要是用来和数据库交互数据的。今天给大家讲解的是Filter和Listener的用法。一、Listenner监听器1.1、定义Javaweb中的监听器是用于监听web常见对象HttpServletRequest,HttpSession,ServletContext。1.2、监听器的作用监…

BFC的概念及作用

在了解什么是BFC之前&#xff0c;首先得明白什么是Box , Formatting Context &#xff08;一个决定如何渲染文档的容器&#xff09;的概念 Box: CSS布局的基本单位 Box是 CSS 布局的对象和基本单位&#xff0c; 直观点来说&#xff0c; 就是一个页面是由很多个 Box组成的&#…

bitcount java_java-Long.bitCount()如何找到设置的位数?

让我们以255为例.我们将这些位组合在一起.首先,我们从255开始,为0b1111.1111(二进制为8 1)第一行代码是&#xff1a;i i - ((i > > > 1) & 0x5555555555555555L);这条线正在梳理每对1.由于我们有8个1,所以我们希望组合成对,并得到2,2,2,2之类的东西.由于它是二进…

Luogu P2463 [SDOI2008]Sandy的卡片

题目链接 \(Click\) \(Here\) 真的好麻烦啊。。事实证明&#xff0c;理解是理解&#xff0c;一定要认认真真把板子打牢&#xff0c;不然调锅的时候真的会很痛苦。。&#xff08;最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\)&#xff09; 这个题最开始我想的是\(RMQ\)遍历每一个…

java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...

1 日志路径带来的痛点Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径.本文借鉴 Tomcat 的…

常用数据结构

字典&#xff1a;即map&#xff0c;映射&#xff0c;通过key>value的方式直接查找与之对应的值&#xff0c;实现一般是hash表或二叉树跳跃表&#xff1a;本质是链表&#xff0c;只不过将数据进行提取分层&#xff0c;将总数据置为底层&#xff0c;提取2、4、的倍数为第一二层…

java jasypt_Jasypt

软件简介Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能&#xff0c;包括&#xff1a;密码Digest认证&#xff0c;文本和对象加密&#xff0c;集成hibernate&#xff0c;SpringSecurity(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1…

ZABBIX监控JAVA日志文件

最近开发人员有一个需求&#xff0c;监控java程序的报错日志&#xff0c;如日志中包含“ERROR”关键字的信息&#xff0c;就邮件告警&#xff0c;以下是具体实现方法。 一、创建模板以上是已经创建好的模板&#xff0c;名为“Template App Java logs”创建应用集二、创建监控项…