discuz

使用Xdebug和KCachegrind分析php的discuz!x2.5运行CPU效率

论坛升级到discuz !x2.5,cpu随时都80-90%,load值居高不下,遂寻找一种检查php代码执行效率的方法
找到的方法php5-xdebug扩展或者xhprof扩展,因为服务器是ubuntu的,所以为了方便快捷,直接使用php5-xdebug来调试和分析了
1 xdebug配置

zend_extension=/usr/lib/php5/20090626/xdebug.so

xdebug.profiler_enable=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_output_name = cachegrind.out.%s  #cachegrind.out._home_httpd_xxxxx

/tmp/xdebug目录需要手工建立,并且给www用户的读写权限

2 分析xdebug日志
windows环境可以使用WinCacheGrind
  下载地址:http://sourceforge.net/projects/wincachegrind/
linux环境使KCachegrind

Tags: , , ,

星期二, 5 6 月, 2012 服务器, 未分类 没有评论

在ubuntu上设置discuz远程附件

1 安装sftpd

 sudo apt-get install vsftpd

2 设置ftp

 /etc/vsftpd.conf
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022

3 增加用户

useradd  -m ftp-user

4 将用户HOME目录链接到网站附件域名下

sudo ln -s /home/ftp-user /var/www/njava-att

Tags: , ,

星期五, 27 4 月, 2012 服务器 没有评论

discuz在Nginx0.8.34下的伪静态规则

discuz论坛在Nginx下的rewrite规则,修改完后restart nginx

bear@bear-laptop:/etc/nginx/sites-available$ vi bbs.njava 
server {
        listen   80;
        server_name bbs.njava.com;

        access_log  /var/log/nginx/bbs.njava.access.log;

        location / {
            root /home/bear/Sites/bbs.njava;
            index index.html index.htm index.php;

            rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;
            rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3 last;
            rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last;
            rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;
            rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;
            rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;    
          }

        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                set $path_info "/";
                set $real_script_name $fastcgi_script_name;
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                    set $real_script_name $1;
                    set $path_info $2;
                  }
               fastcgi_param SCRIPT_FILENAME /home/bear/Sites/bbs.njava/$real_script_name;
               fastcgi_param script_name $real_script_name;
               fastcgi_param path_info $path_info;
               include /etc/nginx/fastcgi_params;
         }
}

Tags: , ,

星期一, 22 3 月, 2010 服务器 没有评论

discuz后台设置对seo的影响

1 首页文件名设置,统一首页URL

解决http://www.njava.com/和http://www.njava.com/index.php 对se权重的影响

全局>站点信息>首页文件名

设为论坛的主域名或主目录。

以njava.com为例,

网站URL是http://www.njava.com/,

那么这个首页文件名也设为http://www.njava.com/,默认是index.php

这样,站内到主页的链接和外部链接就一致了。

好处:

对于相同内容的两个页面,SE会选择一个权重高的做为首选,给予高的排名,显示在搜索结果中,而另一个排名很低或不收录。这一过程需要一定的时间判断。貌似这样也没有什么问题,但是,却分散了权重。

像上面的例子,http://www.njava.com/http://www.njava.com/index.php 两个页面虽然是同一个内容,外链一般链接到主域名上,内链却链接到index.php文件上,虽然都有了很高的PR,但同样的内容,把链接分散到两个URL上,分散了权重,没有必要。

为了SEO,不要选择个人资料页面(space.php)静态化

1.个人资料页面都是雷同的东西。很少有人会写自我介绍,所以造成了大量内容相似的网页。

2.默认情况下是不允许游客访问个人资料页面的,所以会得到的提示信息页,discuz又没有对这类页面加上meta robots 禁止收录,这就产生很多相同内容的页面。

Tags: , , ,

星期五, 12 3 月, 2010 Web 一条评论

discuz页面内部优化

1 discuz title,meta 标签优化

discuz的默认设置

<title>$navtitle $bbname $seotitle - Powered by Discuz!</title>
<meta name="keywords" content="{$metakeywords}$seokeywords" />
<meta name="description" content="$metadescription $bbname $seodescription - Discuz! Board" />

这一模板是应用到 主页 版块列表页 帖子内容页 三类页面的,这样会产生些问题
1.seotitle为后台标题附加字,会使所有帖子页中title变成 标题+版名+站名+标题附加字,太冗长了,标题重复率太高(当然后台不设置此项内容就没问题)。
2.seokeywords为后台全局设置的关键字,会在全站的页中重复,关键字没个性,堆积。
3.seodescription:后台全局设置的说明属性,会在主页和每个版块列表页显示。

优化后的目标,各页只显示自己独特简洁的title和meta信息:

1.主页:title是站名+标题附加字;keywords和description是后台“全局》优化设置”中的值
2.列表页:title是版名;meta是后台“版块》版块管理”中设置的“版块关键字和版块简介”
3.帖子页:title是 标题+站名;keywords是tag标签;description是原来自动截取的内容

#修改方法
当然这些值都是DZ原来实现了的,只是显示的有些混乱,有些变量在不同页面中也改变了用途,如果修改各个程序比较麻烦,这里用了一个不标准的土方法,只需修改一个文件:

将模板文件header.htm中原来<title>至<meta naem=”description”各行替换如下:

<title>$navtitle $bbname <!--{if empty($navtitle)}-->$seotitle<!--{/if}--></title>
$seohead
<!--{if empty($navtitle)}-->
<meta name="keywords" content="$seokeywords" />
<meta name="description" content="$seodescription" />
<!--{elseif empty($metadescription)}-->
<meta name="keywords" content="$metakeywords" />
<meta name="description" content="$seodescription" />
<!--{else}-->
<meta name="keywords" content="$metakeywords" />
<meta name="description" content="$metadescription" />
<!--{/if}-->

2 修改header.htm模板,去除logo的H2标签

Tags: , , ,

星期五, 12 3 月, 2010 Web 2 Comments

discuz修改版块列表页,为帖子内容页生成唯一地址

帖子页的URL形式有很多,我们可以通过修改viewthread.php和archive给内容页上canonical URL,都指向静态URL形式来集中权重。

但是,这个伪静态地址也不是唯一的:thread-{tid}-{page}-(forumpage).html,由内容页URL组成可见最后一段数字是代表帖子在这个版块列表的第几页,当新帖子不断增加,老帖会被挤到第二页,第三页…这样它的URL就会不断地变化。

解决方法:

方法:修改forumdisplay.php

将$extra = rawurlencode(“page=$page$forumdisplayadd”);

改为$extra = rawurlencode(“page=1$forumdisplayadd”);

这样,最后一段固定为1,但有个缺点,用户从这个帖子只能返回列表页的第一页了。

discuz seo悄悄地在改变:上面的问题还是以观察收录结果是发现的,不过discuz7.0的global.func.php文件,发现对帖子页进行静态化地址替换的函数有所变化

 
function rewrite_thread($tid, $page = 0, $prevpage = 0, $extra = '') {

return '<a href="thread-'.$tid.'-'.($page ? $page : 1).'-'

.($prevpage && !IS_ROBOT ? $prevpage : 1).'.html"'.stripslashes($extra).'>'; }

也就是说,现在discuz会针对搜索引擎,把最后一段固定生成为1来解决这个问题。虽然是针对用户和搜索引擎分别处理,但内容都是一样的,并没有欺骗,应该还是没问题的。

另外,在伪静态替换中发现对robots进行了特殊处理,说明动态地址没有处理这个问题。

Tags: ,

星期五, 12 3 月, 2010 Web 没有评论

discuz给redirect.php做301跳转

类似redirect.php?tid=7&goto=lastpost这种形式URL的页面的子内容和thread-1-1-1.html一样的,但URL形式不一样,SE会当成重复内容。

这种URL形式会出现在主页、版块列表页的最后发表或最后回复位置,discuz7以前版本的上一主题、下一主题等也是此种形式的URL,现在虽然没有,但在代码中还能找到那些参数。

为什么不禁止这种URL形式的索引?

1.主要是不能控制别人链接到这种形式,如果禁止索引这种形式的URL就浪费了链接,所以要做301跳转,把链接和权重转移到标准的静态形式。

2.链接形式出现在首页,不禁止或许可以加快录

给redirct.php做301跳转

有的情况下程序要查找才能得到要显示的tid,所以只能修改程序,用php代码实现301跳转。

打开 redirect.php 文件,将 require_once DISCUZ_ROOT.’./viewthread.php’; 替换为

 
header("HTTP/1.1 301 Moved Permanently");
header( "Location: thread-{$tid}-1-1.html" );
exit();

文件中共有四处,都修改完就可以访问论坛,检查下效果了

Tags: , ,

星期五, 12 3 月, 2010 Web 没有评论

discuz加canonical URL标签,规范化网址

Discuz的网址规范化有很多问题,即同样的内容,有着好多不同的URL。下面使用canonical URL TAG新标准来处理这些问题。

一,给viewthread.php页加canonical URL

可以发现这种动态的链接形式最多了,有不同的参数但内容一样,当然现在的SE能够处理这些问题,但但很难判断首选显示URL方式,或者当他们都有返回链接时,不能集中权重。为了解决类似的重复网页问题,googel,yahoo,live,ask.com都宣布支持一个新的标签属性,以把链接和权重都集中到一个首先的URL上。

1.给viewthread.php加canonical URL标签,指定帖子的静态地址为首选版本。

修改viewthread.php文件,在$page = max($page, 1);上面(程序调用包含文件结束),加一行$extrahead .='<link rel=”canonical” href=”thread-‘ .$tid. ‘-1-1.html” />’;

2.给打印页加canonical tag

虽然打印页viewthread.php?action=printable…..也是调过这个程序生成数据,但用了不同的模板,要把变量$extrahead 加进去,修改tmplates\default\viewthread_printable.htm

在<head>部分<title>的下面加一行: $extrahead

二.给forumdisplay.php加canonical tag

在include template(‘forumdisplay’);上加一行:

$extrahead .='<link rel=”canonical” href=”forum-‘ .$fid. ‘-‘ .$page. ‘.html” />’;

三.为archiver页加link canonical标签

1.修改archiver/index.php:在global $boardurl, $_DCACHE, $charset, $navtitle, $headerbanner, $headernav;行下加一行:global $extrahead;

在<meta http-equiv=”Content-Type” content=”text/html; charset={$charset}” />

行下加一行:$extrahead

2.修改archiver\include\thread.inc.php:此文件中有两个showheader();,在第二个的上面加一行:$extrahead .='<link rel=”canonical” href=”thread-‘ .$tid. ‘-1-1.html” />’;

四.将archiver内容页最下的“本看完整版本”链接改为静态形式

修改archiver/include/thread.inc.php,将 “viewthread.php?tid=$tid”替换为”thread-{$tid}-1-1.html”

如果您是以动态URL形式为首先版本,上述相应位置应替换为如下语句:

$extrahead .='<link rel=”canonical” href=”viewthread.php?tid=’ .$tid. ‘” />’;

Tags: , ,

星期五, 12 3 月, 2010 Web 没有评论

discuz禁止某个版帖子的收录

各种原因,需要禁止SE对discuz某个版面帖子的收录(如水版、或为了更好的SEO等)。当然如果设置了权限,不允许游浏览此版面,那么就肯定不能收录了。

1.使用robots.txt文件,禁止版块列表的收录

 
Disallow: /forum-1-

#数字即为要禁止版块的ID。

#注意数字最后的 – 不要省略,否则连ID为11,12等1开头的版都禁了

2.加meta robots标签,禁止收录某个版块帖子

修改viewthread.php文件,在$oldtopics = isset($_DCOOKIE[‘oldtopics’]) ? $_DCOOKIE[‘oldtopics’] : ‘D’; 上面加:

 
if( $thread['fid']==1 ){
$seohead .= '<meta name="robots" content="noindex,nofollow" />';
}

判断一下帖子是属于哪个版($thread[‘fid’])的,给它加上meta robots禁止。

第一点虽然禁止版块收录了,但有可能从动态形式或其它地方访问到帖子链接,所以还要用第二点给帖子页加上meta。这两点中的版块ID和要您禁止的版块对应,如果有多个版块,第一点中添加行就行了,第二点要修改断语句中中的逻辑表达式。

Tags: ,

星期五, 12 3 月, 2010 Web 没有评论

discuz论坛禁止无效页面的收录

discuz会产生哪些无效的页面,有什么问题

1.删除了的帖子、版块,当访问时返回帖子不存在的提示信息页。

2.设置了一定权限才能浏览的帖子、版块,很多情况会泄露链接,得到没权限的提示

3.其它各种情况下的提示信息页面。这些都是给用户看的,没有实质内容,都禁止收录。

其实最大的问题还是副本内容的问题,因这些不同的URL,返回的却是相同的内容。对SE不友好。其实对于删除了内容,应该返回404,但为了简单,都使用加meta robots标签,禁止ES收录的方法来解决。

修改提示信息页面,解决重复内容问题

方法一

1.建立/templates/defualt/header_norobot.htm文件

完全拷贝header.htm的内容,在<title>下再加一行:

<meta name=”robots” content=”noindex,nofollow” />

2.修改/templates/default/showmessage.htm文件

将{subtemplate header}替换为{subtemplate header_norobot}

3.修改/templates/default/nopermission.htm文件

将{subtemplate header}替换为{subtemplate header_norobot}

如此修改之后,SE就不会收录无权访问的URL,对于已删除的帖子,因为禁止收录了,过一段时间也会从索引中删除。这样,给SE的都是一些有内容的网页,对于提高权重会有好处。

方法二

修改global.func.php文件中的showmessage函数。

function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {
extract($GLOBALS, EXTR_SKIP);
global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;
define('CACHE_FORBIDDEN', TRUE);
$hookscriptmessage = $show_message = $message;$messagehandle = 0;

在第四行 define(‘CACHE_FORBIDDEN’, TRUE); 后面加上:

$extrahead .='';

即是

function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {
extract($GLOBALS, EXTR_SKIP);
global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;
define('CACHE_FORBIDDEN', TRUE);
$extrahead .='<meta name="robots" content="noindex,nofollow" />';
$hookscriptmessage = $show_message = $message;$messagehandle = 0;

Tags: , ,

星期五, 12 3 月, 2010 Web 没有评论
1LMooBmUE153Wnd3zDryWvDyXxQudbFxDr