<?php
/**
* Plugin Name: goodao CDN
* Plugin URI: #
* Description: goodao CDN
* Version: 1.0.00
* Author: #
* Author URI: #
*/
define ( 'Easyiit_cdn_FILE', __FILE__);
define ( 'Easyiit_cdn_DIR', rtrim ( plugin_dir_path ( Easyiit_cdn_FILE ), '/' ) );
define ( 'Easyiit_cdn_URL', rtrim ( plugin_dir_url ( Easyiit_cdn_FILE ), '/' ) );
add_action('admin_menu', 'easyiit_cnd_init');
function easyiit_cnd_init() {
add_menu_page('goodao CDN', 'goodao CDN', 7, 'easyiit_cdn');
add_submenu_page('easyiit_cdn', '设置', '设置', 7, 'easyiit_cdn', 'easyiit_cdn_setting');
}
function easyiit_cdn_setting() {
$msg = '';
if(isset($_POST['dosubmit'])){
$cdn_setting = $_POST['setting'];
if($_POST['setting']['dir_name'] == ''){
$msg = '<p style="color: red;">设置失败,CDN文件夹名称不能为空</p>';
}else{
update_option( "gd_cdn_setting", $cdn_setting );
}
}
$cdn_setting = get_option("gd_cdn_setting");
?>
<script src="<?php echo Easyiit_cdn_URL;?>/include/jquery.min.1.9.2.js"></script>
<script src="<?php echo Easyiit_cdn_URL;?>/include/layer/layer.js"></script>
<div class="wrap">
<form id="posts-filter" method="post">
<?php if($msg){ echo $msg;}?>
<h2 class="title">CDN设置</h2>
<table class="form-table permalink-structure">
<tbody>
<tr>
<th>
<label>CDN文件夹名称:</label>
</th>
<td>
<input id='dir_name' name="setting[dir_name]" style="width:350px" value="<?php echo $cdn_setting['dir_name'];?>">
</td>
</tr>
<tr>
<th>
<label>正式域名:</label>
</th>
<td>
<input id='weburl' name="setting[weburl]" style="width:350px" value="<?php echo $cdn_setting['weburl'];?>">
</td>
</tr>
<tr>
<th>
<label>是否启用CDN:</label>
</th>
<td>
<input type='radio' name="setting[active_cdn]" <?php if($cdn_setting['active_cdn'] == 1) echo 'checked';?> value="1"/>是
<input type='radio' name="setting[active_cdn]" <?php if($cdn_setting['active_cdn'] == 0) echo 'checked';?> value="0"/>否
</td>
</tr>
<tr>
<th>
<label>是否启用pagespeed:</label>
</th>
<td>
<input type='radio' name="setting[active_pagespeed]" <?php if($cdn_setting['active_pagespeed'] == 1) echo 'checked';?> value="1"/>是
<input type='radio' name="setting[active_pagespeed]" <?php if($cdn_setting['active_pagespeed'] == 0) echo 'checked';?> value="0"/>否
</td>
</tr>
</tbody>
</table>
<p class="submit"><input type="submit" name="dosubmit" id="submit" class="button button-primary" value="保存更改"></p>
</form>
<input type='button' id='change_to_cdn' name="change_to_cdn" value="描述链接更新为CDN链接"><br/><br/>
<input type='button' id='change_to_loc' name="change_to_loc" value="描述链接更新为本地链接"><br/><br/>
<input type='button' id='update_to_cdn' name="update_to_cdn" value="更新图片到CDN"><br/><br/>
<input type='button' id='update_style_to_cdn' name="update_style_to_cdn" value="更新静态文件到CDN"><br/><br/>
<input type='button' id='update_static_as_cdn' name="update_static_as_cdn" value="更新静态文件路径为CDN"><br/><br/>
<input type='button' id='update_static_as_loc' name="update_static_as_loc" value="更新静态文件路径为本地路径">
</div>
<script>
$(function(){
$("#change_to_cdn").click(function(){
var index = layer.load(1,{shade: [0.5, '#393D49']});
$.get("/wp-admin/admin-ajax.php?action=easycdn_change_url&v=qqs&type=1", function(result){
if(result == 200){
layer.close(index);
layer.msg('更新成功');
}else{
layer.close(index);
layer.msg('更新失败,请稍后重试');
}
});
});
$("#change_to_loc").click(function(){
var index = layer.load(1,{shade: [0.5, '#393D49']});
$.get("/wp-admin/admin-ajax.php?action=easycdn_change_url&v=qqs&type=2", function(result){
if(result == 200){
layer.close(index);
layer.msg('更新成功');
}else{
layer.close(index);
layer.msg('更新失败,请稍后重试');
}
});
});
$("#update_to_cdn").click(function(){
var index = layer.load(1,{shade: [0.5, '#393D49']});
$.get("/wp-admin/admin-ajax.php?action=easycdn_update", function(result){
if(result == 200){
layer.close(index);
layer.msg('更新成功');
}else{
layer.close(index);
layer.msg('更新失败,请稍后重试');
}
});
});
$("#update_style_to_cdn").click(function(){
var index = layer.load(1,{shade: [0.5, '#393D49']});
$.get("/wp-admin/admin-ajax.php?action=easycdn_zip", function(result){
if(result == 200){
layer.close(index);
layer.msg('更新成功');
}else{
layer.close(index);
layer.msg('更新失败,请稍后重试');
}
});
});
$("#update_static_as_cdn").click(function(){
var index = layer.load(1,{shade: [0.5, '#393D49']});
$.get("/wp-admin/admin-ajax.php?action=easycdn_change_static_url", function(result){
if(result == 200){
layer.close(index);
layer.msg('更新成功');
}else{
layer.close(index);
layer.msg('更新失败,请稍后重试');
}
});
});
$("#update_static_as_loc").click(function(){
var index = layer.load(1,{shade: [0.5, '#393D49']});
$.get("/wp-admin/admin-ajax.php?action=easycdn_change_static_url&type=2", function(result){
if(result == 200){
layer.close(index);
layer.msg('更新成功');
}else{
layer.close(index);
layer.msg('更新失败,请稍后重试');
}
});
});
});
</script>
<div class="clear"></div>
<?php
}
//输出图片链接
add_action( 'wp_ajax_nopriv_easycdn', 'easyiit_cdn' );
add_action( 'wp_ajax_easycdn', 'easyiit_cdn' );
function easyiit_cdn() {
if(isset($_GET['v']) && $_GET['v'] == 'qqs'){
$finish_time = get_option('gd_cdn_finish',true);
$cdn_setting = get_option("gd_cdn_setting");
$dirname = $cdn_setting['dir_name'];
$path = ABSPATH.'uploads';
$files = get_all_files($path);
$home_url = home_url();
foreach($files as $k=>$file){
if($finish_time > 1){
$c_time = filemtime(urldecode($file));
if($finish_time > $c_time){
unset($files[$k]);
}else{
//$files[$k] = str_replace(ABSPATH,$home_url.'/',$file);
$files[$k] = str_replace($path.'/','',$file);
}
}else{
//$files[$k] = str_replace(ABSPATH,$home_url.'/',$file);
$files[$k] = str_replace($path.'/','',$file);
}
}
$data['dir'] = $dirname;
$data['domain'] = home_url('/');
$data['files'] = $files;
$data['zip'] = array();
if(file_exists(ABSPATH.'style.zip')){
$data['zip'][] = 'style.zip';
}
print_r(json_encode($data));exit;
}else{
echo '';exit;
}
}
//压缩style文件夹
add_action( 'wp_ajax_nopriv_easycdn_zip', 'easyiit_cdn_zip' );
add_action( 'wp_ajax_easycdn_zip', 'easyiit_cdn_zip' );
function easyiit_cdn_zip() {
require_once(__DIR__.'/makezip.class.php');
$makeZip = new makezip();
//print_r(ABSPATH.'style.zip');exit;
if(is_dir(ABSPATH.'style/')){
$res = $makeZip->zip(ABSPATH.'style.zip',ABSPATH.'style/');
if($res){
if(strpos(home_url(),'quanqiusou.cn') !== false || strpos(home_url(),'goodao.net') !== false){
$res_c = file_get_contents("http://imgcn.goodao.net/ajax_downzip.php?w=".urlencode(home_url('/')));
}else{
$res_c = file_get_contents("http://img.goodao.net/ajax_downzip.php?w=".urlencode(home_url('/')));
}
if($res_c == 200){
echo 200;exit;
}else{
echo $res_c;exit;
}
}else{
echo 1;exit;
}
}else{
echo 2;exit;
}
}
//改变header和footer的路径为cdn路径
add_action( 'wp_ajax_nopriv_easycdn_change_static_url', 'easyiit_cdn_change_static_url' );
add_action( 'wp_ajax_easycdn_change_static_url', 'easyiit_cdn_change_static_url' );
function easyiit_cdn_change_static_url() {
if(isset($_GET['type'])){
$type = $_GET['type'];
}else{
$type = 1;
}
$theme_dir = get_stylesheet_directory();
$cdn_setting = get_option("gd_cdn_setting");
$dirname = $cdn_setting['dir_name'];
if($type == 1){
if(strpos(home_url(),'quanqiusou.cn') !== false || strpos(home_url(),'goodao.net') !== false){
$data_header = file_get_contents($theme_dir.'/header.php');
$data_header = str_replace('<?php echo home_url("/"); ?>style/','//cdn.globalso.com/'.$dirname.'/style/',$data_header);
file_put_contents($theme_dir.'/header.php',$data_header);
$data_footer = file_get_contents($theme_dir.'/footer.php');
$data_footer = str_replace('<?php echo home_url("/"); ?>style/','//cdn.globalso.com/'.$dirname.'/style/',$data_footer);
$data_footer = str_replace('<?php echo home_url("/"); ?>globalso.js','//cdn.globalso.com/globalso.js',$data_footer);
file_put_contents($theme_dir.'/footer.php',$data_footer);
}else{
$data_header = file_get_contents($theme_dir.'/header.php');
$data_header = str_replace('<?php echo home_url("/"); ?>style/','//cdnus.globalso.com/'.$dirname.'/style/',$data_header);
file_put_contents($theme_dir.'/header.php',$data_header);
$data_footer = file_get_contents($theme_dir.'/footer.php');
$data_footer = str_replace('<?php echo home_url("/"); ?>style/','//cdnus.globalso.com/'.$dirname.'/style/',$data_footer);
$data_footer = str_replace('<?php echo home_url("/"); ?>globalso.js','//cdnus.globalso.com/globalso.js',$data_footer);
file_put_contents($theme_dir.'/footer.php',$data_footer);
}
echo 200;exit;
}else{
if(strpos(home_url(),'quanqiusou.cn') !== false || strpos(home_url(),'goodao.net') !== false){
$data_header = file_get_contents($theme_dir.'/header.php');
$data_header = str_replace('//cdncn.goodao.net/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_header);
$data_header = str_replace('//cdn.globalso.com/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_header);
file_put_contents($theme_dir.'/header.php',$data_header);
$data_footer = file_get_contents($theme_dir.'/footer.php');
$data_footer = str_replace('//cdncn.goodao.net/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_footer);
$data_footer = str_replace('//cdncn.goodao.net/globalso.js','<?php echo home_url("/"); ?>globalso.js',$data_footer);
$data_footer = str_replace('//cdn.globalso.com/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_footer);
$data_footer = str_replace('//cdn.globalso.com/globalso.js','<?php echo home_url("/"); ?>globalso.js',$data_footer);
file_put_contents($theme_dir.'/footer.php',$data_footer);
}else{
$data_header = file_get_contents($theme_dir.'/header.php');
$data_header = str_replace('//cdn.goodao.net/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_header);
$data_header = str_replace('//cdnus.globalso.com/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_header);
file_put_contents($theme_dir.'/header.php',$data_header);
$data_footer = file_get_contents($theme_dir.'/footer.php');
$data_footer = str_replace('//cdn.goodao.net/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_footer);
$data_footer = str_replace('//cdn.goodao.net/globalso.js','<?php echo home_url("/"); ?>globalso.js',$data_footer);
$data_footer = str_replace('//cdnus.globalso.com/'.$dirname.'/style/','<?php echo home_url("/"); ?>style/',$data_footer);
$data_footer = str_replace('//cdnus.globalso.com/globalso.js','<?php echo home_url("/"); ?>globalso.js',$data_footer);
file_put_contents($theme_dir.'/footer.php',$data_footer);
}
echo 200;exit;
}
}
function get_all_files($dir){
$files = array();
if(@$handle = opendir($dir)) { //注意这里要加一个@,不然会有warning错误提示:)
while(($file = readdir($handle)) !== false) {
if($file != ".." && $file != ".") { //排除根目录;
if(is_dir($dir."/".$file)) { //如果是子文件夹,就进行递归
//$files[$file] = get_all_files($dir."/".$file);
} else { //不然就将文件的名字存入数组
if((strpos('GeoIPv6.dat',$file) === false) || (strpos('GeoIP.dat',$file) === false)){
$files[] = $dir.'/'.urlencode($file);
}
}
}
}
closedir($handle);
return $files;
}
}
//完成图片同步回调
add_action( 'wp_ajax_nopriv_easycdn_finish', 'easyiit_cdn_callback' );
add_action( 'wp_ajax_easycdn_finish', 'easyiit_cdn_callback' );
function easyiit_cdn_callback() {
if(isset($_GET['code']) && $_GET['code'] == 200){
update_option( "gd_cdn_finish", time() );
echo 200;exit;
}else{
echo '- -!';exit;
}
}
//更新描述图片地址
add_action( 'wp_ajax_nopriv_easycdn_change_url', 'easyiit_cdn_change_descurl' );
add_action( 'wp_ajax_easycdn_change_url', 'easyiit_cdn_change_descurl' );
function easyiit_cdn_change_descurl() {
if(isset($_GET['v']) && $_GET['v'] == 'qqs'){
global $wpdb;
$cdn_setting = get_option("gd_cdn_setting");
if($_GET['type'] == 1){
if(strpos(home_url(),'quanqiusou.cn') !== false || strpos(home_url(),'goodao.net') !== false){
$sql = "UPDATE `wp_posts` SET `post_content` = replace( `post_content` , '".home_url('/')."uploads/', '//cdncn.goodao.net/".$cdn_setting['dir_name']."/')";
}else{
$sql = "UPDATE `wp_posts` SET `post_content` = replace( `post_content` , '".home_url('/')."uploads/', '//cdn.goodao.net/".$cdn_setting['dir_name']."/')";
}
$wpdb->query($sql);
echo 200;exit;
}else{
if(strpos(home_url(),'quanqiusou.cn') !== false || strpos(home_url(),'goodao.net') !== false){
$sql = "UPDATE `wp_posts` SET `post_content` = replace( `post_content` , '//cdncn.goodao.net/".$cdn_setting['dir_name']."/' ,'".home_url('/')."uploads/')";
}else{
$sql = "UPDATE `wp_posts` SET `post_content` = replace( `post_content` , '//cdn.goodao.net/".$cdn_setting['dir_name']."/' ,'".home_url('/')."uploads/')";
}
$wpdb->query($sql);
echo 200;exit;
}
}else{
echo 1;exit;
}
}
//手动更新图片
add_action( 'wp_ajax_nopriv_easycdn_update', 'easyiit_cdn_update' );
add_action( 'wp_ajax_easycdn_update', 'easyiit_cdn_update' );
function easyiit_cdn_update() {
$home_url = home_url();
if(strpos($home_url,'quanqiusou.cn') !== false || strpos($home_url,'goodao.net') !== false){
$type = 1;
if(isset($_GET['ftype']) && $_GET['ftype']){
$type = $_GET['ftype'];
}
if($type == 1){
$data = curl_zgj($home_url.'/wp-admin/admin-ajax.php?action=wpfc_delete_cache');
}else{
/* 执行rsync同步cdn start */
$domain = parse_url(home_url());
if(strpos($domain['host'],'goodao.net') !== false || strpos($domain['host'],'quanqiusou.cn') !== false){
$shell_ar = file_get_contents("http://www.quanqiusou.cn/extend_api/api/rsync.txt");
$shell_ar = explode("\n",$shell_ar);
foreach ($shell_ar as $v){
if($v){
$v = trim($v);
if(strpos($v,$domain['host']) !== false || strpos($v,str_replace('.','_',$domain['host'])) !== false){
$ar_info = explode('|',$v);
if($type == 2) {
shell_exec('rsync -avu --progress /www/wwwroot/'.$ar_info[0].'/style/ root@1.116.183.193::cdn-'.$ar_info[2].'-style &> /dev/null &');
}elseif($type == 3){
shell_exec('rsync -avu --progress /www/wwwroot/'.$ar_info[0].'/uploads/ root@1.116.183.193::cdn-'.$ar_info[2].'-uploads &> /dev/null &');
}
}
}
}
}
/* 执行rsync同步cdn end */
}
echo 200;exit;
}else{
if(strpos($home_url,'https://') !== false){
$http = 'https';
}else{
$http = 'http';
}
$ch = curl_init();
$timeout = 60;
curl_setopt ($ch, CURLOPT_URL, $http.'://img.goodao.net/ajax_deal_update.php?v=qqs&url='.$home_url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false);//这个是重点。
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false);// https请求 不验证证书和hosts
curl_setopt ($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11');
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo 200;exit;
}
}
//生成sitemap文件
add_action( 'wp_ajax_nopriv_easy_create_sitemap_xml', 'easy_sitemap_xml' );
add_action( 'wp_ajax_easy_create_sitemap_xml', 'easy_sitemap_xml' );
function easy_sitemap_xml() {
$home_url = home_url('/');
$home_url_nohttp = str_replace('https:','',str_replace('http:','',$home_url));
$cdn_setting = get_option("gd_cdn_setting");
$weburl_nohttp = str_replace('https:','',str_replace('http:','',$cdn_setting['weburl']));
$sitemap_index = curl_zgj($home_url.'sitemap.xml');
if(strpos($sitemap_index,'urlset xmlns=') !== false){
if(!is_dir(ABSPATH.'wp-content/cache/all/')){
mkdir(ABSPATH.'wp-content/cache/all/',0755);
}
$sitemap_index_data = $sitemap_index;
if(!file_exists(ABSPATH.'wp-content/cache/all/sitemap.xsl')){
$data_xml_sytle_s = curl_zgj($home_url.'wp-content/plugins/all-in-one-seo-pack/sitemap.xsl');
file_put_contents(ABSPATH.'wp-content/cache/all/sitemap.xsl',$data_xml_sytle_s);
}
if(!file_exists(get_home_path().'wp-content/cache/all/sitemap_translate.xsl')){
$data_xml_sytle = curl_zgj($home_url.'wp-content/plugins/prisna-wp-translate/styles/sitemap.xsl');
file_put_contents(ABSPATH.'wp-content/cache/all/sitemap_translate.xsl',$data_xml_sytle);
}
$sitemap_index_data = str_replace('wp-content/plugins/all-in-one-seo-pack/sitemap.xsl','sitemap.xsl',$sitemap_index_data);
$sitemap_index_data = str_replace($home_url,$cdn_setting['weburl'],$sitemap_index_data);
$sitemap_index_data = str_replace($home_url_nohttp,$weburl_nohttp,$sitemap_index_data);
file_put_contents(ABSPATH.'wp-content/cache/all/sitemap.xml',$sitemap_index_data);
$isMatched = preg_match_all('/<loc>(.*)<\/loc>/', $sitemap_index, $matches);
if(is_array($matches[1])){
foreach ($matches[1] as $v){
$tmp_pa = parse_url($v);
$sitemap_t = curl_zgj($v);
$sitemap_t = str_replace('wp-content/plugins/all-in-one-seo-pack/sitemap.xsl','sitemap.xsl',$sitemap_t);
$sitemap_t = str_replace($home_url_nohttp,$weburl_nohttp,$sitemap_t);
$sitemap_t = str_replace(home_url(),$cdn_setting['weburl'],$sitemap_t);
file_put_contents(ABSPATH.'wp-content/cache/all'.$tmp_pa['path'],$sitemap_t);
}
}
$sitemapx_translate = curl_zgj($home_url.'sitemap-translate.xml');
$sitemapx_translate = str_replace($home_url,$cdn_setting['weburl'],$sitemapx_translate);
$sitemapx_translate = str_replace($cdn_setting['weburl'].'wp-content/plugins/prisna-wp-translate/styles/sitemap.xsl',$cdn_setting['weburl'].'sitemap_translate.xsl',$sitemapx_translate);
file_put_contents(ABSPATH.'wp-content/cache/all/sitemap-translate.xml',$sitemapx_translate);
/* 执行rsync同步到正式站 start */
$domain = parse_url(home_url());
if(strpos($domain['host'],'goodao.net') !== false || strpos($domain['host'],'quanqiusou.cn') !== false){
$shell_ar = file_get_contents("http://www.quanqiusou.cn/extend_api/api/rsync.txt");
$shell_ar = explode("\n",$shell_ar);
foreach ($shell_ar as $v){
if($v){
$v = trim($v);
if(strpos($v,$domain['host']) !== false){
$ar_info = explode('|',$v);
shell_exec('rsync -avu --progress /www/wwwroot/'.$ar_info[0].'/wp-content/cache/all/ root@'.$ar_info[1].' &> /dev/null &');
}
}
}
}
/* 执行rsync同步到正式站 end */
}
echo 200;exit;
}
function curl_zgj($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 50);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_MAXREDIRS, 50);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 'all');
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
?>