CPanel面板利用php实现自动备份网站文件

 更新时间:2016年11月25日 17:26  点击:1454
CPanel面板是一款非常强大的虚拟主机管理面板了,如果你是空间商估计这个cp面板你不陌生哦,下面我来介绍利用php实现自动备份网站文件.

 

 代码如下 复制代码
<?php
// PHP script to allow periodic cPanel backups automatically.
// Based on script posted by max.hedroom in cpanel.net forums
// This script contains passwords. KEEP ACCESS TO THIS FILE SECURE!
 
// ********* 下面项目需要设定 *********
 
// cPanel登录信息
$cpuser = "**"; // CPanel帐号
$cppass = "***"; // CPanel密码
$domain = "***"; // cPanel所在域名或IP
$skin = "x3"; // 正在使用的cPanel风格,默认"x3"。
 
 
/************** 备份目的地 ***************
"homedir" - 本地主目录
"ftp" - 远程FTP备份(主动模式)
"passiveftp" - 远程FTP备份(被动模式)
"scp" - 加密传输(需服务器支持)
****************************************/
$savedir = "ftp"; // 备份目的地,默认"homedir",即只做本地备份。
 
// FTP上传的信息(备份目的地为本地的,可不填)
 
$ftpuser = "***"; // FTP帐号
$ftppass = "***!"; // FTP密码
$ftphost = "***"; // FTP服务器IP
$ftpport = "21"; // FTP端口,默认21
$ftprdir = "/"; // 远程FTP目录,默认"/"
 
// 通知信息
$notifyemail = "**@gmail.com"; // 信息反馈邮件地址
 
// 安全模式
$secure = 1; // 0为标准http, 1为ssl(需要主机支持ssl)
 
// 设定值为1时会在排程记录中产生网页报告
$debug = 0;
 
// *********** 以下内容不要更改! *********
 
if ($secure) {
   $url = "ssl://".$domain;
   $port = 2083;
} else {
   $url = $domain;
   $port = 2082;
}
 
$socket = fsockopen($url,$port);
if (!$socket) { echo "Failed to open socket connection... Bailing out!n"; exit; }
 
// Encode authentication string
$authstr = $cpuser.":".$cppass;
$pass = base64_encode($authstr);
 
$params = "dest=$savedir&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&port=$ftpport&rdir=$ftprdir&submit=Generate Backup";
 
// Make POST to cPanel
fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0rn");
fputs($socket,"Host: $domainrn");
fputs($socket,"Authorization: Basic $passrn");
fputs($socket,"Connection: Closern");
fputs($socket,"rn");
 
// Grab response even if we don't do anything with it.
while (!feof($socket)) {


以上代码复制保存为: fullbackup.php文件,上传到public_html以外的目录

这个全局脚本包含cPanel的登录帐号和密码,为了安全考虑,需要将这个脚本放到public_html文件夹以外的文件夹中,比如:“/home/yourname/backup”,并设置该文件夹的权限为600。切记!

2.填写好相关信息,修改文件名为fullbackup.php
3.将上述脚本上传到“/home/yourdomain/beifen”目录。(没有可以新建beifen目录)
4.将beifen目录的权限改为600
5.打开cpanel面板的时钟守护作业(Cron Jobs)。

选择作业频率,在command栏输入

 代码如下 复制代码

1 /usr/bin/php -q /home/yourname/backup/fullbackup.php

微信公众平台推出一自定义菜单功能,我们可以简单的直接在后台编辑自定义菜单,也可以利用api来设置菜单,下面我来介绍一下操作方法

 腾讯微信3月19日正式公布公众平台自定义菜单功能。目前该功能仅提供给企业和机构,且内测资格需要申请。对于这一新增功能,目前仅有少数账号已经开通。至此,微信的商业化价值被进一步挖掘出来。

 

微信公众平台推出自定义菜单功能

 

   开发者可利用该功能为公众账号的会话界面底部增加自定义菜单。用户点击菜单中的选项,可以调出相应的回复信息或网页链接。

菜单创建
接口说明
通过POST一个特定结构体,实现在微信客户端创建自定义菜单。
请求说明
http请求方式:POST

https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

结构体其实就是一个json格式的字符串,相信很多朋友就卡在这里了,怎么往这个接口地址 post 一个结构体呢,实现代码如下:

 代码如下 复制代码

public static void main(String[] args) throws Exception {
    URL url = new URL("https://api.weixin.qq.com/cgi-bin
                                 /menu/create?access_token=TOKEN");
        String responeJsonStr = "{"+
                                     ""button":["+
                                     "{"name":"酒店预订","+
                                     ""sub_button":["+
                             "{"+
                                ""type":"click","+
                                ""name":"附近酒店","+
                                ""key":"jintoneinn488878-1""+
                            "},"+
                            "{"+
                                ""type":"click","+
                                ""name":"查找酒店","+
                                ""key":"jintoneinn488878-2""+
                            "}"+
                        "]"+
                    "}"
                "]"+
            "}";
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.connect();
        conn.getOutputStream().write(responeJsonStr.getBytes("utf-8"));
        InputStream is = conn.getInputStream();
        BufferedReader in = new BufferedReader(new InputStreamReader(is,"utf-8"));
        StringBuffer buffer = new StringBuffer();
        String line = "";
        while ((line = in.readLine()) != null) {
            buffer.append(line);
        }
        System.out.println(buffer.toString()); 
    }


菜单查询
接口说明

查询当前使用的自定义菜单结构。

请求说明

http请求方式:GET

https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
返回说明

对应创建接口,正确的Json返回结果:

 代码如下 复制代码

{"menu":{"button":[{"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC","sub_button":[]},{"type":"click","name":"歌手简介","key":"V1001_TODAY_SINGER","sub_button":[]},{"name":"菜单","sub_button":[{"type":"click","name":"hello word","key":"V1001_HELLO_WORLD","sub_button":[]},{"type":"click","name":"赞一下我们","key":"V1001_GOOD","sub_button":[]}]}]}}


菜单删除
接口说明

取消当前使用的自定义菜单。

请求说明

http请求方式:GET
https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
返回说明

对应创建接口,正确的Json返回结果:

 代码如下 复制代码
{"errcode":0,"errmsg":"ok"}

 

怎么调用ckeditor呢,下面小编来给大家总结一处利用php 调用ckeditor编辑器与js调用ckeditor的方法吧,其它脚本调用方法大致一样了。

PHP调用FCKeditor 

将FCKeditor放在网站根目录
在PHP文件里面,包含/FCKeditor/ckeditor/" target="_blank">fckeditor.php文件

在网页中需要放置该编辑器的地方插入下面代码即可调用:

 代码如下 复制代码
   <?php
    //包含fckeditor类
    include("fckeditor/fckeditor.php") ;
    //创建一个FCKeditor,表单名称为 jzleditor
    $oFCKeditor = new FCKeditor("jzleditor");
    //设置编辑器路径
    $oFCKeditor->BasePath = "fckeditor/";
    $oFCKeditor->ToolbarSet = "Default";//工具按钮
    $oFCKeditor->Value =$cont; //;设置初始内容
    $oFCKeditor->Width="100%"; //设置它的宽度
    $oFCKeditor->Height="550px"; //设置它的高度
    $oFCKeditor->Create();
   ?>

输入内容,提交后,在处理的文件中通过$_POST["jzleditor"]来取得输入的内容

js调用FCKeditor 

CKEDITOR的使用很简单,先download CKEDITOR 3.6.1(默认是PHP版的),然后在调用页面的head中,写下如下两段js:

 代码如下 复制代码

<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<script type="text/javascript">                                                                    window.onload = function()
        {
         CKEDITOR.replace( "content" );
        };

</script>

注意:这里的content是<textarea>的名称,如下所示:

<textarea name="content">ddd</textarea>如果是3.6.2版本,该语句可能要写成:

<textarea name="content" class="ckeditor">ddd</textarea>

版本差异造成的问题,请大家在运行时注意这个问题。

在下一个页面根据name值content获取相应的值

下面我来给大家介绍在php中操作excel两个实例,一个是利用PHP-ExcelReader导入excel并输出,另一种是直接输入excel并导出,下面看实例。


借助PHP-ExcelReader这个开源类,我们可以轻松地导入Excel文件数据,示例代码如下:

PHP-ExcelReader下载地址:http://sourceforge.net/projects/phpexcelreader/

例.导入Excel文件

 代码如下 复制代码

<?php
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('gbk');
$data->read('test.xls');
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
    for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
        echo """.$data->sheets[0]['cells'][$i][$j]."",";
    }
    echo "n";
}
?>

例.phpexcel导到excel

1.    test.php

 代码如下 复制代码

require_once 'reader.php';

// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();

// Set output Encoding.
$data->setOutputEncoding('gbk');

//”data.xls”是指要导入到mysql中的excel文件
$data->read('data.xls');

@ $db = mysql_connect('localhost', 'root', '123456') or
       die("Could not connect to database.");//连接数据库
mysql_query("set names 'gbk'");//输出中文
mysql_select_db('mydb');       //选择数据库
error_reporting(E_ALL ^ E_NOTICE);

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
//以下注释的for循环打印excel表数据
/*
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
            echo """.$data->sheets[0]['cells'][$i][$j]."",";
           }
           echo "n";
//PHP开源代码


*/
//以下代码是将excel表数据【3个字段】插入到mysql中,根据你的excel表字段的多少,改写以下代码吧!
    $sql = "INSERT INTO test VALUES('".
               $data->sheets[0]['cells'][$i][1]."','".
                 $data->sheets[0]['cells'][$i][2]."','".
                 $data->sheets[0]['cells'][$i][3]."')";
    echo $sql.'
';
       $res = mysql_query($sql);
}

?>

例.导出excel文件


比如我需要一个做php导出 excel的的程序,只需要把相关的数据导出到excel表就可以了,这么简单的操作就不需要用那些类库什么的了。直接用header的方式就可以了:header("Content-type:application/vnd.ms-excel");

看看代码:

 代码如下 复制代码

<?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=Export_test.xls");
$tab="t"; $br="n";
$head="编号".$tab."备注".$br;
//输出内容如下: 
echo $head.$br;
echo  "test321318312".$tab; 
echo  "string1";
echo  $br;

echo  "330181199006061234".$tab;  //直接输出会被Excel识别为数字类型
echo  "number";
echo  $br;

echo  "="330181199006061234"".$tab;  //原样输出需要处理
echo  "string2";
echo  $br;
?>

在导出后会发现一个问题,如果数据是数字会出现一些意想不到的情况。比如,"012345",在excel中会变成"12345";如果输入身份证号码这样的长数字,在excel中会用科学计数法表示出来,并且最后的四位数字会出现偏差,变位0000等情况。这就需要把单元格设置为文本格式,方法是
echo  "="330181199006061234""如果程序是utf-8编码的,还需要用iconv函数去转码,不然是会乱码的,乱码的。

另word格式导入类似,,指定header就可以了:

 代码如下 复制代码

header("Content-Type:   application/msword");       
header("Content-Disposition:   attachment;   filename=doc.doc"); 

因为工作中我们经常会需要使用到Curl多线程来处理一些事情,不得己就深入了对Curl多线程研究了,下面小编来给各位同学介绍一下Curl多线程实例与原理吧。

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。

curl_multi_add_handle
curl_multi_close
curl_multi_exec
curl_multi_getcontent
curl_multi_info_read
curl_multi_init
curl_multi_remove_handle
curl_multi_select

一般来说,想到要用这些函数时,目的显然应该是要同时请求多个url,而不是一个一个依次请求,否则不如自己循环去调curl_exec好了。

步骤总结如下:

第一步:调用curl_multi_init
第二步:循环调用curl_multi_add_handle
这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。
第三步:持续调用curl_multi_exec
第四步:根据需要循环调用curl_multi_getcontent获取结果
第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close
第六步:调用curl_multi_close
这里有PHP手册上的例子:

 代码如下 复制代码

<?php 

// 创建一对cURL资源 

$ch1 = curl_init(); 

$ch2 = curl_init(); 

  

// 设置URL和相应的选项 

curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); 

curl_setopt($ch1, CURLOPT_HEADER, 0); 

curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); 

curl_setopt($ch2, CURLOPT_HEADER, 0); 

  

// 创建批处理cURL句柄 

$mh = curl_multi_init(); 

  

// 增加2个句柄 

curl_multi_add_handle($mh,$ch1); 

curl_multi_add_handle($mh,$ch2); 

  

$active = null; 

// 执行批处理句柄 

do { 

    $mrc = curl_multi_exec($mh, $active); 

} while ($mrc == CURLM_CALL_MULTI_PERFORM); 

  

while ($active && $mrc == CURLM_OK) { 

    if (curl_multi_select($mh) != -1) { 

        do { 

            $mrc = curl_multi_exec($mh, $active); 

        } while ($mrc == CURLM_CALL_MULTI_PERFORM); 

    } 

  

// 关闭全部句柄 

curl_multi_remove_handle($mh, $ch1); 

curl_multi_remove_handle($mh, $ch2); 

curl_multi_close($mh); 

  

?>

整个使用过程差不多就是这样,但是,这个简单代码有个致命弱点,就是在do循环的那段,在整个url请求期间是个死循环,它会轻易导致CPU占用100%。

现在我们来改进它,这里要用到一个几乎没有任何文档的函数curl_multi_select了,虽然C的curl库对select有说明,但是,php里的接口和用法确与C中有不同。

把上面do的那段改成下面这样:

 代码如下 复制代码

 

do { 

                        $mrc = curl_multi_exec($mh,$active); 

                 } while ($mrc == CURLM_CALL_MULTI_PERFORM); 

                while ($active and $mrc == CURLM_OK) { 

                        if (curl_multi_select($mh) != -1) { 

                                do { 

                                        $mrc = curl_multi_exec($mh, $active); 

                                 } while ($mrc == CURLM_CALL_MULTI_PERFORM); 

                         } 

                 }

因为$active要等全部url数据接受完毕才变成false,所以这里用到了curl_multi_exec的返回值判断是否还有数据,当有数据的时候就不停调用curl_multi_exec,暂时没有数据就进入select阶段,新数据一来就可以被唤醒继续执行。这里的好处就是CPU的无谓消耗没有了。

另外:还有一些细节的地方可能有时候要遇到:

控制每一个请求的超时时间,在curl_multi_add_handle之前通过curl_setopt去做:
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

判断是否超时了或者其他错误,在curl_multi_getcontent之前用:curl_error($conn[$i]);


本类的特点:

运行非常稳定。

设置一个并发就会始终以这个并发数进行工作,即使通过回调函数添加任务也不影响。
CPU占用极低,绝大部分CPU消耗在用户的回调函数上。
内存利用率高,任务数量较多(15W个任务占用内存会超过256M)可以使用回调函数添加任务,个数自定。
能够最大限度的占用带宽。
链式任务,比如一个任务需要从多个不同的地址采集数据,可以通过回调一气呵成。
能够对CURL错误进行多次尝试,次数自定(大并发一开始容易产生CURL错误,网络状况或对方服务器稳定性也有可能产生CURL错误)。
回调函数相当灵活,可以多种类型任务同时进行(比如下载文件,抓取网页,分析404可以在一个PHP进程中同时进行)。
可以非常容易的定制任务类型,比如检查404,获取redirect的最后url等。
可以设置缓存,挑战产品节操。

不足:
不能充分利用多核CPU(可以开多个进程解决,需要自己处理任务分割等逻辑)。
最大并发500(或512?),经过测试是CURL 内部限制,超过最大并发会导致总是返回失败。
目前没有断点续传功能。
目前任务是原子性的,不能对一个大文件分为几部分分别开线程下载。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • MyBatis-Plus自动填充功能失效导致的原因及解决

    这篇文章主要介绍了MyBatis-Plus自动填充功能失效导致的原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31