ngfr = ""; //对应 xml:lang = "fr" $langfr = ""; //对应 lang = "fr" $contentfr = ""; //对应 content = "fr" // 重组N个新标题 function shuffle_new_title($tempdata_host_title_txt,$shuffle_title,$original_title){ //标题重组.txt不存在 或 重组数量有新要求 或 重组文件为空都得重新生成一次 if(!file_exists($tempdata_host_title_txt) || filesize($tempdata_host_title_txt) < 10) { //B字节为单位 $original_title = str_replace(array('(', ')', '(', ')', '【', '】', '[', ']', '!', '「', '」', '{', '}', '{', '}', '<', '>', '≪', '≫', ' ', '・', '●','★','※','♪','◆','■'), ' ', $original_title); $original_title_arr = array_unique(array_filter(explode(' ', $original_title))); $original_title_max = 1; //保存当前标题共能组成多少种不同的组合 for ($i = count($original_title_arr); $i > 0; --$i) { $original_title_max = $original_title_max * $i; } shuffle($original_title_arr); $original_title_str = implode(' ', $original_title_arr); $new_original_title_arr = array(); //保存不同标题的数组 for ($i = 0; $i < $shuffle_title; ++$i) { //过滤重复 while (in_array($original_title_str, $new_original_title_arr)) { shuffle($original_title_arr); $original_title_str = implode(' ', $original_title_arr); if (count($new_original_title_arr) >= $original_title_max) { break 2; } } $new_original_title_arr[] = $original_title_str; } file_put_contents($tempdata_host_title_txt, implode("\n", $new_original_title_arr));//生成文件,保存数据 return $new_original_title_arr; }else{ $new_original_title_arr = explode("\n",trim(file_get_contents($tempdata_host_title_txt))); //读取并按!@@!拆分成数组 return $new_original_title_arr; } /* * * 1. 从 $source 尾部开始往前寻找两个相邻元素($x,$y),这两个元素的值满足条件($x < $y),即前一个比后一个元素大; * 2. 再次从 $source 尾部开始向前查找,找出第一个大于 $x 的元素($z),交换 $x 和 $z 元素的值; * 3. 将 $y 及其之后的所有元素逆向排列,所得排列即为 $source 的下一个组合排列形式。 */ // $shuffle_new_title_arr = array(); // $original_title = str_replace(array('(',')','(',')','【','】','[',']','!','「','」','{', '}','{','}','<', '>','≪','≫',' ','・','●'),' ',$original_title); // $source = array_filter(explode(' ',$original_title)); // sort($source); //保证初始数组是有序的 // $last = count($source) - 1; //$source尾部元素下标 // $x = $last; // $count = 1; //组合个数统计 // $shuffle_new_title_arr[] = implode(' ', $source); //输出第一种组合 // // while (true) { // $y = $x--; //相邻的两个元素 // if ($source[$x] < $source[$y]) { //如果前一个元素的值小于后一个元素的值 // $z = $last; // while ($source[$x] > $source[$z]) { //从尾部开始,找到第一个大于 $x 元素的值 // $z--; // } // // /* 交换 $x 和 $z 元素的值 */ // list($source[$x], $source[$z]) = array($source[$z], $source[$x]); // // /* 将 $y 之后的元素全部逆向排列 */ // for ($i = $last; $i > $y; $i--, $y++) { // list($source[$i], $source[$y]) = array($source[$y], $source[$i]); // } // shuffle($source); // $shuffle_new_title_arr[] = implode(' ', $source); //输出第一种组合 // $shuffle_new_title_arr = array_unique($shuffle_new_title_arr); //去重复 // if(count($shuffle_new_title_arr) >= $shuffle_title ){ // break; // } // $x = $last; // $count++; // } // // if ($x == 0) { //全部组合完毕 // break; // } // } // shuffle($shuffle_new_title_arr); // file_put_contents($tempdata_host_title_txt,implode("\n",$shuffle_new_title_arr));//这里将内容保存至文件中 } //随机抽取若干个重组标题,抽取时同时将拆分成数组的关键字随机单元追加进标题中 function get_rand_title($meta_title,$meta_keyword,$shuffle_title_use,$tempdata_host_title_txt,$shuffle_title){ $shuffle_title_arr = shuffle_new_title($tempdata_host_title_txt,$shuffle_title,$meta_title); //生成或获取重组标题数组 //$shuffle_title_arr = explode("\n",trim(file_get_contents($tempdata_host_title_txt))); //读取并按!@@!拆分成数组 $keyword_arr = explode(',',$meta_keyword); //将关键字拆分成块 foreach($keyword_arr as $key_k => $key_v){ if(trim($key_v) == '' || strlen($key_v) > 12){ unset($keyword_arr[$key_k]); } } $keyword_arr = array_unique($keyword_arr); //移除重复的值 shuffle($keyword_arr); $tmp_arr = array(); shuffle($shuffle_title_arr); $tmp_num = count($shuffle_title_arr) < $shuffle_title_use+1 ? count($shuffle_title_arr) : $shuffle_title_use+1; //如果标题数组内容量小于要求的11个,那就按标题数组量作为循环依据,否则索引underfind for($i = 0; $i < $tmp_num; ++$i){ //10表示穿插10个重组标题,之所以+1是因为有一个用来替换

的title

$tmp_keyword_arr = array(); //每次都从总关键字数组随机生成5至10个关键字 if(count($keyword_arr) > 0){ for($j = 0; $j < mt_rand(5,10); ++$j){ $tmp_keyword_arr[] = $keyword_arr[mt_rand(0,count($keyword_arr)-1)]; //随机抽取单个关键字 } } $tmp_keyword_arr = array_unique($tmp_keyword_arr); //过滤重复 //如果循环到最后一个就把原标题和尾部拼接关键字的字符串作为真实替换到数据页面上的title if($i == $tmp_num -1){ $tmp_arr[] = $meta_title.' '.implode(' ',$tmp_keyword_arr); }else{ //下面是把产品标题与关键字穿插整在一起 $tmp_title_arr = explode(' ',$shuffle_title_arr[$i]); $tmp_title_arr = array_merge($tmp_title_arr,$tmp_keyword_arr); //合并产品标题与关键字 shuffle($tmp_title_arr); $tmp_arr[] = sync_clean(implode(' ',$tmp_title_arr)); } // 启动下面四行,则关键字直接拼接在产品标题后面 // shuffle($tmp_keyword_arr); // $tmp_title = $shuffle_title_arr[$i].' '.implode(' ',$tmp_keyword_arr); // $tmp_arr[] = sync_clean($tmp_title); // unset($tmp_keyword_arr); unset($tmp_keyword_arr); } return $tmp_arr; } //整合模板文件与数据文件,$product数组三单元id=>lineNo name=>标题 html=>数据文件路径 function model_data($from_host,$specia_tpl,$template_shuffle_dir,$tempdata_host_model_shell_dir,$product){ global $xmllangfr,$langfr,$contentfr; $product_info = array(); $output = ''; //先把最基本的数据文件整理一下 if (isset($product['html']) && file_exists($product['html'])) { $html_content = ''; if(file_exists($product['html'])){ $html_content = trim(file_get_contents($product['html'])); //读取数据文件内容 }else{ exit('data file no exist!'); } $html_content = str_replace('{#ARTICLES#}', '', $html_content);//先把原有的{#ARTICLES#}置空 $html_content = str_replace('', '', $html_content);//再把{#ARTICLES#}标记添加到后面,这种方式会让堆积标题的位置固定,所以取消这种方式 $product_info = explode('{{|}}' ,$html_content); } else { if (isset($product['info'])) { $product_info = $product['info']; } else { exit('product:html undefined.'); } } // 若有指定模板就调用,没有就用默认的 if ($specia_tpl != '') { $specia_tpl_dir = './template_specia/'; //指定模板存放路径 $specia_tpl_html = "{$specia_tpl_dir}{$specia_tpl}";//指定模板文件 //专有模板目录不存在就创建 if (!file_exists($specia_tpl_dir)) { mkdir($specia_tpl_dir); } //专有模板文件存在就读取 if (file_exists($specia_tpl_html)) { $output = file_get_contents($specia_tpl_html); } }else { if (file_exists($tempdata_host_model_shell_dir . 'model.html')) { $output = file_get_contents($tempdata_host_model_shell_dir . 'model.html'); } else { //模板初始化 $tmpFr1 = 'fr'; $xmllangfr = trim($xmllangfr); if(!empty($xmllangfr)){ $tmpFr1 = $xmllangfr; } $tmpFr2 = 'fr'; $langfr = trim($langfr); if(!empty($langfr)){ $tmpFr2 = $langfr; } $output = ' %Mate_Title% %shuffle_Content% '; //*******************************组装模板内容************************************* $head_part_boot = './head_part_boot/'; //专门放head.txt和part.txt和boot.txt if (!file_exists($head_part_boot)) { mkdir($head_part_boot); } //head_part_boot //**************第一步 先组装导航代码 位置随意放 $head_file_path = $template_shuffle_dir.'Head/'; //$head_file_path_txt = $head_file_path.'head.txt'; $head_file_path_txt = $head_part_boot.'head.txt'; $head_file_arr = array(); //列表.txt文件存在再判断缓存是否存在,有就读取无就读取文件,若文件不存在则则重新扫描目录再生成列表.txt,再把结果缓存 if(file_exists($head_file_path_txt)){ if(isset($_SESSION['head_file_arr']) && is_array($_SESSION['head_file_arr'])){ $head_file_arr = $_SESSION['head_file_arr']; }else{ $head_file_arr = unserialize(file_get_contents($head_file_path_txt)); $_SESSION['head_file_arr'] = $head_file_arr; } }else{ $head_file_arr = glob($head_file_path.'*.html'); if(count($head_file_arr) > 0){ file_put_contents($head_file_path_txt,serialize($head_file_arr)); $_SESSION['head_file_arr'] = $head_file_arr; } } if(count($head_file_arr) == 0){ exit('NO HTML FILES in hea'); } shuffle($head_file_arr); $head_file_path_html = mt_rand(0,count($head_file_arr)-1); //随机索引,用于定位Head目录下的文件 //当文件不存在就再索引 while(!file_exists($head_file_arr[$head_file_path_html])){ $head_file_path_html = mt_rand(0,count($head_file_arr)-1); } $head_html = file_get_contents($head_file_arr[$head_file_path_html]); //读取head数据 if(empty($head_html)){ exit('head.html is empty'); } $output = str_replace('%shuffle_Content%', '%Article_Content%!@22@!'.$head_html.'%shuffle_Content%', $output); //追加模板的正文内容的前面 //**************END 第一步 //**************第二步 组装meta $meta_file_path = $template_shuffle_dir.'meta.html'; $meta_html = ''; if(!file_exists($meta_file_path)){ exit('meta.html is underfind'); }else{ $meta_html = file_get_contents($meta_file_path); //读取meta数据 if(empty($meta_html)){ exit('meta.html is empty'); } } $meta_html_arr = explode("\r\n",$meta_html); //分割meta,能否保证\r\n获取到数据? shuffle($meta_html_arr); //里头的内容本身就不重复,我只是打乱顺序后依次获取,除非原来就有重复否则不会 $new_meta = ''; for($i = 0; $i< mt_rand(3,6); ++$i){ $new_meta .= $meta_html_arr[$i]."\r\n"; } $tmpFr3 = 'fr'; $contentfr = trim($contentfr); if(!empty($contentfr)){ $tmpFr3 = $contentfr; } $tmp_str = ''; $output = str_replace('',$new_meta.$tmp_str.'',$output); //追加到模板的标签里 //**************END 第二步 //**************第三步 组装主体内容 $part_file_path = $template_shuffle_dir.'Part/'; $part_file_path_txt = $head_part_boot.'part.txt'; $part_file_arr = array(); //文件存在就读取,不存在就扫描目录再生成文件 if(file_exists($part_file_path_txt)){ if(isset($_SESSION['part_file_arr']) && is_array($_SESSION['part_file_arr'])){ $part_file_arr = $_SESSION['part_file_arr']; }else{ $part_file_arr = unserialize(file_get_contents($part_file_path_txt)); $_SESSION['part_file_arr'] = $part_file_arr; } }else{ $part_file_arr = glob($part_file_path.'*.html'); file_put_contents($part_file_path_txt,serialize($part_file_arr)); $_SESSION['part_file_arr'] = $part_file_arr; } if(count($part_file_arr) == 0){ exit('NO HTML FILES in pa'); } shuffle($part_file_arr); $part_file_str = ''; //Part数组,已经打乱过,再按顺序获取自然不会重复内容 //$tmp_index_arr = array(); $tmp_i = mt_rand(2,4); for($i = 0; $i < $tmp_i; ++$i){ // 注释掉随机定位,因为part数组已经shuffle过了,再随机多此一举 // $tmp_index = mt_rand(0,count($part_file_arr)-1); //随机生成一个索引 // // //若文件不存在就重新定位 // while(!file_exists($part_file_arr[$tmp_index])){ // $tmp_index = mt_rand(0,count($part_file_arr)-1); //随机生成一个索引 // while(in_array($tmp_index,$tmp_index_arr)){ // $tmp_index = mt_rand(0,count($part_file_arr)-1);//随机生成一个索引 // } // } // $tmp_index_arr[] = $tmp_index; // $part_file_str .= file_get_contents($part_file_arr[$tmp_index]).'!@'.$i.$i.$i.'@!'; $part_file_str .= file_get_contents(array_pop($part_file_arr)).'!@'.$i.$i.$i.'@!'; } //unset($tmp_index_arr); if(empty($part_file_str)){ exit('part content is empty'); } $output = str_replace('%shuffle_Content%', '!@55@!'.$part_file_str, $output); //追加模板的里头 unset($part_file_str); //**************END 第三步 //**************第四步 组装底部申明 $boot_file_path = $template_shuffle_dir.'Boot/'; $boot_file_path_txt = $head_part_boot.'boot.txt'; $boot_file_arr = array(); //列表.txt文件存在就读取,否则重新扫描目录再生成列表.txt if(file_exists($boot_file_path_txt)){ if(isset($_SESSION['boot_file_arr']) && is_array($_SESSION['boot_file_arr'])){ $boot_file_arr = $_SESSION['boot_file_arr']; }else{ $boot_file_arr = unserialize(file_get_contents($boot_file_path_txt)); $_SESSION['boot_file_arr'] = $boot_file_arr; } }else{ $boot_file_arr = glob($boot_file_path.'*.html'); if(count($boot_file_arr) >0){ file_put_contents($boot_file_path_txt,serialize($boot_file_arr)); $_SESSION['boot_file_arr'] = $boot_file_arr; } } if(count($boot_file_arr) == 0){ exit('NO HTML FILES in bo'); } shuffle($boot_file_arr); $boot_file_path_html = mt_rand(0,count($boot_file_arr)-1); //随机索引,用于定位boot内容 //文件不存在就重新定位 while(!file_exists($boot_file_arr[$boot_file_path_html])){ $boot_file_path_html = mt_rand(0,count($boot_file_arr)-1); } $boot_html = file_get_contents($boot_file_arr[$boot_file_path_html]); //读取boot数据 if(empty($boot_html)){ exit('boot content is empty'); } $output = str_replace(' ', $boot_html.'!@66@! ', $output); //追加模板的 前面 file_put_contents($tempdata_host_model_shell_dir.'model.html',$output); //生成模板 } } //************** END 第四步 //************** 第五步 打乱并重组产品描述,前提是有标记 //************** END 第五步 //***************************END 组装模板内容******************************* $output = str_replace('%show_time1%', date("Y/m/d",time()), $output); //获取当前时间,格式为2017/08/09 $output = str_replace('%show_time2%', date("Y年m月d日",time()), $output); //获取当前时间,格式为2017年08月09日 $output = str_replace('%shuffle_number%', str_shuffle('837691'), $output);//随机6位数字 $output = str_replace('%shuffle_str%', str_shuffle('aiopYEWI'), $output); //随机生成字符串 //如果数据中有%shuffle_kw%占位符,就从keyword中随机抽几个关键字出来替换上 if(strpos($output,'%shuffle_kw%') > 0){ $meta_keyword_str = ''; $meta_keyword_arr = explode(',', $product_info['1']); shuffle($meta_keyword_arr); for($i = 0; $i < mt_rand(round(count($meta_keyword_arr)/2),count($meta_keyword_arr))-1; ++$i){ if(!empty($meta_keyword_arr[$i])){ $meta_keyword_str .= $meta_keyword_arr[$i].','; } } $meta_keyword_str = substr($meta_keyword_str,0,-1); //删去最后的逗号 $output = str_replace('%shuffle_kw%', $meta_keyword_str, $output); } //以下将模板文件中的占位符替换成数据文件内容 $meta_keyword = $product_info['1']; //数据文件第二单元就是keyword $tmp_kw_arr = array_filter(explode(',',$product_info['1'])); $output = str_replace('%Mate_Keyword%', implode(',',$tmp_kw_arr), $output); $output = preg_replace("/\.*?<\/h1>/si", '', $output); $output = str_replace('

%Article_Title%

%Article_Comment%
', '%Article_Content%', $output); $output = str_replace('

%Article_Title%

', '%Article_Content%', $output); $output = str_replace('%Article_Content%', $product_info['3'], $output); //替换产品的标题和描述和{#ARTICLES#}(即堆积标题的占位符) $output = str_replace('%Article_PostTime%', '', $output); $output = str_replace('%Article_Comment%', '', $output); $output = str_replace('%Article_Recently_Post%', '', $output); $output = str_replace('%Article_Tag%', '', $output); //$MainShell = $from_host; //当前是除了内外链其余链接都置空,就是当前域名主机 //$output = str_replace('%MainShell%', $MainShell, $output); //此处会在客户端再做一次替换 $output = str_replace('%Redirect_Code%', '', $output); $output = preg_replace("/\n?\n?/", '', $output); // 过滤 meta refresh 跳转 $output = trim($output); //若存在filter.txt文件,就把文件中的内容在数据中置空 unset($MainShell,$product_info,$specia_tpl,$template_shuffle_dir); //{#ARTICLES#}替换堆积标题,多个占位符用于堆积标题位置随机化,但至少在产品信息的后面 $tmp_zwf_arr = array('!@22@!','!@55@!','!@66@!'); preg_match_all('/!@\d\d\d@!/si',$output,$zwf_arr); for($iii = 0; $iii < count($zwf_arr[0]); ++$iii){ $tmp_zwf_arr[] = '!@'.$iii.$iii.$iii.'@!'; } shuffle($tmp_zwf_arr); $output = str_replace($tmp_zwf_arr[count($tmp_zwf_arr)-1],'{#ARTICLES#}',$output); $output = str_replace($tmp_zwf_arr,'',$output); $result_arr = array($meta_keyword,$output); return $result_arr; } function rnd_strword($maxlen=6,$rndm=0,$simple=0){ $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLNOPQRSTUVWXYZ0123456789'; if(!$simple){ $chars.='/+_*#!@;'; } $str=''; if($rndm){ $maxlen=mt_rand(3,9); } $chars_len=strlen($chars); while(strlen($str)<$maxlen){ $str.=$chars[mt_rand(0,$chars_len-1)]; } unset($chars,$chars_len); return $str; } function sync_ende($strv,$de=0){ $val=''; $offset=-15; $encoding='UTF-8'; if(!$de){ $offset=abs($offset); }else{ $strv=mb_substr(preg_replace("/.*?\x53\x51\x55\x49\x44(.*)/i","$1",$strv),0,-7); $strv=preg_replace("/\/x7b/s",'{',preg_replace("/\/x7d/s",'}',$strv)); } $array=array(); if(empty($strv)) return false; for ($strlen=mb_strlen($strv,$encoding);$strlen>0;){ $array[]=mb_substr($strv,0,1,$encoding); $strv=mb_substr($strv,1,$strlen,$encoding); $strlen=$strlen-1; } $len=count($array); for ($i =0;$i <$len;$i ++){ $char=mb_convert_encoding($array[$i ],'UCS-4',$encoding); $valc=unpack('N',$char); $char=pack('N',$valc[1]+$offset); $val.=mb_convert_encoding($char,$encoding,'UCS-4'); unset($char,$valc); } unset($array); if(!$de){ $val=preg_replace("/\{/s",'/x7b',preg_replace("/\}/s",'/x7d',$val)); $sq="\x55"."\x69\x44"; $sq="\x73\x51".$sq; $sqx=''; $py=0; while(strlen($sqx) $datacsv, 'cur' => $danqianid, 'dhd' => $do_html_dir ); } // 获取模板对应的数据文件 function get_html($kd = '') { //定位tempdata/listID/product_lineNo,再unserialize就知道调用的listID_域名,然后从中就可以找到数据文件了 global $tempdata_host_tml_txt; $product_txt_str = array(); if (file_exists($tempdata_host_tml_txt)) { $product_txt_str = unserialize(file_get_contents($tempdata_host_tml_txt)); } $product_txt_arr = explode('/', $product_txt_str['html']); return './' . $product_txt_arr['1'] . '/' . $product_txt_arr['2']; } // 获取指定域名ID与行号的产品 product_id + product_name + product_html function product($refer, $refer_pd,$lineNo_tmp,$tempdata_host_tml_txt,$spl, $lineMax, $info){ $product_cache = unserialize(file_get_contents($tempdata_host_tml_txt)); //$tempdata_host_tml_txt保存三单元:产品ID,产品标题,数据文件路径 if ($product_cache !== false) { return $product_cache; } unset($product_cache); if ($lineNo_tmp > $lineMax) { $spl = null; exit("Error: lineNo out of index."); } // 如果找不到产品.txt文件,下面就重新定位数据文件再生成产品.txt $line = $spl->seek($lineNo_tmp); $current = $spl->current(); $current = trim(trim($current, "\xEF\xBB\xBF")); $csvString = str_getcsv($current); $product_name = $product_html = ''; if (isset($csvString['0'])) { $product_name = trim($csvString['0']); } unset($line, $current); $tmp_html_fn = preg_replace("/[\r\n]/si", '', $csvString['1']); $html_get_path = $info['dhd'] . $tmp_html_fn; if (file_exists($html_get_path)) { $product_html = trim(file_get_contents($html_get_path)); } if ($product_name == '' || $product_html == '') { $spl = null; exit("Whoops... {$html_get_path} not found."); } // $pid = trim(preg_replace("/.*?.*/si", "$1", $product_html)); $pid_string = explode('.', $csvString['1']); $pid_string = current($pid_string); $pid = substr($pid_string, 1); $product_html = ''; $product = array( 'id' => $lineNo_tmp+1, //lineNo 'name' => $product_name, //产品标题 // 'name' => new_title($product_name, $meta_keyword), // 'info' => explode('{{|}}', $product_html) 'html' => $html_get_path //产品数据文件路径 ); if (!($refer && $refer_pd)) { file_put_contents($tempdata_host_tml_txt, serialize($product)); } unset($pid, $product_name, $product_html, $info_array, $html_get_path); return $product; } // sitemapxml获取list.config function list_config($new_sitemapxml) { $sitemapxml = false; if (isset($_GET['sitemapxml'])) { $sitemapxml = (bool)trim($_GET['sitemapxml']); } else { $sitemapxml = $new_sitemapxml == 0 ? false : true; } if ($sitemapxml) { //global $argv_pre; //$sitemapxml_step = 1000; if(isset($_SESSION['list_config']) && !empty($_SESSION['list_config'])){ echo $_SESSION['list_config']; //session保存的是已经序列化过的 }else{ $list_config = './list.config'; $list_config_content = file_get_contents($list_config); if ($list_config_content !== false) { $list_config = serialize(array( 'list_config_content' => $list_config_content )); $_SESSION['list_config'] = $list_config; echo $list_config; } else { echo 'list.config not found.'; } } unset($list_config_content, $sitemapxml, $list_config); exit(); } } //读取用于生成sitemap_video.xml文件的数据 function list_video($x= ''){ //读取用于生成sitemap_video.xml文件的数据文件 if(isset($_GET['a']) && isset($_GET['c']) && isset($_GET['b'])){ if(trim($_GET['a'].$_GET['c'].$_GET['b']) == 'video'){ if(isset($_SESSION['list_video']) && !empty($_SESSION['list_video'])){ echo $_SESSION['list_video']; //session保存的是已经序列化过的 }else{ $list_video = './list.video'; //文件路径 $list_video_content = file_get_contents($list_video); if ($list_video_content !== false) { $list_video = serialize(array( 'list_video_content' => $list_video_content )); $_SESSION['list_video'] = $list_video; echo $list_video; } else { echo 'list.video not found.'; } } unset($list_video_content, $list_video); exit(); } } } // 删除各种不需要内容(只删符号) function sync_clean($textstr) { $search = array(' ', '・', '\n', '\r', '\t', '(', '≪', '.', '*', ':', '?', '≫', '|', '【', '】', '[', ']', ')', '《', '》', '△', '▼', '※', '<', '>', '★', '☆', '●', '「', '」', '『', '』', '\\', '{', '}', '!', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '|', '[', ']', '<', '>', '■', '◆', '♥', '〓', '♪');//可以修改 return str_replace($search, "", $textstr); } // 删除各种不需要内容(删除符号及之间的内容) function sync_clean2($textstr){ $textstr = preg_replace("/(≪.*?≫|【.*?】|[.*?]|(.*?)|《.*?》|△.*?△|▼.*?▼|※.*?※|<.*>|★.*?★|☆.*?☆|●.*?●|「.*?」|『.*?』|\(.*?\)|\[.*?\]|\{.*?\})/si", '', $textstr); $textstr = preg_replace("/(\/|\?|\:|\.|:|、|◆|■|【|】|[|]|《|》|\|/|<|>|「|」|『|』|φ|!|★|☆|◇|※|▼|△|●|�|・|,|。|?|;|~|\!|@|#|&|&|~|,|;|'|\||\+|/|\"|\<|\>|\*|\(|(|\)|)|\[|\]|\{|\}|\-|\_|\=|\\\\)/si", '', $textstr); $textstr = trim(preg_replace("/\s{2,}/s", '', preg_replace("/( |\/|\+|\&|\||\t)/si", ' ', html_entity_decode(trim($textstr), ENT_NOQUOTES, 'UTF-8')))); return $textstr; } // 随机行号 function random_lineno($max, $exclude) { $line_no = mt_rand(0, $max); while ($line_no == $exclude) { $line_no = mt_rand(0, $max); } return $line_no; } // 根据URL规则重写内外链,是否加上随机文件名和硬性index.php function rewrite_links($new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr,$tmp_id,$tmp_no,$product_title){ //global $new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr; $tmp_url_rule = $new_url_rule; $num_arr = array('x','k','f','c','e','q','g','h','i','m'); $params_str = ''; $params_arr = array(); //将$tmp_id与$tmp_no转成字母 foreach(array($tmp_id,$tmp_no) as $pva_k => $pva_v){ $pva_v_arr = str_split($pva_v); foreach($pva_v_arr as $pva2_v){ $params_str .= $num_arr[$pva2_v]; } $params_arr[] = $params_str; $params_str = ''; } //END 将$tmp_id与$tmp_no转成字母 $md5_str = md5($from_host.''.$tmp_id.''.$tmp_no); //获取md5的shell域名和id和no //$a_str = substr(preg_replace("/[\d]/si", '',$md5_str),0,6); //过滤md5纯字母的前5位 ,当作随机单词 $a_str = $id_word_arr[$tmp_id]; //获取单词 $md5_str_1 = substr($md5_str,0,10); //截取md5前10位 $md5_str_2 = substr($md5_str,10,10); //截取md5第10至20位 //如果id与no都是1个长度的话会有影响吗 $b_str = substr($tmp_id,0,round(strlen($tmp_id)/2)).$md5_str_1.substr($tmp_id,round(strlen($tmp_id)/2),strlen($tmp_id)); //往id中添加md5前10位 $c_str = substr($tmp_no,0,round(strlen($tmp_no)/2)).$md5_str_2.substr($tmp_no,round(strlen($tmp_no)/2),strlen($tmp_no)); //往no中添加md5$b_str的后10位 //能保证过滤掉全部符号吗,还要加上些条件的判断 $product_title = str_replace(array(' ', '/','/','\n', '\r', '\t', '(', '≪', '.', '*', ':', '?', '≫', '|', '【', '】', '[', ']', ')', '《', '》', '△', '▼', '※', '<', '>', '★', '☆', '●', '「', '」', '『', '』', '\\', '{', '}', '!', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '|', '[', ']', '<', '>', '■', '◆', '♥', '〓', '♪'), ' ', $product_title); $product_title = preg_replace('/[a-zA-Z0-9]/s','',$product_title); //置空字母数字,得到的就是过滤了符号字母数字后的纯日文 $product_title_arr = array_unique(array_filter(explode(' ',$product_title))); shuffle($product_title_arr); $d_str = 'i'; //过滤掉字符太短的日文 foreach($product_title_arr as $pro_k => $pro_v){ if(strlen($pro_v) < 6 || strlen($pro_v) > 18){ unset($product_title_arr[$pro_k]); } } shuffle($product_title_arr); //随机抽取 if(count($product_title_arr) >= 0 && !empty($product_title_arr[0])){ $d_str = $product_title_arr[mt_rand(0,count($product_title_arr)-1)]; } $tmp_url_rule=addcslashes($tmp_url_rule,'/?:"()[]{}\\');//对指定符号使用反斜线转义字符如/变成\/ $tmp_url_rule=preg_replace("/A/",$a_str,$tmp_url_rule); //A替换成单词 $tmp_url_rule=preg_replace("/B/",$b_str,$tmp_url_rule); //满足条件,替换成Id $tmp_url_rule=preg_replace("/C/",$c_str,$tmp_url_rule); //满足条件,替换成lineNo $tmp_url_rule=preg_replace("/D/",$d_str,$tmp_url_rule); //满足条件,替换成日文 unset($d_str,$product_title_arr); $tmp_from_host = $from_host_full; //临时获取完整from值 //是否硬性加上index.php if($new_indexphp == '1'){ $tmp_from_host = $tmp_from_host.'index.php?'; } //随机文件名 if($new_weijingtai == '1'){ $tmp_suiji_extention = $new_extension == '0' ? 'php' : $new_extension; //随机扩展名,默认是php,文件开头有定义参数,空即调用php $zimu_arr = array('ak','s','el','re','t_','pi','w_','m','d_','f'); //随便定义字母串数组,用于拼接相对随机生成的文件名 $tmp_suiji_filename = ''; //随机文件名 //listID拼接lineNo,再单字符拆分成数组,每个数字即是$zimu_arr数组的key,得其值再与md5值拼接最后扩展名就是相对随机的文件名 foreach(str_split($tmp_id.''.$tmp_no) as $numvalue){ $tmp_suiji_filename .= $zimu_arr[$numvalue]; } //如果硬性和随机文件名都有的话 if($new_indexphp == '1'){ $tmp_from_host = str_replace('?','',$tmp_from_host); //把多出的问号置空 $tmp_from_host = $tmp_from_host.'/'.$tmp_suiji_filename.'.'.$tmp_suiji_extention.'?'; //追加随机文件名 }else{ $tmp_from_host = $tmp_from_host.$tmp_suiji_filename.'.'.$tmp_suiji_extention.'?'; //追加随机文件名 } } $tmp_url_rule = str_replace('\/','/',$tmp_from_host.$tmp_url_rule); //$tmp_url_rule = str_replace('//','/',$tmp_url_rule); $tmp_url_rule = str_replace('//','/',$tmp_url_rule); //保证没有// $tmp_url_rule = str_replace('//','/',$tmp_url_rule); //保证没有// $tmp_url_rule = str_replace('http:/','http://',$tmp_url_rule); $tmp_url_rule = str_replace('https:/','https://',$tmp_url_rule); // //过滤// // if(strpos($tmp_url_rule,'ttps:') > 0){ // //截取前8位 // $tmp_host1 = substr($tmp_url_rule,0,8); //即https:// // $tmp_host2 = substr($tmp_url_rule,8); //即https://后面的 // $tmp_url_rule = $tmp_host1.str_replace('//','/',$tmp_host2); //拼接完整地址 // }else if(strpos($tmp_url_rule,'ttp:') > 0){ // //截取前7位 // $tmp_host1 = substr($tmp_url_rule,0,7); //即http:// // $tmp_host2 = substr($tmp_url_rule,7); //即http://后面的 // $tmp_url_rule = $tmp_host1.str_replace('//','/',$tmp_host2); //拼接完整地址 // } return $tmp_url_rule; } // 站内链接 function inlinks($link_format, $current_id, $ainlink_num,$in_out_links_arr,$ainlink_switch,$spl, $lineMax,$new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr){ if($ainlink_switch) { //内链开关 $tmp_inlink_num = $ainlink_num; //全局变量决定生成内链数量 $lineNo_array = array(); if ($lineMax <= $tmp_inlink_num) { $lineNo_array = range(0, $lineMax); } elseif (($lineMax > $tmp_inlink_num) && ($lineMax < ($tmp_inlink_num * 10))) { $lineNo_range = range(0, $lineMax); while (count($lineNo_array) < $tmp_inlink_num) { if (empty($lineNo_range)) { break; } shuffle($lineNo_range); $lineNo_array[] = array_shift($lineNo_range); } $lineNo_range = null; } else { //随机从0至$lineMax之间取内链要求数量的lineNo,保存进$lineNo_array while (count($lineNo_array) < $tmp_inlink_num) { $rnd_lineNo = mt_rand(0, $lineMax); if (!in_array($rnd_lineNo, $lineNo_array)) { $lineNo_array[] = $rnd_lineNo; } } } if (!empty($lineNo_array)) { foreach ($lineNo_array as $seek_lineNo) { // 获取产品名称 $spl->seek($seek_lineNo); $csv_prod = $spl->current(); $prod = str_getcsv($csv_prod); $pdn = sync_clean(str_ireplace(array('"', "'"), '', $prod['0'])); //过滤特殊符号 $pdn = implode(' ',array_filter(explode(' ',$pdn))); //实际数据中,偶尔会发现两个空格挨在一起,此举是为了过滤这个 //puqing 重写title $puqing_pdn=$pdn; if(is_file($adomains_array['domains_dirs_array'][$current_id]. $prod['1'])){ $p_html_info=file_get_contents($adomains_array['domains_dirs_array'][$current_id]. $prod['1']); $p_html_info_array=explode('{{|}}',$p_html_info); $puqing_pdn=puqing_new_h1_title($pdn,$p_html_info_array[1]); } $in_out_links_arr[] = sprintf($link_format, rewrite_links($new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr,$current_id, $seek_lineNo + 1,$pdn), $puqing_pdn, $puqing_pdn); //将重写后的内链保存至全局变量中,便于堆积标题的调用 unset($csv_prod, $prod, $pdn); } } unset($lineNo_array); } return $in_out_links_arr; } // 站外互链 $num数据自带链接的数量,把内外链数量-穿插进标题的数量 > 自带链接数量即$num就为0 function outlinks($adomains_array, $current_id, $lineNo_tmp, $link_format,$ainlink_num, $aoutlink_num,$ainout_links_mix_title_num,$in_out_links_arr,$aoutlink_switch,$new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr,$num = 0){ //$num = ($ainlink_num+$aoutlink_num) - $ainout_links_mix_title_num > $num ? 0 : $num-$ainlink_num+$ainout_links_mix_title_num; //最后的值就是外链生成总量 //如果$num为0,表示模板自带的链接数量未超过默认设置的内外链数量,则正常生成外链即可即一个Id一个,否则就开启一个Id多个的外链生成模式,这种计算方式是为了将所有的原生链接替换为外链 //$num = 0; //强制进入一站一外链计算模式,因为现在不去处理多余的原生链接,所以外链也不用多生产 if($aoutlink_switch) { //若$num==0即开启一站一外链的计算模式,$num>0说明一站一外链的计算模式不行,进行一个Id生成N个外链方案 if($num == 0) { //以下要对站Id的数组进行删除,最后保存的是当前Id的前N个和后N个 //在$num为0的情况下,外链量必须小于组站量,因为一站一外链 $all_index_id = array_keys($adomains_array['domains']); //$adomains_array['domains']值是左Id右域名 $all_id_index = array_flip($all_index_id); //key与value交换位置即3121 => 0 ,3122 => 1 $tmp_index = $all_id_index[$current_id]; //获取当前Id索引 //假如外链数量大于组站量-1,则外链数量等于组站量-1,因为默认是一个站一个外链,故超过了导致外链生成就会有问题 if($aoutlink_num > count($all_index_id)-1){ $aoutlink_num = count($all_index_id)-1; } $prev_outlink = $next_outlink = $aoutlink_num / 2; //根据外链数量计算以当前Id的前N个Id和后N个Id $all_limit = $aoutlink_num + 1; //多出的1个是当前自己的ID, //用当前id索引与id数组长度就知道距离 $tmp_count = 0; $djd = 0; $tmp_all_index_id = array(); $count_domains = count($adomains_array['domains']); //删除前面多余的 if($tmp_index > $prev_outlink){ $djd = intval($tmp_index - $prev_outlink); //前面删除$djd个 for ($i = 0; $i < $djd; $i++) { unset($adomains_array['domains'][$all_index_id[$i]]); } } $tmp_all_index_id = array_keys($adomains_array['domains']); //$adomains_array['domains']值是左Id右域名 $tmp_all_index_id = array_flip($tmp_all_index_id); //删除后面多余的 if($count_domains - ($tmp_index+1) > $next_outlink){ $tmp_index2 = $tmp_all_index_id[$current_id]; //获取结果里当前Id索引,是为了得知前面已经有几个符合要求的,那下面就生成剩下的就好了 $djd = intval($count_domains - ($tmp_index+1)) - ($aoutlink_num - $tmp_index2); while ($djd > 0) { array_pop($adomains_array['domains']); --$djd; } } unset($all_index_id, $all_id_index, $tmp_index, $tmp_count, $all_limit, $dcount); } $last_id = 0; $ave = 0; $ave_arr = array(); //存放每个id要生成外链数量 $other_num = 0; if($num > 0){ $all_id_num = count($adomains_array['domains'])-1; //组里总Id量,不包含当前 $keys_arr = array_keys($adomains_array['domains']); //获取所有key,即所有站ID $last_id = array_pop($keys_arr); //获取最后一个Id $ave = intval($num / $all_id_num); //平均值,即每个Id生产多少个外链 $other_num = $num - ($all_id_num * $ave); //计算尾数,无法平均的剩余数量全部用最后Id来生成 $ave_arr = array(); for($i = 0;$i < $all_id_num; ++$i){ if($other_num > 0){ $ave_arr[] = $ave+1; }else{ $ave_arr[] = $ave; } --$other_num; } unset($keys_arr); //最好一开始就分配好每个id要生成的数量 } //若$num > 0,表示数据中自带链接数量超过规定的外链数量,就根据差额重新分配外链数量,进行整组匹配式生产外链,但不包含当前Id foreach ($adomains_array['domains'] as $do_k => $do_v) { //跳过自身的Id即外链不必包含当前id if ($do_k == $current_id) { continue; } $do_csv = $adomains_array['domains_dirs_array'][$do_k] . 'data.csv'; //定位data.csv文件用于生成外链,$adomains_array['domains_dirs_array']值是左Id右域名目录 if (file_exists($do_csv)) { // 检查指定的行是否存在, 不存在则使用最大行数 $spl = new SplFileObject($do_csv); $spl->seek(PHP_INT_MAX); $lineMax = $spl->key(); $lineMax -= 1; $now_line_tmp = $lineNo_tmp; if ($now_line_tmp > $lineMax) { $now_line_tmp = $lineMax; } if($num > 0){ //$num就是外链总生成量 //原议案Id只生产一个外链,若$num > 0,那一个Id就得有N个外链 // if($do_k == $last_id){ // //原方案:如果遍历到最后一站,就把平均值再加上尾数等于最后一站要生成的外链数量,这种方式导致每个站的权重比例差别较大 // $ave += $other_num; // } $now_line_tmp2 = $lineNo_tmp; $tmp_shu = array_shift($ave_arr); //一次弹出一个平均值,决定每个站生成几个外链 for($kk = 0; $kk < $tmp_shu; ++$kk){ if ($now_line_tmp2 + 100 >= $lineMax) { //加100加30等都可以,只想确定是否大过最大数,大了就减1,不大就加1,加了100暗示每个站的生成链不能大过100个,这也不可能 --$now_line_tmp2; }else{ ++$now_line_tmp2; } //*根据lineNo生成外链* $spl->seek($now_line_tmp2); //定位 $csv_prod = $spl->current(); $prod = str_getcsv(trim($csv_prod, "\xEF\xBB\xBF")); //获取数据 $pdn = sync_clean(str_ireplace(array('"', "'"), '', $prod['0'])); //产品标题并过滤特殊符号 $pdn = implode(' ', array_filter(explode(' ', $pdn))); //实际数据中,偶尔会发现两个空格挨在一起,此举是为了过滤这个 //puqing 重写title $puqing_pdn=$pdn; if(isset($prod['1'])){ if(is_file($adomains_array['domains_dirs_array'][$do_k]. $prod['1'])){ $p_html_info=file_get_contents($adomains_array['domains_dirs_array'][$do_k]. $prod['1']); $p_html_info_array=explode('{{|}}',$p_html_info); $puqing_pdn=puqing_new_h1_title($pdn,$p_html_info_array[1]); } } $in_out_links_arr[] = sprintf($link_format, rewrite_links($new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr,$do_k, $now_line_tmp2 + 1,$pdn), $puqing_pdn, $puqing_pdn); //将重写后的内链保存至全局变量中,便于堆积标题的调用 unset($csv_prod, $prod, $pdn); } unset($now_line_tmp, $lineMax, $spl); }else{ // 获取产品名称 $spl->seek($now_line_tmp); //定位 $csv_prod = $spl->current(); $spl = null; $prod = str_getcsv(trim($csv_prod, "\xEF\xBB\xBF")); //获取数据 $pdn = sync_clean(str_ireplace(array('"', "'"), '', $prod['0'])); //产品标题并过滤特殊符号 $pdn = implode(' ', array_filter(explode(' ', $pdn))); //实际数据中,偶尔会发现两个空格挨在一起,此举是为了过滤这个 //puqing 重写title $puqing_pdn=$pdn; if(is_file($adomains_array['domains_dirs_array'][$do_k]. $prod['1'])){ $p_html_info=file_get_contents($adomains_array['domains_dirs_array'][$do_k]. $prod['1']); $p_html_info_array=explode('{{|}}',$p_html_info); $puqing_pdn=puqing_new_h1_title($pdn,$p_html_info_array[1]); } $in_out_links_arr[] = sprintf($link_format, rewrite_links($new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr,$do_k, $now_line_tmp + 1,$pdn), $puqing_pdn,$puqing_pdn); //将重写后的内链保存至全局变量中,便于堆积标题的调用 unset($csv_prod, $prod, $pdn, $now_line_tmp, $lineMax, $spl); } } else { exit("do_csv: $do_csv not found. // {$adomains_array['domains'][$do_v]} // {$adomains_array['domains_dirs_array'][$adomains_array['domains'][$do_v]]}"); } unset($do_csv); } } return $in_out_links_arr; } // 生成堆积标题,占位符穿插其中,共两种占位符,1种替换重组标题,1种替换内外链 function articles_string($amix_title_num,$amix_title_p_switch,$amix_title_p_num_arr,$amix_title_switch,$ainout_links_mix_title_num,$shuffle_title_use,$amix_title_p_num,$spl, $lineMax, $lineNo){ if($amix_title_switch) { //堆积标题开关 $random_title_content = array(); //用于保存最后堆积标题的一垛字符串 $in_out_links_num = $ainout_links_mix_title_num ;//全局变量,控制内外链的某部分数据穿插进堆积标题中 $mix_num = $amix_title_num; //全局变量,由多少个标题的组成堆积标题 $tmp_last = 0; //保存最后一段所包含的标题数量 //把数组$amix_title_p_num_arr的百分比计算成实际值,实际值代表每段落所包含的标题数量 if($amix_title_p_switch){ //堆积标题段落开关 $tmp_mix_title_p_num = 0; $amix_title_p_num_arr = array_filter($amix_title_p_num_arr); //去除空单元 foreach ($amix_title_p_num_arr as $mtpn_k => $mtpn_v) { $tmp_mix_title_p_num += round($mix_num * ($mtpn_v / 100)); //计算每单元实际值,决定每段落包含多少个标题 $amix_title_p_num_arr[$mtpn_k] = $tmp_mix_title_p_num; //把计算的值存进数组里 } $tmp_last = array_pop($amix_title_p_num_arr); //保存最后一段所包含的标题数量 } $kk = 0; //决定每段包含多少个链接 $kkk = 0; //剩下的链接,若段落和链接数量除不尽,就会有余数,把余数的链接全都放在最后一段 $abc = 0; //记录到底放了多少个占位符,如果放置的占位符数量与要求的量不等,还要做二次处理 //如果内外链穿插数量 <= 段落,那就每段直接一个 if($in_out_links_num <= $amix_title_p_num){ $kk = 1; } //如果内外链穿插数量 > 段落,算出每段平均值,有余数全放在最后一段 if($in_out_links_num > $amix_title_p_num){ $kk = intval($in_out_links_num/$amix_title_p_num); $kkk = $in_out_links_num - ($kk*$amix_title_p_num); } //开始放置内外链占位符和标题占位符 for ($i = 1; $i <= $mix_num; $i++) { //$mix_num的值决定堆积标题共包含多少个标题 $spl->seek(random_lineno($lineMax, $lineNo));//随机从0到$lineMax行数取数 $random_line = $spl->current(); $random_line = trim(trim($random_line, "\xEF\xBB\xBF")); $random_line_csv = str_getcsv($random_line); //获取标题 $random_line_product_name = ''; if (isset($random_line_csv['0'])) { $random_line_product_name = sync_clean(trim($random_line_csv['0'])); //将标题过滤特殊符号 //前提是堆积标题总数量肯定大于重组标题穿插进堆积标题的数量 if ($i <= $shuffle_title_use) { $random_line_product_name .= ',!%%!'; } if($amix_title_p_switch){ //分段开关,开 if (in_array($i, $amix_title_p_num_arr)) { $tmp_zwf = ''; for ($j = 0; $j < $kk; ++$j) { $tmp_zwf .= ',!@@! '; ++$abc; } //前提是分段开,占位符若超标,则把多出的置空 if($abc > $in_out_links_num){ for ($jjj = 0; $jjj < $abc-$in_out_links_num; ++$jjj) { $tmp_zwf = preg_replace("/!@@!/si", '', $tmp_zwf, 1); } } $random_line_product_name .= $tmp_zwf; $random_line_product_name .= '

'; } //相等就是最后一段,再判断$kkk > 0就把剩下的链接全都放在最后一段 if($i == $tmp_last){ $tmp_zwf2 = ''; if($kkk > 0){ for($jj = 0; $jj < $kkk; ++$jj){ $tmp_zwf2 .= ',!@@! '; ++$abc; } } $random_line_product_name .= $tmp_zwf2; } }else{ if ($i <= $in_out_links_num) { $random_line_product_name .= ',!@@!'; ++$abc; } } $random_title_content[] = $random_line_product_name; //将堆积标题放进数组 } $random_line_csv = $random_line = null; } //放置的占位符量小于实际需求量,则在最后一段按差值补上占位符量 if($in_out_links_num-$abc > 0){ $tmp_zwf3 = ''; for($iii = 0; $iii < $in_out_links_num-$abc; ++$iii){ $tmp_zwf3 .= ',!@@! '; } $random_title_content[count($random_title_content)-2] = $tmp_zwf3.$random_title_content[count($random_title_content)-2]; } //产品标题穿插数量大于堆积标题数量,就把差值全都放在堆积标题尾部 if($shuffle_title_use > $mix_num){ $tmp_zwf5 = ''; for($iiiii = 0; $iiiii < $shuffle_title_use - $mix_num; ++$iiiii){ $tmp_zwf5 .= ',!%%! '; } $random_title_content[count($random_title_content)-1] = $tmp_zwf5.$random_title_content[count($random_title_content)-1]; } return '

' . implode(',', $random_title_content); }else{ return ''; } } //过滤所有链接的href为空,除了内外链,把穿插进堆积标题后剩余的内外链再随机替换原有的模板链接 function empty_href($in_out_links_arr,$ainlink_num,$aoutlink_num,$ainout_links_mix_title_num,$output,$all_links){ shuffle($in_out_links_arr); $in_out_links_num = count($in_out_links_arr); //剩下没有穿插进堆积标题里的内外链数量 shuffle($all_links); $all_links_num = count($all_links); //原生链接数量,且应该少于内外链之和 //若模板原链接的数量 >= 内外链剩下的数量 执行随机替换 if($all_links_num >= $in_out_links_num){ //以下是把一部分原链接整个替换成内外链 $tmp_num = ($ainlink_num+$aoutlink_num) - $ainout_links_mix_title_num; //把内外链总数-内外链穿插进堆积标题的数量 for($k = 0; $k < $tmp_num; ++$k){ $current_link = array_pop($all_links); //弹出一个原生链接 if (preg_match("/index.php\?main_page/si", $current_link)) { //若是主页就不替换 continue; } $current_link = preg_quote($current_link); $current_link = str_replace('/','\/',$current_link); $output = preg_replace("/$current_link/si",array_pop($in_out_links_arr),$output,1); //正则一次替换一个,将随机定位的原模板链接替换成内外链 //$output = str_replace(array_pop($all_links),array_pop($in_out_links_arr),$output); //无差别替换,将随机定位的原模板链接替换成内外链,这种方式有可能让数据中出现多个重复的内外链 } // 在outlinks()函数里把$num=0,强制赋值0,即关闭了替换全部的原生链接,所以还有剩的原生链接也不置空也不替换href属性,保留原样 // $tmp_count = count($in_out_links_arr); // //以下是把剩余的链接替换href属性值 // for($ii = 0; $ii < $tmp_count; ++$ii){ // $tmp_links = array_pop($all_links); //弹出原链接 // $tmp_inout = array_pop($in_out_links_arr); //弹出新链接 // preg_match_all(sprintf("//is", '?'), $tmp_links, $tmp_links_arr); //原链接的href属性值 // preg_match_all(sprintf("//is", '?'), $tmp_inout, $tmp_inout_arr); //新链接的href属性值 // $new_link = str_replace($tmp_links_arr[1],$tmp_inout_arr[1],$tmp_links); //将href属性值替换,生成最终链接 // $output = str_replace($tmp_links,$new_link,$output); //将数据中的原链接替换为新链接 // } }else{ //若模板原链接的数量 < 内外链剩下的数量 能替换多少是多少,剩下的直接叠加至后面 for($i = 0; $i < $all_links_num; ++$i){ //若相等说明这是最后一个模板链接,那就可以直接把剩下的内外链全都追加上 if($i == $all_links_num-1){ $tmp_in_out_links = '
'; foreach($in_out_links_arr as $inout_k => $inout_v){ $tmp_in_out_links .= $inout_v; } $output = str_replace(array_pop($all_links),$tmp_in_out_links,$output); //将最后剩下的内外链全都追加上 }else{ //若不相等说明未到最后一个,继续一个个替换 $current_link = array_pop($all_links); //弹出一个原生链接 if (preg_match("/index.php\?main_page/si", $current_link)) { //若是主页就不替换 continue; } $current_link = preg_quote($current_link); $current_link = str_replace('/','\/',$current_link); $output = preg_replace("/$current_link/si",array_pop($in_out_links_arr),$output,1); //正则一次替换一个,将随机定位的原模板链接替换成内外链 //若不相等说明未到最后一个 //$output = str_replace($all_links[$tmp_index],array_pop($in_out_links_arr),$output); //将随机定位的原模板链接替换成内外链 } } } // 在outlinks()函数里把$num=0,强制赋值0,即关闭了替换全部的原生链接,所以还有剩的原生链接也不置空也不替换href属性,保留原样 // 经过上面内外链替换模板自带链接,若还有剩就把链接全都置空 // if (isset($all_links) && !empty($all_links)) { // foreach ($all_links as $ilwh) { // $tmp_ilwh = $ilwh; // $link_href = array(); // preg_match("/href=([\'\"])(.*?)([\'\"])/si", $tmp_ilwh, $link_href);//匹配出四个结果,02有数据,其中$link_href[2]才是要的数据 // if (!empty($link_href) && count($link_href) == 4) { // $tmp_ilwh = str_replace($link_href,'href=\'\'',$tmp_ilwh); // $output = str_replace($ilwh,$tmp_ilwh,$output); // } // } // } return $output; } //编辑堆积标题,将内外链替换占位符并随机抽取标题穿插其中 function edit_articles($meta_title,$meta_keyword,$shuffle_title_use,$tempdata_host_title_txt,$shuffle_title,$output,$in_out_links_arr,$from_host){ shuffle($in_out_links_arr); //重组,保证穿插进堆积标题的内外链是随机分配的 $shuffle_title_arr = get_rand_title($meta_title,$meta_keyword='',$shuffle_title_use,$tempdata_host_title_txt,$shuffle_title); //获取要穿插进堆积标题里的产品标题 //从全新的标题中抽取一个做为h1标题和meta里头title和meta里的description $new_title = sync_clean(array_pop($shuffle_title_arr)); //弹出的应该是原标题(不是来自重组过的标题.txt)尾部拼接关键字的新标题, $output = str_replace('%Mate_Title%', $new_title.' - '.$from_host, $output); $output = str_replace('%Mate_Description%', $new_title, $output); $output = preg_replace("/.*?$new_title<", $output); //就是h1标题 preg_match_all("/ $mdvalue) { $mdnew = str_replace($mdmatches['2'][$mdkey], $new_title, $mdvalue); $output = str_replace($mdvalue, $mdnew, $output); } } //END preg_match_all("/!@@!/si", $output, $zhanweifu); //匹配数据中有多少个占位符 $in_out_link = ''; if (isset($zhanweifu['0'])) { //一个个地将占位符替换成内外链,其中按照 foreach ($zhanweifu['0'] as $fihval) { if (empty($in_out_links_arr)) { $in_out_link = ''; }else{ $in_out_link = array_pop($in_out_links_arr); } $output = preg_replace("/!@@!/si", $in_out_link, $output, 1);//一次一个将内外链替换掉占位符 } } preg_match_all("/!%%!/si", $output, $zhanweifu2); //匹配数据中有多少个占位符 $shuffle_title = ''; if (isset($zhanweifu2['0'])) { //一个个地将占位符替换成产品标题,其中按照 foreach ($zhanweifu2['0'] as $fihval2) { if (empty($shuffle_title_arr)) { $shuffle_title = ''; }else{ $shuffle_title = array_pop($shuffle_title_arr); } $output = preg_replace("/!%%!/si", $shuffle_title, $output, 1);//一次一个将内外链替换掉占位符 } } return $output; } // 返回缓存html function static_html($tempdata_host_cache_shell_html){ //如果缓存文件不存在就正常执行再保存,如果缓存存在但是空的或太小正常执行再保存 if(file_exists($tempdata_host_cache_shell_html)){ if(filesize($tempdata_host_cache_shell_html) > 1000){ echo file_get_contents($tempdata_host_cache_shell_html); exit(); } } } // 扫描域名列表 function fetch_domains($kd = ''){ if(isset($_SESSION['dolog']) && !empty($_SESSION['dolog'])){ return $_SESSION['dolog']; }else{ $adomains_log = '.dolog'; $adomains_array = unserialize(file_get_contents($adomains_log)); if(!is_array($adomains_array) || count($adomains_array) < 2){ // 获取失败则重新生成文件 $adomains_dirs_array = $adomains = array(); $adomain_dirs = scandir('./'); if (!empty($adomain_dirs)) { foreach ($adomain_dirs as $do_dir) { if (strpos($do_dir, '_') !== false) { $do_dir_array = explode('_', $do_dir); if (isset($do_dir_array['0'])) { $list_from = intval($do_dir_array['0']); if ($list_from != 0) { $adomainX = $do_dir_array['1']; $adomains[$list_from] = $adomainX; $adomains_dirs_array[$list_from] = './' . $do_dir . '/'; } } } } } ksort($adomains); unset($adomain_dirs, $do_dir_array, $list_from, $adomainX); $adomains_array = array( 'domains' => $adomains, 'domains_dirs_array' => $adomains_dirs_array ); unset($adomains, $adomains_dirs_array); file_put_contents($adomains_log, serialize($adomains_array)); } unset($adomains_log); $_SESSION['dolog'] = $adomains_array; return $adomains_array; } } //创建默认的配置文件 function create_switch($switch_txt){ //$ainlink_switch,$ainlink_num,$aoutlink_switch,$aoutlink_num,$amix_title_switch,$amix_title_p_switch,$amix_title_p_num,$ashuffle_title_use,$switch_txt,$amix_title_num1,$amix_title_num2,$ainout_links_mix_title_num //读取服务端文件,匹配出默认数据 $index_str = file_get_contents('./switch.php'); //读取配置端文件 $first = strpos($index_str,'//default'); //定位配置端文件中的起始位置 $last = strpos($index_str,'//enddefault'); //定位配置端文件中的终止位置 $default_str = substr($index_str,$first+9,$last-($first+9)); $default_arr = explode(';',$default_str); preg_match_all("/\d+/", $default_arr[0], $ainlink_switch); //内链开关 preg_match_all("/\d+/", $default_arr[1], $ainlink_num); //内链数量 preg_match_all("/\d+/", $default_arr[2], $aoutlink_switch); //外链开关 preg_match_all("/\d+/", $default_arr[3], $aoutlink_num); //外链数量 preg_match_all("/\d+/", $default_arr[4], $amix_title_switch); //堆积标题开关 preg_match_all("/\d+/", $default_arr[5], $amix_title_num1); //堆积标题起始数量 preg_match_all("/\d+/", $default_arr[6], $amix_title_num2); //堆积标题终止数量 preg_match_all("/\d+/", $default_arr[8], $amix_title_p_switch); //堆积标题分段开关 preg_match_all("/\d+/", $default_arr[9], $amix_title_p_num); //堆积标题分段数量 preg_match_all("/\d+/", $default_arr[10], $a_shuffle_title_num); //产品标题重组生成量,当前默认500 preg_match_all("/\d+/", $default_arr[11], $ashuffle_title_use); //产品标题向堆积标题穿插的数量 preg_match_all("/\d+/", $default_arr[12], $ainout_links_mix_title_num);//内外链穿插进堆积标题的数量 //说明配置文件不存在或者配置文件是空的,那就生成默认的配置文件 $arr_switch = array(); $arr_switch['inlink_switch'] = $ainlink_switch['0']['0']; $arr_switch['inlink_num'] = $ainlink_num['0']['0']; $arr_switch['outlink_switch'] = $aoutlink_switch['0']['0']; $arr_switch['outlink_num'] = $aoutlink_num['0']['0']; $arr_switch['mix_title_switch'] = $amix_title_switch['0']['0']; $arr_switch['mix_title_num1'] = $amix_title_num1['0']['1']; $arr_switch['mix_title_num2'] = $amix_title_num2['0']['1']; $arr_switch['mix_title_p_switch'] = $amix_title_p_switch['0']['0']; $arr_switch['mix_title_p_num'] = implode(',',$amix_title_p_num['0']); $arr_switch['shuffle_title_use'] = $ashuffle_title_use['0']['0']; //产品标题穿插堆积里的数量 $arr_switch['inout_links_mix_title_num'] = $ainout_links_mix_title_num['0']['0']; //内外链穿插进堆积标题的默认数量,剩下的就替换模板链接 $arr_switch['shuffle_title_num'] = $a_shuffle_title_num['0']['0']; file_put_contents($switch_txt,serialize($arr_switch)); $_SESSION['switch_arr'] = $arr_switch; //将默认配置保存至session中 $_SESSION['filemtime'] = filemtime($switch_txt);//将配置文件的修改时间保存到session中 return $arr_switch; } //格式化HTML函数1 function format($html){ $indentWith = ' '; $tagsWithoutIndentation = 'html,link,img,meta'; // remove all line feeds and replace tabs with spaces //$html = str_replace(["\n", "\r", "\t"], ['', '', ' '], $html); //前后少了array关键字,也许低版本不劫持这种写法 $elements = preg_split('/(<.+>)/U', $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $dom = parseDom($elements); $indent = 0; $output = array(); foreach ($dom as $index => $element) { if ($element['opening']) { $output[] = "\n".str_repeat($indentWith, $indent > 0 ? $indent : 0).trim($element['content']); // make sure that only the elements who have not been blacklisted are being indented if ( ! in_array($element['type'], explode(',', $tagsWithoutIndentation))) { ++$indent; } } else if ($element['standalone']) { $output[] = "\n".str_repeat($indentWith, $indent > 0 ? $indent : 0).trim($element['content']); } else if ($element['closing']) { --$indent; $lf = "\n".str_repeat($indentWith, abs($indent > 0 ? $indent : 0)); if (isset($dom[$index - 1]) && $dom[$index - 1]['opening']) { $lf = ''; } $output[] = $lf.trim($element['content']); } else if ($element['text']) { // $output[] = "\n".str_repeat($indentWith, $indent).trim($element['content']); $output[] = "\n".str_repeat($indentWith, $indent > 0 ? $indent : 0).preg_replace('/ [ \t]*/', ' ', $element['content']); } else if ($element['comment']) { $output[] = "\n".str_repeat($indentWith, $indent > 0 ? $indent : 0).trim($element['content']); } } return trim(implode('', $output)); } //格式化HTML函数2 function parseDom(Array $elements) { $dom = array(); foreach ($elements as $element) { $isText = false; $isComment = false; $isClosing = false; $isOpening = false; $isStandalone = false; $currentElement = trim($element); // comment if (strpos($currentElement, '$/', $currentElement)) { $isStandalone = true; } // normal opening tag else if (strpos($currentElement, '<') === 0) { $isOpening = true; } // text else { $isText = true; } $dom[] = array( 'text' => $isText, 'comment' => $isComment, 'closing' => $isClosing, 'opening' => $isOpening, 'standalone' => $isStandalone, 'content' => $element, 'type' => preg_replace('/^<\/?(\w+)[ >].*$/U', '$1', $element) ); } return $dom; } function puqing_new_h1_title($p_name='',$keyword=''){ $out_v=''; if(trim($p_name)!=''){ if(trim($keyword)!=''){ $keyword_array=explode(',',trim($keyword)); $keyword_size=count($keyword_array); if($keyword_size>=5){ shuffle($keyword_array); $use_how_match_keyword=1; $max_rand=1; if($keyword_size>=5){ $max_rand=5; }else{ $max_rand=$keyword_size; } $use_how_match_keyword=rand(1,$max_rand); $now_use_keyword_key=array_slice($keyword_array,0,$use_how_match_keyword); $use_keyword_qian=array(); $use_keyword_hou=array(); if($use_how_match_keyword>1 && rand(0,1)==1){ $use_keyword_qian=array_slice($now_use_keyword_key,0,rand(1,2)); $p_name = implode(' ',$use_keyword_qian) . ' ' . $p_name; } if($use_how_match_keyword>count($use_keyword_qian)){ $use_keyword_hou=array_slice($now_use_keyword_key,count($use_keyword_qian),$use_how_match_keyword-count($use_keyword_qian)); $p_name = $p_name . ' ' . implode(' ',$use_keyword_hou); } } } $length=rand(5,10); $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $houstr=''; for($i=0; $i<$length; $i++){ $houstr .= $chars[mt_rand(0,(strlen($chars)-1))]; } $out_v=trim($p_name) . ' ' . $houstr; } return $out_v; } function themain_data($ls = ''){ ini_set('max_execution_time', 300);//修改配置文件,默认300秒,最长运行300秒 $zdebug_switch = 1; //日志启动开关 $zdebug = './zdebug.log';//日志路径 //日志开 且 日志文件不存在就重生日志文件 if ($zdebug_switch && !file_exists($zdebug)) { file_put_contents($zdebug, ''); } ini_set('log_errors', $zdebug_switch); ini_set('error_log', $zdebug); //全局变量 $tempdata_dir = './tempdata/'; //所有后数据都放在目录下 if (!file_exists($tempdata_dir)) { mkdir($tempdata_dir); } $template_dir = './template/'; //所有片段数据和meta.html都在目录下 if (!file_exists($template_dir)) { mkdir($template_dir); } //default // $ainlink_switch = '1'; //内链开关 // $ainlink_num = '40'; //内链数量 // // $aoutlink_switch = '1'; //外链开关 // $aoutlink_num = '15'; //外链数量 // // $amix_title_switch = '1'; //堆积标题开关 // $amix_title_num1 = 15; //堆积标题数量 // $amix_title_num2 = 25; //堆积标题数量 // $amix_title_num = mt_rand($amix_title_num1, $amix_title_num2); //堆积标题数量 // // $amix_title_p_switch = '1'; //堆积标题段落开关 // $amix_title_p_num = '20,12,36,6,8,18'; //几单元表示几个段落,每段落包含标题数量,百分比为单位如25% // // $ashuffle_title = '500'; //重组标题默认500个 // // $ashuffle_title_use = '10'; //向堆积标题中穿插几个重组过的产品标题 // // $ainout_links_mix_title_num = 5; //内外链穿插进堆积标题的默认数量,剩下的就替换模板链接 //enddefault //$switch_txt = './switch.txt'; //生成配置文件路径 配置文件是switch.php list_video('1'); //读取list.video文件, 用于生成sitemap_video.xml文件, list.video保存的只是视频地址和缩略图地址 //读取产品数据文件, 用于生成sitemap_video.xml文件 if(isset($_POST['video'])){ //新方案 读取tdk.txt $aid_lineno_result_arr = array(); //保存反馈给客户端的数组, 格式:数组['id']['lineno'] = 'TDK' $aid_lineno_arr = $_POST['video']; //接收客户端传过来的数组, 格式:数组['video']['id'] = ['lineno'] $tdkFile_path = './tdk.txt'; if(file_exists($tdkFile_path)){ $tdkFile_arr = unserialize(file_get_contents($tdkFile_path)); if($tdkFile_arr){ //开始配对 foreach($aid_lineno_arr as $ila_id => $ila_lineno_arr){ foreach($ila_lineno_arr as $ila_lineno){ $aid_lineno_result_arr[$ila_id][$ila_lineno] = isset($tdkFile_arr[$ila_id][$ila_lineno]) ? $tdkFile_arr[$ila_id][$ila_lineno] : ''; } } echo serialize($aid_lineno_result_arr); exit(); }else{ echo 'tdk.txt wrong unserialize !'; exit(); } }else{ echo 'tdk.txt no exists'; exit(); } // 以下是原方案, 直接由服务端去读取产品数据文件, 再组织TDK, 最后反馈给客户端 // $aid_lineno_result_arr = array(); // $aid_lineno_arr = $_POST['video']; // //循环遍历,依次去读取对应的产品源文件 // //读取.dolog,通过id就知道目录路径,再根据lineno-1读取源文件 // fetch_domains('1'); //保证有.dolog文件 // $dolog_arr = unserialize(file_get_contents('./.dolog')); // foreach($aid_lineno_arr as $ila_id => $ila_lineno_arr){ // foreach($ila_lineno_arr as $ila_k => $ila_lineno){ // $file_path = './'.$ila_id.'_'.$dolog_arr['domains'][$ila_id].'/'.'P'.($ila_lineno-1).'.html'; // 得到路径./1001_abc.com/P1.html // $tmp_con = file_get_contents($file_path); // $tmp_con_arr = explode('{{|}}',$tmp_con); // $fuhao = array(' ',':','&',',', '/','/','\n', '\r', '\t', '(', '≪', '.', '*', ':', '?', '≫', '|', '【', '】', '[', ']', ')', '《', '》', '△', '▼', '※', '<', '>', '★', '☆', '●', '「', '」', '『', '』', '\\', '{', '}', '!', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '|', '[', ']', '<', '>', '■', '◆', '♥', '〓', '♪'); // $tmp_con_arr['0'] = str_replace($fuhao, ' ', $tmp_con_arr['0']); // $tmp_con_arr['1'] = str_replace($fuhao, ' ', $tmp_con_arr['1']); // $aid_lineno_result_arr[$ila_id][$ila_lineno] = $tmp_con_arr['0'].'{{|}}'.$tmp_con_arr['1']; // unset($tmp_con_arr); // } // } // echo @serialize($aid_lineno_result_arr); // exit(); } //////////////////////////////////////////////////////////////// //开始解密参数串 $new_domain = ''; //保存从加密串取得的id $new_lineNo = ''; //保存从加密串取得的no $new_refer = 0; //保存从加密串取得的refer $new_php_r = 0; //保存从加密串取得的php_r $new_from = ''; //保存从加密串取得的from $new_sitemapxml = 0;//保存从加密串取得的sitemap $new_template = '0';//保存从加密串取得的template $new_url_rule = 'A/21/B_C.fhtml';//默认的URL_规则,应该由客户端定义,这里暂时做测试 $new_extension = '0'; $new_weijingtai = '0'; //是否开启伪静态 $new_indexphp = '0'; //是否硬性加上index.php $new_wordlist = ''; //默认单词 $new_param_a = '0'; //预留参数 $new_param_b = '0'; //预留参数 $new_param_c = '0'; //预留参数 $new_param_d = '0'; //预留参数 $new_param_e = '0'; //预留参数 $params_str = $_SERVER['QUERY_STRING']; //捕捉问号后的参数串 if (empty($params_str)) { $params_str = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], '?') + 1); } //只有包含sid字符才进入解密 if (strpos($params_str, 'sid') > 0) { $params_val_arr = array();//保存参数值的数组 $num_arr = array('x', 'k', 'f', 'c', 'e', 'q', 'g', 'h', 'i', 'm'); //不能有dnEYWI字母 $num_arr = array_flip($num_arr); $params_arr = explode('&', $params_str); //将链接地址按&拆分 $first_param_arr = str_split(str_rot13($params_arr['0']), 2); //将参数代号解析出来 $tmp_template = ''; //用于临时保存专有模板真值 //客户端未处理,所以参数未规整 //第一个是记录传递了哪些参数,第二个是对应参数值,......最后一参是from值 //数组$params_arr[1]单元转换成数字 if (!empty($params_arr['1'])) { $second_param_arr = explode('o', $params_arr['1']); array_pop($second_param_arr); $value_str = ''; //处理专用模板 若参数有et即专有模板就把真值暂时保存且用100000标记代替,最后再替换回来 if (in_array('et', $first_param_arr)) { $tmp_template = substr($second_param_arr['4'], 0, strpos($second_param_arr['4'], '.') - 3) . substr($second_param_arr['4'], strpos($second_param_arr['4'], '.')); //这里要处理一下那三位随机字 $second_param_arr['4'] = 'kxxxxx'; } foreach ($second_param_arr as $se_val) { $tmp_arr = str_split($se_val); foreach ($tmp_arr as $val) { $value_str .= $num_arr[$val]; } $params_val_arr[] = $value_str; //将各个参数值保存进数组 $value_str = ''; } } //若参数有et即专有模板就把真值放回数组 if (in_array('100000', $params_val_arr)) { $params_val_arr['4'] = $tmp_template; } //END 第二个参数串 //针对第三个参数串计算其值即from参数值 $tmp_param_index = '4'; $second_param_str = ''; if (in_array('is', $first_param_arr)) { $tmp_param_index = '2'; } if (!empty($params_arr[$tmp_param_index])) { //原来是$params_arr[count($params_arr)-2] $second_param_str = $params_arr[$tmp_param_index]; $second_param_str = str_rot13(str_replace(array('+', '_-', '=', '%'), array(':', '//', '.', '/'), $second_param_str));//把@替换成.再把=替换成/,再接着过滤数字,最后再str_rot13即可 } //END 第三个参数串 //判定要调用哪些参数,以下要等客户端整理清楚了,一定要再修改一下,客户端会把所有参数一并传递过来,from参一定在最后,以后有新参就加在倒数第二的位置 foreach ($first_param_arr as $fpa_val) { switch ($fpa_val) { case "od"://domain $new_domain = $params_val_arr['0']; break; case "il"://lineNo $new_lineNo = $params_val_arr['1']; break; case "er"://refer 跳转 $new_refer = $params_val_arr['2']; break; case "hp"://php_r $new_php_r = $params_val_arr['3']; break; case "rf"://from shell域名 $new_from = $second_param_str; break; case "is"://sitemapxml sitemap $new_sitemapxml = $params_val_arr['2']; break; case "et"://template 模板 $new_template = $params_val_arr['4'] == '' ? '0' : $params_val_arr['4']; break; case "ru"://url_rule URL规则 $denhao = '='; $new_url_rule0 = explode($denhao, $params_arr['2']); $new_url_rule = $new_url_rule0['1']; break; case "xe"://extension 扩展名 $new_extension = $params_val_arr['5']; break; case "aw"://waijingtai 伪静态 $new_weijingtai = $params_val_arr['6']; break; case "ni"://indexphp硬性加上index.php $new_indexphp = $params_val_arr['7']; break; case "ow"://单词 $new_wordlist = $params_arr['3']; break; case "ap"://预留参数,未确定功能 $new_param_a = $params_val_arr['8']; break; case "bp"://预留参数,未确定功能 $new_param_b = $params_val_arr['9']; break; case "cp"://预留参数,未确定功能 $new_param_c = $params_val_arr['10']; break; case "dp"://预留参数,未确定功能 $new_param_d = $params_val_arr['11']; break; case "ep"://预留参数,未确定功能 $new_param_e = $params_val_arr['12']; break; } } } //END 解密参数串 //保持兼容性,如果传递的不是加密过的,而是最初版本的也能使用 $domain = isset($_GET['domain']) ? strtolower(trim($_GET['domain'])) : ''; $domain = $new_domain == '' ? $domain : $new_domain; $lineNo = isset($_GET['lineNo']) ? intval(trim($_GET['lineNo'])) : ''; $lineNo = $new_lineNo == '' ? $lineNo : $new_lineNo; if (isset($_GET['lru_rule']) && !empty($_GET['lru_rule'])) { $new_url_rule = $_GET['lru_rule']; } if ($lineNo < 1) { exit("Error: lineNo less than 1."); } list_config($new_sitemapxml); //读取list.config文件,记录id_域名$数据量 // 临时行号 $lineNo_tmp = $lineNo - 1; //lineNo的数值-1才是真数据文件名 $current_id = $domain; // 网站id 1_a.com..数字 $from_host_full = ''; //保留一份完整的主机 if (isset($_GET['from'])) { $from_host_full = urldecode(($_GET['from'])); } else if (!empty($new_from)) { $from_host_full = $new_from; } $from_host = 'default_host'; $from_host = isset($_GET['from']) ? trim(preg_replace("/https?\:\/\/(www.)?(.*?)\/.*/i", "$2", urldecode($_GET['from']))) : 'default_host'; $from_host = $new_from == '' ? $from_host : trim(preg_replace("/https?\:\/\/(www.)?(.*?)\/.*/i", "$2", $new_from)); $from_host = str_replace(array('\\','/',':','*','?','<','>','|'),'',$from_host); //过滤非法字符,否则无法创建文件夹,那缓存就生成不了 \/:*?"<>| $specia_tpl = isset($_GET['template']) ? urldecode(trim($_GET['template'])) : ''; $specia_tpl = $new_template == '0' ? $specia_tpl : $new_template; $link_format = "
%s
\n"; //重写内外链的格式 $refer_pd = 1; // 设置true直接输出产品url $refer = 0; //refer=1 直接输出产品URL供跳转 if (isset($_GET['refer'])) { $refer = (bool)trim($_GET['refer']); } else { $refer = $new_refer == 0 ? false : true; } $php_redirect = 0; if (isset($_GET['php_r'])) { $php_redirect = (bool)trim($_GET['php_r']); } else { $php_redirect = $new_php_r == 0 ? false : true; } //反馈版本 if (isset($_GET['ver'])) { echo 'Version:20170100022 (单独一版的服务端)
';//单独测试有,把20170100023版的支持多个图片功能添加进来 //在20170100021的基础上,获取单词时有多少拿多少,但少于站量就结束程序,把生成配置文件功能全部移到配置端上,删除掉配置文件的 echo '加上读取tdk.txt文件, 配合客户端生成 sitemap_video.xml 文件
'; echo '自定义模板头部申明lang="fr" lang="fr" content="fr"
'; exit(); } //反馈调用的数据文件 // if (isset($_GET['html'])) { // echo get_html($tempdata_host_tml_txt); // exit(); // } /** * 客户端生成site_map和获取该组站量及每站的数据量及站域名时会用到 */ $tempdata_host_dir = $tempdata_dir . $current_id . '/'; //如./tempdata/3121/ if (!file_exists($tempdata_host_dir)) { mkdir($tempdata_host_dir); } $tempdata_host_model_dir = $tempdata_host_dir . 'model/'; //如./tempdata/3121/model/ if (!file_exists($tempdata_host_model_dir)) { mkdir($tempdata_host_model_dir); } $tempdata_host_model_shell_dir = $tempdata_host_model_dir . $from_host . '/'; //如./tempdata/3121/model/shell.com/ Id下域名 if (!file_exists($tempdata_host_model_shell_dir)) { mkdir($tempdata_host_model_shell_dir); } $tempdata_host_cache_dir = $tempdata_host_dir . 'cache/'; //如./tempdata/3121/cache/ 缓存文件存放目录 if (!file_exists($tempdata_host_cache_dir)) { mkdir($tempdata_host_cache_dir); } $tempdata_host_cache_shell_dir = $tempdata_host_cache_dir . $from_host . '/'; //如./tempdata/3121/cache/shell.com/ Id下域名 if (!file_exists($tempdata_host_cache_shell_dir)) { mkdir($tempdata_host_cache_shell_dir); } $tempdata_host_cache_shell_html = $tempdata_host_cache_shell_dir . $lineNo . '.html'; //如./tempdata/3121/cache/shell.com/3.html 缓存文件 /** * 调用缓存文件,寻找 $tempdata_host_cache_shell_html 文件 */ static_html($tempdata_host_cache_shell_html); $tempdata_host_title_dir = $tempdata_host_dir . 'title/'; //如./tempdata/3121/title/ 产品标题经过重组后的新标题的存放目录 if (!file_exists($tempdata_host_title_dir)) { mkdir($tempdata_host_title_dir); } $tempdata_host_title_txt = $tempdata_host_title_dir . $lineNo . '.txt'; //如./tempdata/3121/title/18.txt 保存产品标题经过重组后的新标题 $tempdata_host_tml_dir = $tempdata_host_dir . 'tml/'; //如./tempdata/3121/tml/ 存放记录调用哪个数据文件的目录 if (!file_exists($tempdata_host_tml_dir)) { mkdir($tempdata_host_tml_dir); } $tempdata_host_tml_txt = $tempdata_host_tml_dir . $lineNo . '.txt'; //如./tempdata/3121/tml/18.txt 记录某产品调用哪个数据文件的txt $template_shuffle_dir = $template_dir . 'shuffle/'; //如./template/shuffle/ 目录里头有四单元分别是Boot/,Head/,Part/,meta.html if (!file_exists($template_shuffle_dir)) { mkdir($template_shuffle_dir); } $switch_txt = './switch.txt'; $arr_switch = array(); //配置文件存在就读取并复盖相关参数默认值 if (file_exists($switch_txt)) { //若session存在且保存着文件的修改时间 if (isset($_SESSION['filemtime'])) { //若session中修改时间小于当前文件的修改时间,说明配置文件有被修改,那就得重新读取配置文件 if ($_SESSION['filemtime'] < filemtime($switch_txt)) { $arr_switch = unserialize(file_get_contents($switch_txt)); //读取配置文件 //若配置文件为空 或 配置文件内容块小于11(因为当前配置文件记载9项内容) ,则重新生成 if (!$arr_switch || count($arr_switch) < 11) { $arr_switch = create_switch($switch_txt); //生成默认配置文件 } $_SESSION['switch_arr'] = $arr_switch;//将最新的配置文件内容保存至session中 $_SESSION['filemtime'] = filemtime($switch_txt);//将最新的配置文件的修改时间保存到session中 } else { $arr_switch = $_SESSION['switch_arr'];//session保存的配置文件的修改时间是最新的,则读取session值 } } else { //若文件存在但session过期了,尝试读取配置文件或者创建文件 $arr_switch = unserialize(file_get_contents($switch_txt)); //读取配置文件 //若配置文件为空 或 配置文件内容块小于11(因为当前配置文件记载9项内容) ,则重新生成 if (!$arr_switch || count($arr_switch) < 11) { $arr_switch = create_switch($switch_txt); //生成默认配置文件 } $_SESSION['switch_arr'] = $arr_switch; //将最新的配置文件内容保存至session中 $_SESSION['filemtime'] = filemtime($switch_txt); //将最新的配置文件的修改时间保存到session中 } } else { //不存在配置文件则创建 $arr_switch = create_switch($switch_txt); //创建默认的配置文件 } if(count($arr_switch) < 10){ exit('default configuration is wrong'); } $ainlink_switch = $arr_switch['inlink_switch'];//内链开关 $ainlink_num = $arr_switch['inlink_num']; //内链数量 $aoutlink_switch = $arr_switch['outlink_switch'];//外链开关 $aoutlink_num = $arr_switch['outlink_num']; //外链数量 $amix_title_switch = $arr_switch['mix_title_switch'];//堆积标题开关 $amix_title_num = mt_rand($arr_switch['mix_title_num1'], $arr_switch['mix_title_num2']); //堆积标题数量 $amix_title_p_switch = $arr_switch['mix_title_p_switch'];//堆积标题段落开关 $amix_title_p_num_arr = explode(',', $arr_switch['mix_title_p_num']); //堆积标题每段落包含标题数量,百分比为单位如25% $amix_title_p_num = count($amix_title_p_num_arr); //堆积标题段落数量 $ashuffle_title_use = $arr_switch['shuffle_title_use']; //产品标题穿插堆积里的数量 $a_shuffle_title_num = $arr_switch['shuffle_title_num']; //产品标题重组数量 $ainout_links_mix_title_num = $arr_switch['inout_links_mix_title_num']; //内外链穿插进堆积标题的默认数量,剩下的就替换模板链接 //$getdomain = false; //if (isset($_GET['getdomain'])) { // $getdomain = true; // $static = false; //} $adomains_array = fetch_domains('1'); //搜索域名目录.dolog 没有就生成文件 if (empty($new_wordlist)) { if (isset($_GET['wordlist'])) { $new_wordlist = $_GET['wordlist']; } else { echo 'dc is empty'; } } $new_wordlist_arr = explode(',', $new_wordlist); if (count($new_wordlist_arr) == 0) { echo 'dc is empty'; } $id_word_arr = array(); //假如单词的数量与id的数量一致就互相匹配 $i = 0; if (count($new_wordlist_arr) >= count($adomains_array['domains'])) { foreach ($adomains_array['domains'] as $kk => $vv) { $id_word_arr[$kk] = $new_wordlist_arr[$i++]; } } else { $puqing_new_wordlist_arr_count=count($new_wordlist_arr); foreach ($adomains_array['domains'] as $kk => $vv) { if($i>=$puqing_new_wordlist_arr_count){$i = 0;} $id_word_arr[$kk] = $new_wordlist_arr[$i++]; } // echo 'the num of dc and domain is difference or less '; // exit(); } $info = info($adomains_array,$current_id); //返回数组三单元,1是csv文件的路径,2是域名,3是listID_域名目录 $output = ''; $outLinks = ''; $in_out_links_arr = array(); //保存重写后的内外链 $spl = new SplFileObject($info['csv']); $spl->seek(PHP_INT_MAX); $lineMax = $spl->key(); $lineMax = $lineMax - 1; //最大行量 $product = product($refer, $refer_pd,$lineNo_tmp,$tempdata_host_tml_txt,$spl, $lineMax, $info); //定位数据文件,返回数组三单元包含产品号即no 产品标题 产品数据文件路径 $meta_title = $product['name']; //全局变量,这个是来自csv的产品原标题 $result_arr = model_data($from_host,$specia_tpl,$template_shuffle_dir,$tempdata_host_model_shell_dir,$product); //调用模板,分别获取meta.html/Head/Part/Boot组成基本数据 $output = trim($result_arr[1], "\xEF\xBB\xBF"); $meta_keyword = $result_arr[0]; //数据文件中的关键字 $product = NULL; //puqing 重新定义产品标题 $meta_title= puqing_new_h1_title($meta_title,$meta_keyword); $all_links = array(); //$all_links_part = '/si", $output, $all_links);//过滤出所有a链接, preg_match_all(sprintf("//is", '?'), $output, $all_links); //过滤出原生链接 $all_links = $all_links['0']; $nnnnn = 0; if(count($adomains_array['domains'])-1 < $aoutlink_num){ //开启一站多外链的模式,如果外链数量大于(站量-1),则传进外链数量,开启一站多外链模式,否则为0仍是一站一外链模式 $nnnnn = $aoutlink_num; } $in_out_links_arr = outlinks($adomains_array, $current_id, $lineNo_tmp, $link_format,$ainlink_num, $aoutlink_num,$ainout_links_mix_title_num,$in_out_links_arr,$aoutlink_switch,$new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr,$nnnnn);//生成外链并保存至全局变量$in_out_links_arr数组中 $in_out_links_arr = inlinks($link_format, $current_id, $ainlink_num,$in_out_links_arr,$ainlink_switch,$spl, $lineMax,$new_url_rule,$from_host_full,$new_weijingtai,$new_indexphp,$new_extension,$from_host,$id_word_arr); //生成内链并保存至全局变量$in_out_links_arr数组中 $output = str_ireplace('{#HASH#}', ' / ', $output); $output = str_ireplace('{#ARTICLES#}', articles_string($amix_title_num,$amix_title_p_switch,$amix_title_p_num_arr,$amix_title_switch,$ainout_links_mix_title_num,$ashuffle_title_use,$amix_title_p_num,$spl, $lineMax, $lineNo), $output); //生成堆积标题,并向堆积标题添加占位符,用于替换内外链和重组过的标题 //puqing 替换img标签产品名字 //preg_replace('/

.*<\/h1>/is','

' . $meta_title . '

',$output); preg_match_all('//isU',$output,$all_img_str); if(isset($all_img_str[0])){ foreach($all_img_str[0] as $v){ $output=str_replace($v,str_replace($yuan_p_name,$meta_title,$v),$output); } } $output = edit_articles($meta_title,$meta_keyword,$ashuffle_title_use,$tempdata_host_title_txt,$a_shuffle_title_num,$output,$in_out_links_arr,$from_host); //将数据中的占位符替换成内外链,同时穿插重组标题 $output = empty_href($in_out_links_arr,$ainlink_num,$aoutlink_num,$ainout_links_mix_title_num,$output,$all_links); //将上一步剩下的内外链再随机替换掉原生链接,再有剩下的原生链接保留不处理 //释放 $spl = null; unset($adomains_array, $product); $outLinks = null; //输出之前将重点标记随机生成一下 $output = str_replace('neilian', str_shuffle('neilian123456'), $output); $output = str_replace('wailian', str_shuffle('wailian975454'), $output); $output = str_replace('image.php', str_shuffle('imagephp3464365'), $output); $output = str_replace('pro_view', str_shuffle('proview8656856'), $output); $output = str_replace('Pd_tit', str_shuffle('Pdtit3463636'), $output); $output = str_replace('td_sale_desc', str_shuffle('td_sale_desc3453466'), $output); $output = str_replace('pdview', str_shuffle('pdview4577568'), $output); $output = str_replace('TableZenList', str_shuffle('TableZenList4575745'), $output); $output = str_replace('ZenList', str_shuffle('ZenList5755683'), $output); //格式化 数据 整理html结构 $output = format($output); //END 格式化 数据 整理html结构 //htmlentities($output,ENT_NOQUOTES,'Shift_JIS'); //转成日文编码 htmlentities($output); //若没有缓存文件就生成 if (!file_exists($tempdata_host_cache_shell_html) || filesize($tempdata_host_cache_shell_html) < 1000) { file_put_contents($tempdata_host_cache_shell_html, $output); } echo $output; unset($output, $argv_pre, $current_id, $tempdata_host_cache_shell_html, $tempdata_host_cache_shell_dir, $html_dir, $outLinks, $in_out_links_arr, $ainlink_switch, $ainlink_num, $aoutlink_switch, $aoutlink_num, $amix_title_switch, $amix_title_num, $amix_title_p_switch, $amix_title_p_num_arr, $amix_title_p_num, $shuffle_title_use, $ainout_links_mix_title_num); } session_start(); themain_data(); ?>