西壩口 http://www.altenamarketing.com/ zh-CN 十多年的互聯網、開發、營銷推廣從業經歷。專注高品質泰州網站建設、微信開發、軟件開發、網絡營銷推廣等。 Sat, 29 Jul 2023 16:17:00 +0800 Sat, 29 Jul 2023 16:17:00 +0800 Debian如何進行包的升級和更新 http://www.altenamarketing.com/debian-update.html http://www.altenamarketing.com/debian-update.html Sat, 29 Jul 2023 16:17:00 +0800 aijun Debian包管理器(APT)是一個強大而靈活的工具,很容易用來升級和更新已安裝的軟件包。以下是如何進行包的升級和更新的詳細說明:

1、首先,使用以下命令來更新本地軟件包列表:
sudo apt update

2、更新軟件包
然后,使用以下命令更新系統中已安裝的軟件包:
sudo apt upgrade

該命令將檢查系統中所有的軟件包是否有可用的更新,如果有,則將會提示安裝,用戶需要輸入“Y”確認更新。

如果系統中有一些軟件包已經很久沒有更新了(如一年以上),那么在執行上面的命令時可能會提示有一些依賴關系沖突,此時可以使用以下命令更新所有的軟件包:
sudo apt full-upgrade

注意:執行完full-upgrade命令后,系統可能需要重啟。

3、升級系統內核
升級系統內核步驟如下:
3.1 安裝系統內核:使用以下命令安裝系統內核(可在終端查看可用內核版本):
sudo apt install linux-image-amd64
3.2 更新GRUB:使用以下命令更新GRUB引導程序:
sudo update-grub

執行上述命令后,系統會自動檢測新安裝的內核程序并進行配置,然后重啟系統即可。

至此,Debian系統已經完成了更新和升級。

]]>
0 http://www.altenamarketing.com/debian-update.html#comments http://www.altenamarketing.com/feed/
帝國CMS清除html標簽,帝國CMS發布/更新文章時去掉內容所帶站外鏈接的功能代碼... http://www.altenamarketing.com/ecms-links-html.html http://www.altenamarketing.com/ecms-links-html.html Fri, 30 Jun 2023 15:26:00 +0800 aijun 帝國CMS編輯發布文章時,有時因為文章來源于其他網站,因此粘貼時不可避免地會帶有原網站的文章內容格式(可以用帝國CMS編輯器的清除格式功能解決)和站外鏈接(指對方網站的內文鏈接和圖片鏈接)。

那,有沒有更加智能和快捷的方法,可以一勞永逸地解決呢?
PS.此解決方法,也許只適合帝國CMS7.2版無法刪除非本站鏈接的問題。

打開文件\e\class\hinfofun.php

1、在文件最后即“?>”之前,添加如下代碼:

function Replace_Links($body)
{
$host_rule = $_SERVER[‘HTTP_HOST’];
$arr = ”;
preg_match_all(“#]*)>(.*)#iU”, $body, $arr);
if( is_array($arr[0]) )
{
$rparr = array();
$tgarr = array();
foreach($arr[0] as $i=>$v)
{
if( $host_rule != ” && preg_match(‘#’.$host_rule.’#i’, $arr[1][$i]) )
{
continue;
} else {
$rparr[] = $v;
$tgarr[] = $arr[2][$i];
}
}
if( !empty($rparr) )
{
$body = str_replace($rparr, $tgarr, $body);
}
}
$arr = $rparr = $tgarr = ”;
return $body;
}

2、查找if(!$add[id]||!$add[title]||!$add[classid]||!$add[filename])在其上面添加如下代碼:

//帝國刪除非本站鏈接
$add[‘newstext’] = Replace_Links($add[‘newstext’]);

3、查找$ret_r=ReturnAddF($add,$class_r[$add[classid]][modid],$userid,$username,0,0,1);//返回自定義字段,在其上面添加:

//帝國刪除非本站鏈接
$add[‘newstext’] = Replace_Links($add[‘newstext’]);
]]>
0 http://www.altenamarketing.com/ecms-links-html.html#comments http://www.altenamarketing.com/feed/
寶塔面板定時開啟,定時關閉網站解決方法 http://www.altenamarketing.com/bt-nginx.html http://www.altenamarketing.com/bt-nginx.html Tue, 14 Mar 2023 09:57:54 +0800 aijun 直接可在定時任務,一個停止Nginx計劃任務,一個啟動Nginx計劃任務。

Nginx停止:
/etc/init.d/nginx stop

Nginx啟動:
/etc/init.d/nginx start

]]>
0 http://www.altenamarketing.com/bt-nginx.html#comments http://www.altenamarketing.com/feed/
帝國CMS如何自動生成SiteMap.xml網站地圖 http://www.altenamarketing.com/ecms-sitemap.html http://www.altenamarketing.com/ecms-sitemap.html Mon, 17 May 2021 15:41:00 +0800 aijun 帝國CMS如何自動生成SiteMap.xml網站地圖,詳細步驟:
1、登錄網站后臺,一般是http://你的域名/e/admin/,使用帝國cms的自定義頁面功能;
2、進入后臺后,欄目 - 增加自定義頁面,選擇直接頁面,頁面名稱為:網站地圖,文件名修改為../../sitemap.xml
請輸入圖片描述
3、頁面內容(代碼)如下:

<?='<?xml version="1.0" encoding="UTF-8"?>'?> 
 <?  
   if ($_SERVER['HTTP_HOST'] =="www.你的域名.com"){
    $urlset='<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >'; 
    $mobile='';
 }
else{
  $urlset='<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/"> ';
}
?>
<?=$urlset?>
<url> 
<loc>http://<?=$_SERVER['HTTP_HOST']?>[!--news.url--]</loc> 
<?=$mobile?>
<changefreq>always</changefreq> 
<lastmod><?=date("Y-m-d",time())?></lastmod> 
<priority>1.000</priority> 
</url>  
[e:loop={"select * from [!db.pre!]enewsclass order by myorder",0,24,0}] 
<? 
if($bqr['classurl']=='') 
{$sccurl=$public_r['newsurl'].$bqr['classpath']."/";} 
else 
{$sccurl=$bqr['classurl']."/";} 
?> 
<url> 
<loc>http://<?=$_SERVER['HTTP_HOST']?><?=$sccurl?></loc> 
<?=$mobile?>
<changefreq>daily</changefreq> 
<lastmod><?=date("Y-m-d")?></lastmod> 
<priority>0.8000</priority> 
</url> 
[/e:loop] 
[e:loop={"select * from [!db.pre!]enewszt order by ztid",0,24,0}] 
<? 
if($bqr['zturl']=='') 
{$sccurl=$public_r['newsurl'].$bqr['ztpath']."/";} 
else 
{$sccurl=$bqr['zturl']."/";} 
?> 
<url> 
<loc>http://<?=$_SERVER['HTTP_HOST']?><?=$sccurl?></loc> 
<?=$mobile?>
<lastmod><?=date('Y-m-d',$bqr[newstime])?></lastmod> 
<changefreq>daily</changefreq> 
<priority>0.8000</priority> 
</url> 
[/e:loop] 
[e:loop={"select * from [!db.pre!]ecms_news order by newstime desc",0,24,0}] 
<url> 
<loc>http://<?=$_SERVER['HTTP_HOST']?><?=$bqsr[titleurl]?></loc> 
<?=$mobile?>
<lastmod><?=date('Y-m-d',$bqr[newstime])?></lastmod> 
<changefreq>daily</changefreq> 
<priority>0.7000</priority> 
</url> 
[/e:loop]
[e:loop={"select * from [!db.pre!]ecms_ku order by newstime desc",0,24,0}] 
<url> 
<loc>http://<?=$_SERVER['HTTP_HOST']?><?=$bqsr[titleurl]?></loc> 
<?=$mobile?>
<lastmod><?=date('Y-m-d',$bqr[newstime])?></lastmod> 
<changefreq>daily</changefreq> 
<priority>0.7000</priority> 
</url> 
[/e:loop]
</urlset>

4、設置自動刷新自定義頁面:系統 - 計劃任務 - 管理刷新任務 - 增加定時刷新任務,選擇:刷新自定義頁面-網站地圖
請輸入圖片描述
到這里整個設置基本上就OK了。說明下,上面的代碼中設置域名,只是為了PC和移動能夠顯示不同的xmlns屬性,即使不設置域名,代碼也能夠正常生效,另外這段代碼,不像網上能夠搜索到的大部分的一些代碼還需要手動設置域名或者欄目ID什么的,我們這個是自動輸出首頁、所有的欄目和文章url,只是要注意如果有多個數據表的話,需要把輸出文章url那塊的內容拷貝一下,改下表名。使用中有問題可以留言。

文章來源:https://www.visc.cn/jishu/345.html

]]>
0 http://www.altenamarketing.com/ecms-sitemap.html#comments http://www.altenamarketing.com/feed/
網頁百度地圖API,支持位置偏移 http://www.altenamarketing.com/baidu-map-api.html http://www.altenamarketing.com/baidu-map-api.html Sat, 11 Jul 2020 15:56:00 +0800 aijun 在做某企業站的時候,需要百度地圖API顯示公司位置信息,百度地圖生成器本身提供這個服務。但顯示不夠理想,網絡搜索本文章介紹網頁百度地圖API,支持位置偏移,主要包括網頁百度地圖API,支持位置偏移使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。需加載 jQuery

<style type="text/css">
#allmap {width:100%; height:100%; border:#ccc solid 1px; box-sizing:border-box; position:relative; z-index:1;}
.mapbox {width:100%; height:420px; margin-top:15px; position:relative;}
.mapbox.on {height:100%; margin-top:0; position:fixed; top:0; left:0; z-index:1000;}
.mapbox .zw {width:100%; height:100%; position:absolute; top:0; left:0; z-index:2; display:none;}
.anchorBL, .BMap_cpyCtrl {display:none;}
.BMap_pop {transform:translateY(-15px);}
.mapbigest {width:26px; height:26px; position:absolute; top:10px; right:10px; z-index:10; cursor:pointer; background-size:100% 100%; background-repeat:no-repeat; background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAhFBMVEUAAABJSUlKSkpJSUlBQUFDQ0NJSUlJSUlLS0tJSUlFRUVJSUlKSkpKSkpJSUlJSUlJSUlJSUlHR0dISEhJSUlKSkpJSUlLS0tKSkpJSUlJSUlISEhJSUlKSkpISEhJSUlJSUlISEhERERJSUlISEhJSUlJSUlISEhJSUlJSUlHR0dKSkrAS+lAAAAAK3RSTlMAwIBjCAT77BHMDfLjxT3n1qVLNL+0RSIc+GZR9LpYit13F5JuXjAnrpwrMVj51gAAAsxJREFUaN7t2tuSojAQgOEeTARFwRMIKiDo6Dj9/u+3U+xGxA7ZkFC7N/yXXvCVZVGSbgA+3dPiQ1LmMOhRFfko7VQCTLCzGdc32Bk7K+CE3R30kSN2lwIqKvSRAypSIht95NsQSQvoUamHhIXz2sGDXm1L57VHKkVw5cFg3XwkyNDK1keCUMXeoIg/qBKIyy1aSLkQSjWAIW7w2bWFTPZCOVfDGfNJG4FGSSyN9GnAOwKJUBZWSvxiUASS8wBKPG0MGQLVSij7IQw5Ap6tsmkZFKGKvUGRthIaKMc3gyJCmQnlbmws56BGYC4Ut6eSPw0GCsRKyZEaFGmUpVC+bQw1Aqy/8tkyCBJKHhnYTig3KwM29YchXOqLeSBXfC3l0GHA3MWfLsCiHyOAt1gmlG0PY8fIX2SIGDEASG4cSFxfuVKjid8S6I5HRNH+HvrxL3Hve6BonxLDSDmCotzMaJS1xiNx0BiG1Uo4B0W8vnMzBuY5iO4WlHlrHy8cbPK2HMbGxsbGxsbGxsbG/l9864FV+cpfe6AsdhEdG8NpdjXqM+Pa3CiwLtA4YK8tDczVKw0r5YK/m+5B0T0VCrcw8KA5sPtSKPKxBzyIYaTcgwSgHuAstiYGHaJGRJlM6wHORXpUXxPDSEnqH+zyZ6gWmxhNcaNIto+uGA/Kjc/ea4CMg3oGSQ2DpUnGdBBOjH7Kjv0d4V/E0FR8ohCEGLnxSm7J1AiPiGGuUKRtTHMw6OYKZd6N8EwYRzDq21UuaYhhrcgRRgyD7o0iQ9iOGEZKKBSPIo2xAav2Qll57whbEsNYWTyVNnIlxiDKtYWchRHDACVCCVvIkIbY8DYBMQapOnchaWPYKys5Mn04r5UB9CoondcKlyDSHn2Mxz94zWeDpkihjxRKxMfurvrIFbsLIcfOXE8f8VzsLAAIzqfT7IMWlRX0qHKyD0mLkxvDLyOFWNKlbrTlAAAAAElFTkSuQmCC');}
@media (max-width: 640px) {
    .BMap_scaleCtrl {display:none;}
    .mapbox .zw {display:block;}
}
</style>

<script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=【你的密匙】"></script>

<div class="mapbox"><div class="mapbigest"></div><div class="zw"></div><div id="allmap"></div></div>
<script type="text/javascript">
//手機版點擊才可拖動
$(document).on("click",".mapbox",function(){
    $(this).find(".zw").hide();
});

//地圖最大化
$(document).on("click",".mapbigest",function(){
    $(this).parent(".mapbox").toggleClass("on");
    baidu_map();
});

//鍵盤Esc退出全屏
var isPiss = 0;
document.onkeydown = function(event) {
    var e = event || window.event || arguments.callee.caller.arguments[0];
    if(e.keyCode == 27){
        if($(".mapbox").hasClass("on")){
            $(".mapbox").removeClass("on");
            baidu_map();
        }
    }
};

function pix(p)
{
    p = p/100000;
    return p;
}

function poi_move(x,y,type)
{
    //x: +往右偏移 -往偏左移
    //y: +往上偏移 -往偏下移
    arr = type.split(",");
    xarr = xpoi = new Array();
    if(type){
        if(arr){
            for(i=0;i<arr.length;i++)
            {
                xarr.push(arr[i].split(":"));
            }
        }
        if(xarr){
            for(i=0;i<xarr.length;i++)
            {
                if(xarr[i][0]=="left"){
                    x = x+pix(xarr[i][1]);
                }else if(xarr[i][0]=="right"){
                    x = x-pix(xarr[i][1]);
                }else if(xarr[i][0]=="top"){
                    y = y-pix(xarr[i][1]);
                }else if(xarr[i][0]=="bottom"){
                    y = y+pix(xarr[i][1]);
                }
                console.log(xarr[i])
            }
        }
    }
    xpoi["x"] = x;
    xpoi["y"] = y;
    return xpoi;
}

function baidu_map()
{
    //公司名稱
    var my_company = '天澤數字';
    //公司地址
    var my_address = '地址:泰州市海陵區鳳凰東路58號';
    //坐標
    var my_poix = 119.929529;
    var my_poiy = 32.462353;
    //地圖位置偏移
    var move_type = "left:15,top:15"; // 往左偏移15像素,往上偏移15像素
    
    poi_arr = poi_move(my_poix,my_poiy,move_type);
    my_poix_p = poi_arr["x"];
    my_poiy_p = poi_arr["y"];
    
    // 百度地圖API功能
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(my_poix,my_poiy)
    var point_p = new BMap.Point(my_poix_p,my_poiy_p);
    var myIcon = new BMap.Icon("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAhCAMAAAAMPGBYAAAA3lBMVEUAAAArAAMrAAM+fOBHh/AuacQvasUrAANGhu5JifNJifNHiPEtZ8E/feIwa8Y3dNNFhOs+fN9Bf+RKivQ0cM4pY7smX7Y9et04ddVCgecxbMksZr8mU58uacQ1ctAoYblKivRDgukoPHUybssqZL06dthKivQlXLE7edo7edpEmP42kfc/lvtJmv8wkPQqjPE8lPlBlvw5k/gtjvIki+5JkfggiO1Lmv9FjfQpfd4gg+VLl/1Dkvc8j/Q0jvI7iOsxhuk4hegugOE0f+A6fd8xeNckdNIobsolZr8gddO/82ARAAAAKnRSTlMAMigGgiwnGBT3w73+/f349vPp5d7d3NDAvr2wqKeBfnV0aVBEOBr0k5GheLO3AAAA90lEQVQoz13Q1XqDQBRF4Q0BgsTdPalBS2UGiXv6/i8UggSG/3J959xs+BYjtapU1dECkYygkKVlWUuiCBn4ZI1YRsAimuxfacSIEfVxKdhGki0AcumdVZIxtlPNHqO9SrVVGxX9m6VXkNfT8iibqWSW0VybrHUTb9sf1vYV89MH6zQHWnsm7VsApOImkTZFCZ7B8TN2HATz1XbPtKuFA07Pv5HzFKHO4Stw6CAiFsJWEPHUd/zk9BETc38POREJXcdLThdJsyul9DoDo+5Stw7W8EIvQ7CkG71JSGm4DbCyfO+/x2eRwHPc5GXCcTzTAjz765Xo9w5VVEDyLqlpqQAAAABJRU5ErkJggg==", new BMap.Size(19,33)); //自定義圖標
    var marker = new BMap.Marker(point,{icon:myIcon});
    map.addOverlay(marker);                      // 將標注添加到地圖中
    //marker.setAnimation(BMAP_ANIMATION_BOUNCE);  // 跳動的動畫
    map.centerAndZoom(point_p, 15);
    var opts = {
      width : 300,     // 信息窗口寬度
      height: 150,     // 信息窗口高度
      //title : "" , // 信息窗口標題
      //enableMessage:true,//設置允許信息窗發送短息
      //message:""
    }
    var infoWindow = new BMap.InfoWindow('<strong style="color:#d55522;font-size:14px;padding-bottom:10px;">'+my_company+'</strong><p>'+my_address+'</p>', opts);  // 創建信息窗口對象 
    
    var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺
    var top_left_navigation = new BMap.NavigationControl();  //左上角,添加默認縮放平移控件
    
    map.addControl(top_left_control);
    map.addControl(top_left_navigation);
    
    map.openInfoWindow(infoWindow,point); //開啟信息窗口
    marker.addEventListener("click", function(){          
        map.openInfoWindow(infoWindow,point); //開啟信息窗口
    });
}
baidu_map();
</script>

百度地圖坐標拾取器:http://api.map.baidu.com/lbsapi/getpoint/index.html

]]>
0 http://www.altenamarketing.com/baidu-map-api.html#comments http://www.altenamarketing.com/feed/
帝國CMS的一級欄目區分和當前二級欄目而顯示不同樣式 http://www.altenamarketing.com/ecms-classname.html http://www.altenamarketing.com/ecms-classname.html Fri, 26 Jun 2020 17:08:00 +0800 aijun ecms class
帝國CMS的一級欄目區分和當前二級欄目而顯示不同樣式。

在實際項目中,遇到欄目一二級欄目較多,且要判斷是否是高亮當前欄目,之前一直都是單獨調用對應的子欄目,為了實現效果會出現好幾個模板,為解決這個問題,特搜索并結合之前的方法(靈動標簽調用欄目,可定義當前欄目的class樣式),調整了一下。

如下圖,所在當前一級欄目是展開狀態,而且都在當前二級欄目是高亮狀態。其他一級欄目是收縮狀態。

ecms menu

使用如下代碼,可實現:

[e:loop={"select classid,classname,islast from {$dbtbpre}enewsclass where bclassid='0' and showclass=0 order by myorder,classid ASC limit 11",0,24,0}]
<?php
$classurl=sys_ReturnBqClassname($bqr,9); //取得欄目地址
$class=""; //有子欄目時一級欄目的樣式
if($GLOBALS[navclassid])
{
$fcr=explode('|',$class_r[$GLOBALS[navclassid]][featherclass]);
$topbclassid=$fcr[1]?$fcr[1]:$GLOBALS[navclassid];//取得當前欄目的一級欄目ID
if($bqr[classid]==$topbclassid)
{
$class=" on"; //當前欄目高亮顯示
}
}
elseif($public_r[home]==1)
{
$class="";
}
?>
                    <div class="list<?=$class?>">
                        <div class="first_cate son">
                            <a href="<?=$classurl?>" class="category_<?=$bqr[classid]?>" title="<?=$bqr[classname]?>"><?=$bqr[classname]?></a>
                            <div class="border"></div>
                        </div>
<?php
if(!$bqr[islast]) //判斷是否終極欄目
{
?>
                        <div class="son_cate">
    <?php
    //取得欄目下的子欄目
    $newsclass=$empire->query("select classid,classname from ".$dbtbpre."enewsclass where bclassid=".$bqr[classid]." order by myorder,classid asc limit 11");
    while($classr=$empire->fetch($newsclass))
    {
        $classrurl=sys_ReturnBqClassname($classr,9); //取得子欄目地址
        $classrname="";
        if($classr[classid]==$GLOBALS[navclassid])
        {
        $classrname=" on";
        }
        ?>
                            <div class="item category_<?=$classr[classid]?><?=$classrname?>"><a href="<?=$classrurl?>" class="text-over block" title="<?=$classr[classname]?>"><?=$classr[classname]?></a></div>
    <?php
    }
    ?>
                        </div>
<?php
}
?>
                    </div>
[/e:loop]

其中,可不調用隱藏設置的欄目:and showclass=0 //0為顯示,1為不顯示
and classid<>25為排除指定欄目

]]>
0 http://www.altenamarketing.com/ecms-classname.html#comments http://www.altenamarketing.com/feed/
帝國CMS靈活調用的多圖片集插件 http://www.altenamarketing.com/ecms-PhotoMorepic.html http://www.altenamarketing.com/ecms-PhotoMorepic.html Fri, 26 Jun 2020 10:58:00 +0800 aijun 帝國CMS論壇受管制,強制關閉了,很多技術貼內容無法搜到,之前沒養成隨手記的習慣,導致現在諸多的不便...
一直在用的一個可以靈活調用的多圖集功能插件。

1、將下面的代碼,復制到你的userfun.php中(文件位置:/e/class/userfun.php)

function user_PhotoMorepic($tempid){
    global $navinfor,$public_r;
    $morepic=$navinfor['morepic'];
    $rexp="\r\n";
    $fexp="::::::";
    $rstr="";
    $sdh="";
    $w_morepic="";
    $rr=explode($rexp,$morepic);
    $count=count($rr);
    $num=$count;
    
    //取得模板
    $tr=sys_ReturnBqTemp($tempid);
    if(empty($tr['tempid']))
    {return "";}
    $listtemp=str_replace('[!--news.url--]',$public_r[newsurl],$tr[temptext]);
    $subnews=$tr[subnews];
    $listvar=str_replace('[!--news.url--]',$public_r[newsurl],$tr[listvar]);
    $rownum=$tr[rownum];
    $formatdate=$tr[showdate];
    if(empty($rownum))
    {$rownum=1;}
    
    //列表
    $list_exp="[!--empirenews.listtemp--]";
    $list_r=explode($list_exp,$listtemp);
    $listtext=$list_r[1];
    $no=1;
    $changerow=1;
    
    for($i=0;$i<$count;$i++)
    {
        $fr=explode($fexp,$rr[$i]);
        $smallpic=$fr[0]?$fr[0]:$public_r[newsurl]."e/data/images/notimg.gif";    //小圖
        $bigpic=$fr[1]?$fr[1]:$public_r[newsurl]."e/data/images/notimg.gif";    //大圖
        if(empty($bigpic))
        {
            $bigpic=$smallpic;
        }
        $picname=htmlspecialchars($fr[2]);    //名稱
        $val[picname]=$picname;
        $val[bigpic]=$bigpic;
        $val[smallpic]=$smallpic;
        /////////////////
        $strF=",picname,bigpic,smallpic,";
        $repvar=user_ReplaceShowpicsVars($listvar,$strF,$val,$no);
        $listtext=str_replace("<!--list.var".$changerow."-->",$repvar,$listtext);
        $changerow+=1;
        //超過行數
        if($changerow>$rownum)
        {
        $changerow=1;
        $string.=$listtext;
        $listtext=$list_r[1];
        }
        $no++;
    }
   $string=$list_r[0].$string.$list_r[2];
    echo $string;
}

function user_ReplaceShowpicsVars($listtemp,$strF,$val,$no){
$fr=explode(',',$strF);
$fcount=count($fr)-1;;
for($i=1;$i<$fcount;$i++)
{
$f=$fr[$i];
$value=$val[$f];
$listtemp=str_replace('[!--'.$f.'--]',$value,$listtemp);
}
$listtemp=str_replace('[!--no.num--]',$no,$listtemp);

return $listtemp;
}

2、添加標簽
標簽名:圖集
標簽符號:pichd
函數名:user_PhotoMorepic
標簽格式:[pichd]tempid[/pichd]
(tempid為模板標簽id)

3、標簽模板:
頁面模板內容:
列表頭[!--empirenews.listtemp--]列表內容[!--empirenews.listtemp--]列表尾

列表內容模板(list.var)
[!--picname--] 圖片說明(標題)
[!--smallpic--] 小圖
[!--bigpic--] 大圖
[!--no.num--] 序號

內容模板
[pichd]標簽模板id[/pichd]

]]>
0 http://www.altenamarketing.com/ecms-PhotoMorepic.html#comments http://www.altenamarketing.com/feed/
CentOS系統漏洞修復簡易方法 http://www.altenamarketing.com/centos-update.html http://www.altenamarketing.com/centos-update.html Fri, 22 May 2020 17:07:00 +0800 aijun 在阿里云主機的管理后臺上,經??吹铰┒淳?。
對于Linux系統的漏洞,還是要重視的,未雨綢繆啊。
但阿里云后臺的修復功能需要付費,其實自己操作修復特別簡單,只需幾個命令即可。

Centos系統的漏洞修復其實很簡單,用yum安裝包管理工具,只需兩個步驟:
(操作執行前一定要備份或者給服務器創建好快照)

1.清理緩存信息
yum clean all

2.安裝所有軟件和系統更新
yum -y update
yum -y upgrade(只升級所有包,不升級軟件和系統內核)

如果有漏洞需要重啟,可以安全重啟:
rebootshutdown -r 0 重啟

當然除了 Centos 系統,Ubuntu 系統也很常用。如果你的主機是 Ubuntu 及 Debian 系統,那么修復命令需要用apt,操作步驟與yum是很類似的。

]]>
0 http://www.altenamarketing.com/centos-update.html#comments http://www.altenamarketing.com/feed/
一段代碼輕松搞定網站被惡意鏡像 http://www.altenamarketing.com/mirrored-website.html http://www.altenamarketing.com/mirrored-website.html Fri, 06 Mar 2020 22:50:00 +0800 aijun 請輸入圖片描述
有時候你會發現,你在搜索引擎輸入網站名稱的時候,出來的網站信息是你們的,但是域名卻是一個陌生的,這種情況可以基本確定網站被鏡像了,那么究竟什么叫網站被鏡像?

惡意鏡像,也叫惡意克隆,惡意解析,是指有人通過域名 A 記錄直接解析別人 IP 地址,從而得到一個在訪問者眼中完全相同網站的過程。其工作原理基本上是這樣子的:有用戶訪問鏡像站點時,程序就會來正版的站點查詢數據,并修改相關鏈接然后呈獻給用戶,實質上還是在讀取原站的數據。嚴謹一點的解釋:通過復制整個網站或部分網頁內容并分配以不同域名和服務器,以此欺騙搜索引擎對同一站點或同一頁面進行多次索引的行為。

通俗的講,惡意鏡像者意圖利用自己有一定權重的域名進行威壓,通過某些手段復制了你的站點,除了域名不一樣之外,其他內容一模一樣,用戶或許根本無法分辨。甚至對于一些新的站點,搜索引擎都會迷惑到底哪個是真的站點,那么就有可能正牌的網站被刪除收錄,而盜版的卻被搜索引擎青睞。

雖然目前我們還不知道惡意鏡像我們的網站到底有什么意圖,但肯定對我們沒什么好處,如果他這個域名有點什么不健康的信息,那么我們被鏡像的站點有可能被污染掉,所以還是要警惕這個現象。

如何處理網站被鏡像?這類鏡像看似一個完整的站點,其實上是每次用戶訪問鏡像站點,程序就會來正版的站點查詢數據,并修改相關鏈接然后呈獻給用戶。實質上還是在讀取原站的數據。以下引用龍笑天下列舉的幾種解決方法,大家自行取舍使用!

方法1:查清鏡像網站的主機IP,通過禁止IP來解決

本教程基于 WordPress 程序,其他系統請自測!

1、獲取鏡像服務器IP。注:這個 IP 可能不是 ping 到他域名的 IP
復制如下代碼,新建一個 php 文件,并命名為“ip.php”上傳到你的網站根目錄。

<?php
$file = "ip.txt"; //保存的文件名
$ip = $_SERVER['REMOTE_ADDR'];
$handle = fopen($file, 'a');
fwrite($handle, "IP Address:");
fwrite($handle, "$ip");
fwrite($handle, "\n");
fclose($handele);
?>

2、然后訪問你網站的鏡像站點,在地址后面加.../ip.php,然后你就會在網站根目錄找到 ip.txt 文件了,打開復制里面的 ip 地址。
3、然后打開你的.htaccess 文件,在后面加上如下代碼(自行修改為剛剛獲得的 ip)

#添加IP黑名單
Order Deny,Allow
Deny from 192.168.0.1

當然,如果你使用 CDN,可以直接在 CDN 后臺添加 ip 黑名單
這個時候你再刷新一下鏡像站點,是不是已經 403 報錯了呢?這個時候已經解決了這個鏡像站點,然后就等待蜘蛛將其解決掉吧。

此方法的缺點就是如果鏡像網站更換了 ip,那我們的屏蔽就失敗了

方法2:JS 來防護

在頭部標簽:<head></head>里加上下面的 JS 代碼:

<script type="text/javascript">
if (document.location.host != "xiaaijun.com") {
location.href = location.href.replace(document.location.host,'xiaaijun.com');
}
</script>

或加上以下的 JS 代碼:

<script type="text/javascript">
rthost = window.location.host;
if (rthost != "xiaaijun.com") {
top.location.href = "https://xiaaijun.com";
}
</script>

注意:將上面代碼中的xiaaijun.com改為你網站的首頁主地址。

注:經過測試,如果鏡像站屏蔽了JS,則該方法失效。所以,最好把方法 2 和方法 3 結合使用!

方法3:JS被屏蔽后防止鏡像的方法

將以下代碼加到網站的 header.php 中:

<div style="display:none;">
<script>aijun2020 = false;</script>
<img src="" onerror='setTimeout(function(){if(typeof(aijun2020)=="undefined"){window.location.host="xiaaijun.com";}},3000);'>
</div>

有些網站會屏蔽掉 JS 代碼(如下面的代碼) :<script>...</script>
所以<script>aijun2020 = false;</script>代碼將被過濾掉,img 的 onerror 設置超時時間 3000 毫秒,將運行函數部分,檢測是否還存在 aijun2020 字符,如果沒有找到就會將主機的 URL 改為 xiaaijun.com;為了安全起見,將 js 部分可以使用 js 代碼混淆(站長之家 JS 混淆工具)。

本站的混淆結果如下:

<div style="display:none;">
<script>aijun2020 = false;</script>
<img src=" " onerror='setTimeout(function(){if(typeof(aijun2020)=="undefined"){window["\x6c\x6f\x63\x61\x74\x69\x6f\x6e"]["\x68\x6f\x73\x74"]="\x78\x69\x61\x61\x69\x6a\x75\x6e\x2e\x63\x6f\x6d";}},3000);'>
</div>
經測試,此代碼在 Chrome、IE11 和 360 極速瀏覽器上均有效,會跳轉到源站的原文章頁!將代碼中 img 標簽的 src 引用地址改為空格或無效的圖片地址后,在Firefox 上也起作用了!

方法4:借助 Img 的 Onerror 事件

通過拆分域名鏈接與鏡像站比對,然后用 img 標簽 src 空值觸發 onerror 來執行 js 比對,比對失敗則跳轉回源站。

①、WordPress 專用版
代碼如下:(復制粘貼到主題的 functions.php 最后一個?>之前)

add_action('wp_footer','deny_mirrored_websites');
function deny_mirrored_websites(){
    $currentDomain = "xiaaijun." + "com';
    echo '<img style="display:none" src=" " onerror=\'this.onerror=null;var str1="'.$currentDomain.'";str2="docu"+"ment.loca"+"tion.host";str3=eval(str2);if( str1!=str3 && str3!="cache.baiducontent.com" && str3!="webcache.googleusercontent.com" && str3!="c.360webcache.com" && str3!="cncc.bingj.com" && str3!="snapshot.sogoucdn.com" ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "\"' . $currentDomain .'\"" + ")";eval(do_action) }\' />';
}
Ps:如果是丟到 wp_head,經過測試發現圖片放到 head,瀏覽器會自動進行錯誤調整,導致一些本來在 head 的元素被丟到了 body 當中,比如 style.css,估計網頁標準中 head 里面就不應該放置圖片,所以移到了 footer 當中。
或者:
add_action('wp_footer','deny_mirrored_websites');
function deny_mirrored_websites(){
    $currentDomain = "xiaaijun.' + 'com";
    echo '<img style="display:none" src="nothing" onerror="this.onerror=null;var str1=\''.$currentDomain.'\';str2=\'docu\'+\'ment.loca\'+\'tion.host\';str3=eval(str2);if( str1!=str3 ){ do_action = \'loca\' + \'tion.\' + \'href = loca\' + \'tion.href\' + \'.rep\' + \'lace(docu\' +\'ment\'+\'.loca\'+\'tion.ho\'+\'st,\' + \'\\\'' . $currentDomain .'\\\'\' + \')\';eval(do_action) }" />';
}

或者:

add_action('wp_footer','kimsom_reverse_proxy_defense', 99);
function kimsom_reverse_proxy_defense(){
    $currentDomain = '"xiaaijun" + ".com"';
    echo '<img style="display:none" id="inlojv-rpd" src="nothing" data-url="'.home_url().'" onerror=\'this.onerror=null;var str0=document.getElementById("inlojv-rpd").attributes.getNamedItem("data-url").nodeValue;var ishttps="https:"==document.location.protocol?true:false;if(ishttps){var str1="https"+"://";}else{var str1="http"+"://";}var str2='.$currentDomain.';var str3=str1+str2;if( str0!=str3 ){location.href = location.href.replace(document.location.host,'. $currentDomain .');}\'/>';
}

②、HTML 通用版
既然是利用 js 代碼,那么就能用到如何 html 頁面當中了。要不是為了可以放到 wp 的 functions.php,都沒必要寫成 php 的模式,直接用 html 代碼即可:

<img style="display:none" src=" " onerror='this.onerror=null;var currentDomain="xiaaijun" + ".com"; var str1=currentDomain; str2="docu"+"ment.loca"+"tion.host"; str3=eval(str2) ;if( str1!=str3 && str3!="cache.baiducontent.com" && str3!="webcache.googleusercontent.com" && str3!="c.360webcache.com" && str3!="cncc.bingj.com" && str3!="snapshot.sogoucdn.com" ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "currentDomain" + ")";eval(do_action) }' />

將以上代碼中的:var currentDomain="xiaaijun" + ".com"; 自行拆分成自己的域名,避免被鏡像代碼替換掉,比如:var currentDomain="xiaaijun." + "com";
然后將代碼添加到網站的<body>之后即可(不建議放置到<head>里面,具體原因上文已說明),這個版本適合任何網頁。

方法5:通過禁止某些 User Agent 特征來防

PHP 通用版,以及Wordpress 適用版,參考本文原作者:
https://www.ilxtx.com/mirrored-website.html

友情提示:建議方法 2 和方法 3 一起使用!方法 4 包含方法 2 和方法 3~
]]>
0 http://www.altenamarketing.com/mirrored-website.html#comments http://www.altenamarketing.com/feed/
帝國ECMS整合微信分享好友、朋友圈帶縮微圖和簡介分享接口 http://www.altenamarketing.com/ecms_js_wechat.html http://www.altenamarketing.com/ecms_js_wechat.html Tue, 11 Feb 2020 22:02:00 +0800 aijun 前提是必須有公眾號,且公眾號中需要填寫你的域名為安全域名才能成功。以下分享接口已采用微信開發文檔中最新的接口,網上很多人使用的原接口即將失效了。(2020.04測試通過)

第一步:部署jssdk.php到根目錄

<?php
class JSSDK {
  private $appId;
  private $appSecret;

  public function __construct($appId, $appSecret) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
  }

  public function getSignPackage() {
    $jsapiTicket = $this->getJsApiTicket();

    // 注意 URL 一定要動態獲取,不能 hardcode.
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

    $timestamp = time();
    $nonceStr = $this->createNonceStr();

    // 這里參數的順序要按照 key 值 ASCII 碼升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

    $signature = sha1($string);

    $signPackage = array(
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    return $signPackage; 
  }

  private function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }

  private function getJsApiTicket() {
    // jsapi_ticket 應該全局存儲與更新,以下代碼以寫入到文件中做示例
    $data = json_decode($this->get_php_file("jsapi_ticket.php"));
    if ($data->expire_time < time()) {
      $accessToken = $this->getAccessToken();
      // 如果是企業號用以下 URL 獲取 ticket
      // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
      $res = json_decode($this->httpGet($url));
      $ticket = $res->ticket;
      if ($ticket) {
        $data->expire_time = time() + 7000;
        $data->jsapi_ticket = $ticket;
        $this->set_php_file("jsapi_ticket.php", json_encode($data));
      }
    } else {
      $ticket = $data->jsapi_ticket;
    }

    return $ticket;
  }

  private function getAccessToken() {
    // access_token 應該全局存儲與更新,以下代碼以寫入到文件中做示例
    $data = json_decode($this->get_php_file("access_token.php"));
    if ($data->expire_time < time()) {
      // 如果是企業號用以下URL獲取access_token
      // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
      $res = json_decode($this->httpGet($url));
      $access_token = $res->access_token;
      if ($access_token) {
        $data->expire_time = time() + 7000;
        $data->access_token = $access_token;
        $this->set_php_file("access_token.php", json_encode($data));
      }
    } else {
      $access_token = $data->access_token;
    }
    return $access_token;
  }

  private function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    // 為保證第三方服務器與微信服務器之間數據傳輸的安全性,所有微信接口采用https方式調用,必須使用下面2行代碼打開ssl安全校驗。
    // 如果在部署過程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
    curl_setopt($curl, CURLOPT_URL, $url);

    $res = curl_exec($curl);
    curl_close($curl);

    return $res;
  }

  private function get_php_file($filename) {
    return trim(substr(file_get_contents($filename), 15));
  }
  private function set_php_file($filename, $content) {
    $fp = fopen($filename, "w");
    fwrite($fp, "<?php exit();?>" . $content);
    fclose($fp);
  }
}

第二步:微信公眾號中設置JS安全域名
登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。

第三步:增加模版變量,填入代碼,appid和appsecret填入你的微信公眾號相關的信息(模版變量緊挨著 欧美大胆a级视频,久久精品高清一区二区三区,久久精品中文字幕一区 ,放在它前面):

<?
//開始微信分享代碼
require '../../jssdk.php';
$appid = '******';
$appsecret = '******';
$jssdk = new JSSDK($appid,$appsecret);
$signPackage = $jssdk->GetSignPackage();
//結束微信分享代碼
?>

<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
  // 注意:所有的JS接口只能在公眾號綁定的域名下調用,公眾號開發者需要先登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
  // 如果發現在 Android 不能分享自定義內容,請到官網下載最新的包覆蓋安裝,Android 自定義分享接口需升級至 6.0.2.58 版本及以上。
  // 完整 JS-SDK 文檔地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
  wx.config({
    debug: !1,
    appId: '<?php echo $signPackage["appId"];?>',
    timestamp: <?php echo $signPackage["timestamp"];?>,
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',
    signature: '<?php echo $signPackage["signature"];?>',
    jsApiList: [
        "updateAppMessageShareData",
        "updateTimelineShareData",
        "onMenuShareWeibo",
        "onMenuShareQZone"
    ]
  });
  wx.ready(function () {
    // 在這里調用 API
    wx.checkJsApi({
    jsApiList: ["updateAppMessageShareData",
        "updateTimelineShareData",
        "onMenuShareWeibo",
        "onMenuShareQZone"], // 需要檢測的JS接口列表,所有JS接口列表見附錄2,
        success: function(res) {
            //alert(JSON.stringify(res));
            if(res.errMsg !='checkJsApi:ok'){
                alert('請升級您的微信版本');
                return;
            }
        }
    });
  //分享Demo
//獲取“分享給朋友”按鈕點擊狀態及自定義分享內容接口
    wx.updateAppMessageShareData({
    title: '<?=$navinfor[title]?>', // 分享標題
    desc: '<?=$navinfor[smalltext]?>', // 分享描述
    link: 'http://www.xxx.com<?=$navinfor[titleurl]?>', // 分享鏈接
    imgUrl: '<?=$navinfor[titlepic]?>', // 分享圖標
        success: function () {
          // 設置成功
        }
    });

//獲取“分享到朋友圈”按鈕點擊狀態及自定義分享內容接口
    wx.updateTimelineShareData({
    title: '<?=$navinfor[title]?>', // 分享標題
    link: 'http://www.xxx.com<?=$navinfor[titleurl]?>', // 分享鏈接
    imgUrl: '<?=$navinfor[titlepic]?>', // 分享圖標
        success: function () {
          // 設置成功
        }
    });
  wx.onMenuShareWeibo({
    title: '<?=$navinfor[title]?>', // 分享標題
    desc: '<?=$navinfor[smalltext]?>', // 分享描述
    link: 'http://www.xxx.com<?=$navinfor[titleurl]?>', // 分享鏈接
    imgUrl: '<?=$navinfor[titlepic]?>', // 分享圖標
    success: function () {
       // 用戶確認分享后執行的回調函數
    },
    cancel: function () {
        // 用戶取消分享后執行的回調函數
    }
  });

});
</script>
]]>
0 http://www.altenamarketing.com/ecms_js_wechat.html#comments http://www.altenamarketing.com/feed/