注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

使用 CPanel & WHM API 创建 自动备份网站文件、数据库等  

2013-08-15 17:20:31|  分类: Web技术-Servers |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一说明:
    首先,什么是cpanel我们这里不讨论(自行去GOOGLE吧),不过我们要提一下cpanel与WHM区别,我们摘一段官网的说明:

cPanel software for website owners provides one of the world’s most familiar user interfaces for managing a website. With cPanel software, website owners can easily manage their email accounts, databases, applications, security, FTP—and control every aspect of their websites.

WebHost Manager? (WHM?) provides hosting providers with a graphical interface to manage every account on a server. With WHM? software, managers can configure Services, Deployment Package, Control DNS and FTP configuration, accounts, security settings, and more.

那么简单来说:就是cPanel是个人账户的后台管理软件,而WHM则是管理所有个人账户的软件。可能有功能有些重叠,但大部分是不同的。实际上,WHM是用来管理cPanel的(更多信息GOOGLE吧)。

二 账号问题
    既然cpanel账户是由WHM来创建的,那么在WHM哪里创建cpanel账户呐?看图(假设你已经登录了WHM):
   使用Cpanel API 创建 自动备份网站数据 - fc_lamp - @fc_lamp


三 安装Cpanel&WHM 软件:
     这里我们也不多说,请直接参看官网(写的已经很详细了):
  
     不过,这里我提一下:在选系统时最好用CentOS5版本的(如果你是在win上开发,可以选择用virtualbox虚拟机来安装)。这样在安装cpanel过程中出的错误要少一些。


四 Cpanel API的使用
    这里我们将使用cpanel API中提共的备份功能(Fileman::fullbackup) ,这里要注意一下由于cpanel API的版本众多,你需要知道你到底需要哪个API来为你工作(http://etwiki.cpanel.net/twiki/bin/view/ApiDocs/Api1/)。
   我们这里将使用两种API类库来实现:

   任务描述: 备份一台cpanel 上某账户下的文件,并传送到另一台cpanel 上某账户某目录下。
   
  首先我们来创建配置文件:
  config.php

<?php
return array(

###################登录 Cpanel#############
'CPANEL_SERVER_ADDRESS'=>'xxxxx',// IP址址或者域名
'CPANEL_PORT_NUM'=>'2083',// 端口,一般是2083
'CPANEL_ADMIN_USERNAME'=>'test',// cPanel 账号
'CPANEL_ADMIN_PASSWORD'=>'xxxxx',// cPanel 密码

#####################下面的全是备份文件的配置####################
'COPY_METHOD'=>'passiveftp', //传输方式
'FTP_NOTIFY_EMAIL'=>'xxxx',//备份完成后,邮件通知
'FTP_SERVER_ADDRESS'=>'xxxx'//FTP 地址
'FTP_SERVER_PORT'=>'21', //端口
'FTP_USERNAME'=>'xxxxx',//FTP账号
'FTP_PASSWORD'=>'xxxxx',//FTP密码
'FTP_PATH_TO_COPY'=>'/'//FTP目录
);

(注:cpanel上如何创建ftp账户请GOOGLE.......)
  
1) 我们先 使用 https://github.com/CpanelInc/publicapi-php 类库来开发,此类库可以让我们使用cpanel更多的API:
    假设你已下载了此类库,现在我们来创建 runBackup1.php
   

<?php
/**
* The following code is based on https://github.com/CpanelInc/publicapi-php
* @internal
* http://etwiki.cpanel.net/twiki/bin/view/ApiDocs/Api1/
*/
try{
$config = require 'config.php';
require '/Cpanel/Util/Autoload.php';
$cpCfg = array(
'cpanel'=>array(
'service'=>array(
'cpanel' => array(
'host' => $config['CPANEL_SERVER_ADDRESS'],
'port'=>$config['CPANEL_PORT_NUM'],
'user' => $config['CPANEL_ADMIN_USERNAME'],
'password' => $config['CPANEL_ADMIN_PASSWORD'],
)
)
)
);

//Back Up files
$queryArgs = array(
$config['COPY_METHOD'],//dest dir
$config['FTP_SERVER_ADDRESS'],
$config['FTP_USERNAME'],
$config['FTP_PASSWORD'],
$config['FTP_NOTIFY_EMAIL'],
$config['FTP_SERVER_PORT'],
$config['FTP_PATH_TO_COPY']
);
$queryMF = array(
'module' => 'Fileman',//'Fileman',
'function' => 'fullbackup'//'getfile'
);


$cp = Cpanel_PublicAPI::getInstance($cpCfg);
$response = $cp->cpanel_api1_request('cpanel', $queryMF, $queryArgs);
$response = (array)$response;
$result = array();
foreach ($response as $v)
{
if(!is_object($v))
{
$result = @json_decode($v,1);
if(!empty($result))
{
break;
}
}
}
var_dump($result);

}catch (Exception $e)
{
print($e->getMessage());
}

现在我们运行(浏览器):  localhost/runBackup1.php
输出:
array
'apiversion' => string '1' (length=1)
'type' => string 'event' (length=5)
'module' => string 'Fileman' (length=7)
'func' => string 'fullbackup' (length=10)
'source' => string 'module' (length=6)
'data' =>
array
'result' => string '' (length=0)
'event' =>
array
'result' => int 1
我们再登录cpenl进入相应的目录看看:
backup-8.15.2013_04-41-49_test.tar.gz
包已创建。

2)  我们再来使用直接基于 https://github.com/CpanelInc/xmlapi-php
      假设你已下载此库,我们来创建 runBackup2.php
      

<?php
/**
* The following code is based on https://github.com/CpanelInc/xmlapi-php
* @internal
* http://etwiki.cpanel.net/twiki/bin/view/ApiDocs/Api1/
*/
require 'xmlapi.php';
$config = require 'config.php';

$xmlapi = new xmlapi($config['CPANEL_SERVER_ADDRESS']);
$xmlapi->password_auth($config['CPANEL_ADMIN_USERNAME'],$config['CPANEL_ADMIN_PASSWORD']);
$xmlapi->set_port($config['CPANEL_PORT_NUM']);

$queryArgs = array(
$config['COPY_METHOD'],//dest dir
$config['FTP_SERVER_ADDRESS'],
$config['FTP_USERNAME'],
$config['FTP_PASSWORD'],
$config['FTP_NOTIFY_EMAIL'],
$config['FTP_SERVER_PORT'],
$config['FTP_PATH_TO_COPY']
);

$xmlapi->set_output('json');
$result = $xmlapi->api1_query($config['CPANEL_ADMIN_USERNAME'],'Fileman','fullbackup',$queryArgs);
$result = json_decode($result,1);
var_dump($result);

现在我们运行(浏览器):  localhost/runBackup2.php
输出:我们会看到相同的结果。


另外:当完成备份后,服务器会发LOG邮件给你。如果你在邮件里发出了下面这些问题,一般都是服务器端没有设置正确的原因(官网上也有很多人在问:http://forums.cpanel.net/f49/remote-backup-problem-220312.html)。
Net::FTP=GLOB(0x127d008)<<< 421 Timeout
Net::FTP=GLOB(0x127d008)>>> QUIT
Net::FTP: Unexpected EOF on command channel at /usr/local/cpanel/bin/ftpput line 22.
这个问题具体是怎么会事,我也没有找出答案,当我换了一台远端机之后,就成功了。
Net::FTP=GLOB(0xeca008)<<< 226-File successfully transferred
Net::FTP=GLOB(0xeca008)<<< 226 4.925 seconds (measured here), 319.50 Kbytes per second
Net::FTP=GLOB(0xeca008)>>> QUIT
Net::FTP=GLOB(0xeca008)<<< 221-Goodbye. You uploaded 1574 and downloaded 0 kbytes.
Net::FTP=GLOB(0xeca008)<<< 221 Logout.





   
    

   




 






  评论这张
 
阅读(743)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017