zencart 调用Wordpress文章

调用Wordpress文章的方法

Zen-cart 有个WOZ的插件,作用就是调用Wordpress 的文章,将这个作为新闻系统来用。
其实,通过Wordpress自带的函数调用,完全可以达到同样的作用,下面介绍三种方法,第一种是调用最新的文章;第二种是随机调用Blog文章;第三种是调用最新留言。
首先,把WordPress安装到zen-cart一个子目录里,设置好固定连接等

一、调用最新文章
在合适的地方加入下面两行代码,一般会放在产品页面(/includes/templates/你使用的模板文件名/templates /tpl_product_info_display.php
<?php require(‘./wordpress所在目录/wp-blog-header.php’); ?> 这行调用WordPress自带函数,目录地址要随着WordPress安装目录变化而变化.如果你的Zen-cart不是根目录,那么前面就要打两个. ['../wordpress所在目录/wp-blog-header.php']
<?php get_archives(‘postbypost’, 10); ?> 这里的10指调用的最新文章数量

二、随机调用Blog文章

<?php require(‘./wordpress所在目录/wp-blog-header.php’); ?>
<?php
$rand_posts = get_posts(‘numberposts=4&orderby=rand’);
foreach( $rand_posts as $post ) :
?>
<li><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a></li>
<?php endforeach; ?>

三、调用最新留言

该代码直接调用数据库显示一份最新留言。其中LIMIT 10限制留言显示数量。红色部份则是每条留言的输出样式。

<?php
global $wpdb;
$sql = “SELECT DISTINCT ID, post_title, post_password, comment_ID,
comment_post_ID, comment_author, comment_date_gmt, comment_approved,
comment_type,comment_author_url,
SUBSTRING(comment_content,1,30) AS com_excerpt
FROM $wpdb->comments
LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID =
$wpdb->posts.ID)
WHERE comment_approved = ‘1′ AND comment_type = ” AND
post_password = ”
ORDER BY comment_date_gmt DESC
LIMIT 10″;
$comments = $wpdb->get_results($sql);
$output = $pre_html;

foreach ($comments as $comment) {
$output .= “\n<li>”.strip_tags($comment->comment_author)
.”:” . ” <a href=\”” . get_permalink($comment->ID) .
“#comment-” . $comment->comment_ID . “\” title=\”on ” .
$comment->post_title . “\”>” . strip_tags($comment->com_excerpt)
.”</a></li>”;
}

$output .= $post_HTML;
echo $output;?>

Install yum on centos 5.5

rpm -ivh http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm
rpm -ivh http://mirror.centos.org/centos/5/os/x86_64/CentOS/libxml2-2.6.26-2.1.2.8.el5_5.1.x86_64.rpm
rpm -ivh http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm

rpm -Uvh http://mirror.centos.org/centos/5/os/x86_64/CentOS/m2crypto-0.16-6.el5.8.x86_64.rpm
rpm -Uvh http://mirror.centos.org/centos/5/os/x86_64/CentOS/python-urlgrabber-3.1.0-6.el5.noarch.rpm

wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/popt-1.10.2.3-22.el5.x86_64.rpm

wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/rpm-4.4.2.3-22.el5.x86_64.rpm
wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/rpm-libs-4.4.2.3-22.el5.x86_64.rpm
rpm -Uvh rpm-4.4.2.3-22.el5.x86_64.rpm  rpm-libs-4.4.2.3-22.el5.x86_64.rpm popt-1.10.2.3-22.el5.x86_64.rpm

wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/rpm-python-4.4.2.3-22.el5.x86_64.rpm
wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/python-sqlite-1.1.7-1.2.1.x86_64.rpm

wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/python-elementtree-1.2.6-5.x86_64.rpm
rpm -Uvh rpm-python-4.4.2.3-22.el5.x86_64.rpm python-sqlite-1.1.7-1.2.1.x86_64.rpm python-elementtree-1.2.6-5.x86_64.rpm

wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/yum-3.2.22-33.el5.centos.noarch.rpm
wget http://mirror.centos.org/centos-5/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm

rpm -Uvh yum-3.2.22-33.el5.centos.noarch.rpm yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm

PHP强大的网络功能介绍-比较实用

通过PHP访问并获得网页内容

通过PHP去访问并获得网页内容是十分容易的,通过使用fopen函数,就象访问普通的文件那样就可以了,如

#div_code img { border: 0px none; }

fopen(http://localhost/websecure/ftp.php, “r”);

fopen函数有如下的一些参数:

介绍PHP强大的网络功能

要注意的是,注意fopen中访问的URL中,如果最后的是目录,要加上斜杠,比如

#div_code img { border: 0px none; }

fopen(http://localhost/websecure/ftp.php/, r);

而象

#div_code img { border: 0px none; }

fopen(http://localhost/websecure/ftp.php, “r”);

则是会报错的。

当用fopen打开网页后,接下来可以用很多方法获得网页的内容了,比如:

#div_code img { border: 0px none; }

if ($stream = fopen(http://www.sohu.com, r)) {
// print the first 5 bytes
echo stream_get_contents($stream, 5);
fclose($stream);
}

也可以用更快的函数,如file_get_contents即可:

#div_code img { border: 0px none; }

$url=http://www.blogjava.net/;
echo file_get_contents( $url );

关于DNS和IP

Php在DNS域名解析方面的功能也十分强大。当然这功能会受到DNS客户端的一些限制,目前php在DNS解析方面提供了gethostbyname(string hostname)这个方法,其中参数是服务器的域名,返回的是对应的IP,比如:

#div_code img { border: 0px none; }

<?php
$host = www.sohu.com;
$ip = gethostbyname($host);

echo The IP address of $host is $ip;
?>

而另外一个方法gethostbynamel则是可以返回某个域名下的所有IP,比如:

#div_code img { border: 0px none; }

<?php
$host= localhost;
$ip= gethostbynamel($host);

echo(The IP addresses of $hostare:<br>\n);
for ($i = 0; $i < count($ip); $i++) {
echo($ip [i] <br>\n);
}
?>

比如你的机器是有多个IP的话,上面则可以输出所有的IP了。

同样,如果给出了IP的话,则可以反过来通过gethostbyaddr()获得其域名,如下例:

#div_code img { border: 0px none; }

<?php
$ip = 127.0.0.1;
$host= gethostbyaddr($ip);

echo(The host name corresponding to the IP
address
$ip is $host);
?>

关于WHOIS服务

有的时候,只是通过域名还是不能完全了解一个网站的详细情况的话,可以通过使用WHOIS服务去查询。WHOIS服务可以具体查出某一域名及其注册的详 细情况,而在PHP中也有相关函数可以查询,是通过PEAR包中的Net_Whois(http:// pear.php.net/package/Net_Whois/ )实现,安装该包后,代码如下:

#div_code img { border: 0px none; }

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1 />
<title>Untitled Document</title>
</head>

<body>
<?
require_once Net/Whois.php;
$server = whois.networksolutions.com;
$query = metroworks.com;
$whois = new Net_Whois;
$urlinfo = $whois->query($query, $server);
var_dump($urlinfo);
?>
</body>
</html>

其中$server指定了用哪一个whois解析商去进行解析,$query指定了需要查找的域名,最后使用var_dmp列出了域名的详细信息。

在本文的附件中(附件代码下载),提供了一个完整的例子,是一个通过PHP简单实现的FTP程序,可供参考。

PHP强大的网络功能介绍,比较实用

通过PHP访问并获得网页内容

  通过PHP去访问并获得网页内容是十分容易的,通过使用fopen函数,就象访问普通的文件那样就可以了,如
fopen(http://localhost/websecure/ftp.php, “r”);

  fopen函数有如下的一些参数:

介绍PHP强大的网络功能

  要注意的是,注意fopen中访问的URL中,如果最后的是目录,要加上斜杠,比如
fopen(”http://localhost/websecure/ftp.php/”, “r”);

  而象
fopen(http://localhost/websecure/ftp.php, “r”);

  则是会报错的。

  当用fopen打开网页后,接下来可以用很多方法获得网页的内容了,比如:
if ($stream = fopen(’http://www.sohu.com’, ‘r’)) {
  // print the first 5 bytes
  echo stream_get_contents($stream, 5);
  fclose($stream);
  }

  也可以用更快的函数,如file_get_contents即可:
$url=”http://www.blogjava.net/”;
echo file_get_contents( $url );

  关于DNS和IP

  Php在DNS域名解析方面的功能也十分强大。当然这功能会受到DNS客户端的一些限制,目前php在DNS解析方面提供了gethostbyname(string hostname)这个方法,其中参数是服务器的域名,返回的是对应的IP,比如:
$host = "www.sohu.com";
$ip = gethostbyname($host);

echo "The IP address of $host is $ip";
?>

  而另外一个方法gethostbynamel则是可以返回某个域名下的所有IP,比如:
$host= "localhost";
$ip= gethostbynamel($host);

echo("The IP addresses of $hostare:
\n”);
for ($i = 0; $i < count($ip); $i++) {
echo("$ip [i]
\n”);
}
?>

  比如你的机器是有多个IP的话,上面则可以输出所有的IP了。

  同样,如果给出了IP的话,则可以反过来通过gethostbyaddr()获得其域名,如下例:
$ip = "127.0.0.1";
$host= gethostbyaddr($ip);

echo("The host name corresponding to the IP
address $ip is $host");
?>

  关于WHOIS服务

  有的时候,只是通过域名还是不能完全了解一个网站的详细情况的话,可以通过使用WHOIS服务去查询。WHOIS服务可以具体查出某一域名及其注册的详细情况,而在PHP中也有相关函数可以查询,是通过PEAR包中的Net_Whois(http:// pear.php.net/package/Net_Whois/ )实现,安装该包后,代码如下:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



require_once "Net/Whois.php";
$server = "whois.networksolutions.com";
$query = "metroworks.com";
$whois = new Net_Whois;
$urlinfo = $whois->query($query, $server);
var_dump($urlinfo);
?>

  其中$server指定了用哪一个whois解析商去进行解析,$query指定了需要查找的域名,最后使用var_dmp列出了域名的详细信息。

  在本文的附件中(附件代码下载),提供了一个完整的例子,是一个通过PHP简单实现的FTP程序,可供参考。

介绍9个很有发展潜力的PHP开源项目

PHP的开源世界可谓相当精彩,其中大家也接触的不少著名的PHP开源项目,比如Drupal、Sugar CMS、Joomla等等,但在本文中,笔者将选取9个最新知名度不是太高,但可在某些方面很实用,目前还在发展阶段,很有潜力的PHP开源项目。相信各位读者看了之后会惊叹:原来PHP还能干这么多事情。

  1、PHP FOR Android

  现在,iphone和Android大行其道,拥有它们已经成为一种潮流。而Android的市场份额也变的越来越大。

  而现在除了可以用JAVA来编写Android应用外,还多了一种选择,那就是可以使用PHP去编写相关的Android应用了,这都要归功于一个开源项目Php For Android(http://phpforandroid.net/)。它实际上是利用了另外一个开源项目Scripting Layer for Android(SL4A)( http://code.google.com/p/android-scripting/)提供的Android接口API去实现的,任何支持SL4A 的脚本语言(比如Javascript,Ruby, Perl,PHP,和Python)都能够通过接口直接跟操作系统打交道,编写应用。

  如果想了解这个项目,可以阅读如下的这篇文章《Build Your First PHP for Android Application》。

  2、PL/PHP

  某些数据库任务涉及很复杂的逻辑计算,而不是简单使用几句SQL语句就可以解决问题。为了降低其复杂性,许多数据库的解决方案中提供了存储过程,它在一个子程序中封装了要完成任务的逻辑,这些子任何的功能其实就象PHP中的函数一样。

  存储过程可以用相应的SQL去编写的,如微软的存储过程使用T-SQL,Oracle则采用PL-SQL。比如PostgreSQL数据库能执行由 C,C++,Java,Ruby,Perl,Python编写的存储过程,而有了PL/php 开源项目(https://public.commandprompt.com/projects/plphp/wiki),现在你可以使用PHP去编写存储过程了。

  当安装了PL/PHP项目后,你就可以在PostgreSQL下执行使用PHP编写的存储过程了,可以使用你熟悉的PHP语法,十分简单。

  3、PHP-QT

  PHP-QT项目(http://developer.berlios.de/projects/php-qt/)允许你使用PHP语言去编写实现QT 的功能,也就是说,可以使用PHP-QT去编写一些功能强大的桌面应用。所谓QT是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。

  但有点遗憾的是,这几年这个项目的发展有点迟缓了,如果确实有兴趣的话,建议也去研究下PHP-GTK这个项目(http://gtk.php.net/)

  4、Phuby

  最近,Ruby核心团队成员Aaron Patterson完成了phuby,它可以在Rails应用下运行php应用程序。项目的地址在https://github.com /tenderlove/phuby,尽管项目主持人Aaron发布了几个视频去证明phuby能让php在Rails下运行,但实际上在Rails社区中,估计phuby也只是一个实验品而已。

  5、另外一个phuby

  Sean Huber也发布了另外一个同名的项目,居然也叫phuby,但这个跟上面介绍那个是完全没任何关系的。项目地址在https://github.com /huberry/phuby。这个项目为php增加了几个有趣的功能,而只需要在php中设置include_path指向phuby的库位置就可以了。虽然该项目还是处在比较初级的阶段,但其实它已经是综合了php和ruby的一些特点了。

  6、Objective-PHP and Moka

  Objective-PHP and Moka are two ambitious projects headed by Stephen Lerodiaconou. TObjective-PHP(https://github.com/stevegeek/moka)和Moka(https: //github.com/stevegeek/moka)这两个项目是由Stephen Lerodiaconou.带领研发的很有野心的项目,他们为PHP语言增加了Object-C语言和Cocoa framework(注:Cocoa是 Mac OSX操作系统开发语言)。它们项目中的文档宣称这些新特性能吸引原来的Capucchino开发者。

  你可以观看这个视频(http://vimeo.com/9838953)去了解这两个框架。

  7、Php-serial

  你想通过编写php语言去操纵如视频,音频或计算机的串并口设备?现在是可以变成现实了。使用php-serial这个开源项目 (http://code.google.com/p/php-serial/),可以很容易地去实现。比如只需要调用deviceSet()方法,将串口名传递进去就可以了,接着就可以使用简单的读和写的方法了,比如:
deviceSet('COM2');
$seria-->deviceOpen();
$serial->sendMessage(’Sending a message to the port!’);
$serial->deviceClose();
?>

  8、Apns-PHP

  在苹果的操作系统3.0以上,你可以享受到苹果的推送信息的服务,简称Apple Push Notification Service(APNS),及时获得各类有用的资讯。

  现在,你可以使用PHP去实现这个功能了,apns-php项目提供了这个功能,项目的地址在http://code.google.com/p /apns-php/,该项目的文档宣称APNS API在2010年的12月17日已经完成了,可以提供自定义提醒图片和本地化的按钮等新特性。

  有一篇很好的入门导学文章指导你对apns-php的学习(http://blog.boxedice.com/2009/07/10/how-to- build-an-apple-push-notification-provider-server-tutorial/)

  9、CFPropertyList

  cocoa框架使用属性列表来管理序列化数据。这些属性列表可以通过Apple的如plutil等工具进行设置。然而有的开发者希望用他们熟悉的方式去管理这些数据,目前有不少开源项目可以实现这个目的,比如CFPropertyList就是其中之一,项目地址在:

  https://github.com/rodneyrehm/CFPropertyList,它允许PHP开发者可以创建属性列表,之后发送到iPhone应用。

20+ Best SEO Blogs to Follow and Polish Your SEO Skills

Search engine optimization (SEO) is the process of improving the visibility of a website or a web page in search engines without any pay. Google holds over 60% of the total search market. Its algorithm is naturally also unique, so ranking on Google carries its own unique considerations. Any ways Search Engine Optimization is very important for you if you want to increase your website traffic that’s why today i posted list of 20+ best SEO blogs for you to follow and polish your skills.

1- SEO Chat

Best SEO Blogs To Follow

2- Mr-SEO

Best SEO Blogs To Follow

3- SEO Moz

Best SEO Blogs To Follow

4- Best-SEO-Blog

Best SEO Blogs To Follow

5- Search Engine Journal

Best SEO Blogs To Follow

6- SEOptimise

Best SEO Blogs To Follow

7- SEO Book

Best SEO Blogs To Follow

8- SEO 2.0

Best SEO Blogs To Follow

9- Quantum SEO Labs

Best SEO Blogs To Follow

10- Traffick

Best SEO Blogs To Follow

11- SEO By The Sea

Best SEO Blogs To Follow

12- Search Engine Land

Best SEO Blogs To Follow

13- Search Engine Watch

Best SEO Blogs To Follow

14- Search Engine Guide

Best SEO Blogs To Follow

15- SEO Refugee

Best SEO Blogs To Follow

16- Search Engine Roundtable

Best SEO Blogs To Follow

17- Matt Cutts

Best SEO Blogs To Follow

18- Small Business SEM

Best SEO Blogs To Follow

19- Blue Hat SEO

Best SEO Blogs To Follow

20- Top Rank Blog

Best SEO Blogs To Follow

21- SEO Disco

Best SEO Blogs To Follow

22- Cre8pc

Best SEO Blogs To Follow

23- Bruce Clay

Best SEO Blogs To Follow

Linux VPS/服务器 网站及数据库自动本地备份并FTP上传备份脚本

从VPS侦探建站之初就一直在重申一定要备份好自己的数据,因为太多的不确定性可能会造成数据库丢失,而且大部分VPS服务商也不可能提供每天备份数据。

准备工作:

需要提前在VPS安装好lftp,lftp功能上比较强大,CentOS直接执行:yum install lftp,Debian执行:apt-get install lftp

需要在VPS上创建/home/backup/ 目录,在FTP上创建backup目录。

如果VPS上数据库不多的话使用Godaddy的免费空间就可以(10GB空间,300GB流量),只要注册个域名就免费送。

下面将备份脚本进行部分注释:

#!/bin/bash
#Funciont: Backup website and mysql database
#Author: licess
#Website: http://lnmp.org
#IMPORTANT!!!Please Setting the following Values!######~Set Directory you want to backup~######将下面的目录修改成自己要备份的目录,一般按我的都是在/home/wwwroot/下面所有直接写了需要备份的目录。可以继 续再加:Backup_Dir5=你的目录 ,Backup_Dir后面的数字依次递增。如果不足4个,直接删除不需要的就可以,同时修改下面tar zcf 部分。

Backup_Dir1=vpser.net
Backup_Dir2=lnmp.org
Backup_Dir3=licess.org
Backup_Dir4=jungehost.com

######~Set MySQL UserName and password~######设置MySQL的用户名和密码,最好是root,其他用户可能因为权限问题无法导出部分数据库。
MYSQL_UserName=root
MYSQL_PassWord=yourmysqlrootpassword

######~Set MySQL Database you want to backup~######设置要部分的数据库,可以继续再加:Backup_Database_Name5=数据库名,Backup_Database_Name后面的数字依次递增。
Backup_Database_Name1=vpser
Backup_Database_Name2=licess
Backup_Database_Name3=junge
Backup_Database_Name4=vpserorg

######~Set FTP Information~######设置用来存放备份数据的FTP信息
FTP_HostName=184.168.192.43   //FTP服务器的IP或者域名
FTP_UserName=vpsernet                //FTP服务器用户名
FTP_PassWord=yourftppassword   //FTP服务器用户对应的密码
FTP_BackupDir=backup                    //备份到FTP上的目录,需要提前创建好。

#Values Setting END!

TodayWWWBackup=www-*-$(date +”%Y%m%d”).tar.gz
TodayDBBackup=db-*-$(date +”%Y%m%d”).sql
OldWWWBackup=www-*-$(date -d -3day +”%Y%m%d”).tar.gz
OldDBBackup=db-*-$(date -d -3day +”%Y%m%d”).sql

tar zcf /home/backup/www-$Backup_Dir1-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir1 –exclude=soft
tar zcf /home/backup/www-$Backup_Dir2-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir2
tar zcf /home/backup/www-$Backup_Dir3-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir3 –exclude=test
tar zcf /home/backup/www-$Backup_Dir4-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir4

###上面为备份网站文件数据,因为我的网站比较零散,而且网站目录下面有些目录属于临时目录并不需要备份,所以可以在上 面加上–exclude=不备份的目录。如果在前面加了Backup_Dir5=yourdir,则再加tar zcf /home/backup/www-$Backup_Dir5-$(date +”%Y%m%d”).tar.gz -C
/home/wwwroot/ $Backup_Dir5 。如果多余则删除多余行。

/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 > /home/backup/db-$Backup_Database_Name1-$(date +”%Y%m%d”).sql
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name2 > /home/backup/db-$Backup_Database_Name2-$(date +”%Y%m%d”).sql
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name3 > /home/backup/db-$Backup_Database_Name3-$(date +”%Y%m%d”).sql
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name4 > /home/backup/db-$Backup_Database_Name4-$(date +”%Y%m%d”).sql

###上面为备份MySQL数据库,如果在前面加了 Backup_Database_Name5=yourdatabasename,则再加/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name5 > /home/backup/db-$Backup_Database_Name5-$(date +”%Y%m%d”).sql 。如果多余则删除多余行。

rm $OldWWWBackup
rm $OldDBBackup
###删除3天前的备份###

cd /home/backup/

###下面为自动上传部分,不得不说lftp很强大,抛弃ftp吧####
lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF
cd $FTP_BackupDir
mrm $OldWWWBackup
mrm $OldDBBackup
mput $TodayWWWBackup
mput $TodayDBBackup
bye
EOF

脚本下载地址:http://soft.vpser.net/lnmp/backup.sh

下载脚本,将脚本放到/root/ 下面,按上面的注释修改脚本中的参数,并保存,如果不熟悉vi或者nano编辑器,可以用winscp,执行:crontab -e

在crontab中加入:0 3 * * * /root/backup.sh

凌晨3点自动执行/root/bakcup.sh 脚本,备份vps上的数据并上传到FTP上。

小内存VPS优化建议 LNMP+Wordpress环境

对于 VPS 来说,内存应该是最宝贵的资源之一了,内存越小价格也就越便宜,普通用户也越能接受。因此如何有效利用有限的内存资源,使 VPS 的利用率最大化,能承载更高的并发数及负载,这应该是所有 VPS 用户都在思考的问题。下面,就结合我在维护本站时候获取的一些经验给出一些相应的建议,当然这份优化建议主要是针对 Linux 环境及 WordPress 用户。

稳定的 VPS 服务器

所有的上层内容都依托于稳定的硬件支持,所以如果你购买的 VPS 主机线路巨慢、三天两头挂掉、或者有时 VPS 母机 IO 负载超高,那么,就算再怎么优化也没有任何用处,你整天干的事情就是发 Ticket 找客服解决问题。所以,选购一台稳定快速的 VPS 主机这是最基础的要求。

轻量级 Web Server

Apache 已经变得越来越臃肿了,内存开销非常大,所以个人建议用轻量级的 Nginx 服务器,而对于 WordPress 来说 nginx 已经完全够用了。下面代码里是适用于 WordPress 3 的 nginx rewirte 规则,包括 Permalinks rewrite 及 WP-super-cache rewrite 规则。

#WP Permalinks rewrite

rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /index.php last;
}
#WP-super-cache rewrite
set $wp_super_cache_file ”;
set $wp_super_cache_uri $request_uri;
if ( $request_method = POST )
{
set $wp_super_cache_uri ”;
}
if ( $query_string )
{
set $wp_super_cache_uri ”;
}
if ( $http_cookie ~* “comment_author_|wordpress|wp-postpass_” )
{
set $wp_super_cache_uri ”;
}
if ( $wp_super_cache_uri ~ ^(.+)$ )
{
set $wp_super_cache_file /wp-content/cache/supercache/$http_host/$1index.html;
}
if ( -f $document_root$wp_super_cache_file )
{
rewrite ^(.*)$ $wp_super_cache_file break;
}
if (-f $request_filename)
{
expires 30d;
break;
}
if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}

而 PHP 方面则建议用 PHP-FPM , PHP-FPM 已经包含在 PHP 5.3.3 中,对于小内存 VPS 用户建议用静态进程方式,也就是固定几个进程,同时建议少开几个进程,比如 4-6 个左右。

Ubuntu 上可以用以下命令直接安装 nginx , php-fpm , mysql 环境

sudo apt-get install nginx php5 php5-dev php5-fpm php5-mysql mysql-server make

充分利用多核

Nginx 在 Linux 上有一个 worker_cpu_affinity 参数,可以为每个工作进程绑定到不同的 CPU ,所以如果你的 VPS 具有多核的话,那么可以充分利用各 CPU 。比如如果有 4 个 CPU,那么可以进行如下配置:

worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

最后你可以查看一下 CPU 状态,测试方法是输入 top 命令并按 1 。

MySQL 优化

关掉InnoDB:如果 VPS 只是用来跑 Worpdress 的话,用 MyISAM 存储引擎就足够了。你只需在my.cnf加入一行 skip-innodb 就可以把 InnoDB 存储引擎给关掉了。这样也可以省下一定数量的内存。

缓存,再缓存

1、启用 PHP 缓存加速模块 eAccelerator : 大家都知道, PHP 是动态脚本语言,每次访问都会重新编译执行,而 eAccelerator 则可以缓存编译过的部分 PHP 文件,从而起到提高 PHP 脚本性能及降低系统负载的效果。但需要注意的是,在 nginx + PHP-FPM 环境下, eAccelerator 无法进行内存共享,也就是说 PHP-FPM 的每个进程除了本身所需要的内存开销外,还会加上 eaccelerator.shm_size 参数中设定的值,所以我们在设置时尽量减小 eaccelerator.shm_size 的值,比如设置为 8 MB ,这样最多可以缓存 50 多个 php 文件,虽然少了点,但对于 WordPress 来说基本足够了,这也算是一种节约资源及增加性能的折中方案。另外,启用 eaccelerator 后对于访问速度确实有显著提高。

2、WordPress 页面缓存:建议用 Wp-super-cache 插件,这个插件的 nginx rewrite 规则之前已经有提到过。Wp-super-cache 可以起到网页静态化缓存的效果,可以进一步除低系统负载。

3、数据库查询缓存 : 为了进一步减少数据库查询次数,就需要用此类插件,这类插件很多,我在用的是 DB Cache Reloaded

WordPress 模版及插件

减少不必要插件以及用简洁的模版,不要放置大量的图片,因为一旦图片一多就会产生更多的 http 连接请求数,导致页载载入速度变慢,同时也消耗更多的带宽,毕竟带宽也是 VPS 的重要资源之一。

水平有限,如有错误,敬请指正。如果你有更好的优化方案,也请在留言中分享,谢谢!

# 最后介绍一些在线测试及优化工具:

Just-Ping : 可以同时获取世界各地几十个位置 ping 你主机的值,从而可以判断 VPS 主机的线路质量。

Pingdom : 全页面载入测试工具,可测试访问某网页共发起了多少请求及每个请求的耗时,从而可以判断哪些网页元素比较影响载入速度,对进一步优化提供帮助。

测速宝:整体页面载入及访问速度测试工具,可以让国内各地的网友帮你测试。

作者:riku

JS获取网页中HTML元素的方法分析

1、根据id:

getElementById

2、根据name:

getElementsByName

3、根据TagName:

getElementsByTagName

4、根据ClassName

getElementsByClassName(这个需要自己定义)

5、根据元素间的关系

nextSibling(当前节点的后一节点)
previousSibling(当前节点的前一节点)
childNodes(字节点集合)
children(字节点集合)
firstChild(首个子节点)
lastChild(最后的子节点)
parentElement(父节点)

document.getElementsByClassName = function(className,oBox) {
//适用于获取某个HTML区块内部含有某一特定className的所有HTML元素
this.d= oBox || document;
var children = this.d.getElementsByTagName(’*') || document.all;
var elements = new Array();
for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(’ ‘);
for (var j = 0; j < classNames.length; j++) {
if (classNames[j] == className) {
elements.push(child);
break;
}
}
}
return elements;
}

document.getElementsByType = function(sTypeValue,oBox) {
//适用于获取某个HTML区块内部同属于某一特定type的所有HTML元素,如:input,script,link等等
this.d= oBox || document;
var children = this.d.getElementsByTagName(’*') || document.all;
var elements = new Array();
for (var i = 0; i < children.length; i++) {
if (children[i].type == sTypeValue) {
elements.push(children[i]);
}
}
return elements;
}

function $() {
var elements = new Array();
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == ’string’)
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}

$Cls = function (s,o){
return document.getElementsByClassName(s,o);
};

$Type = function (s,o){
return document.getElementsByType(s,o);
};

$Tag = function (s,o){
this.d=o || document;
return this.d.getElementsByTagName(s);
};

$Name = function (s){ //通过name的方式只能针对整个document而言,不能为其限定范围
return document.getElementsByName(s);
};

Htaccess文件用法集锦

1.时区设置

有些时候,当你在PHP里使用date或mktime函数时,由于时区的不同,它会显示出一些很奇怪的信息。下面是解决这个问题的方法之一。就是设置你的服务器的时区。你可以在这里找到所有支持的时区的清单。

SetEnv TZ Australia/Melbourne

2. 搜索引擎友好的301永久转向方法

为什么这是搜索引擎友好的呢?因为现在很多现代的搜索引擎都有能根据检查301永久转向来更新它现有的记录的功能。

Redirect 301 http://www.aqee.net/home http://www.aqee.net/

3. 屏蔽下载对话框

通常,当你下载东西的时候,你会看到一个对话框询问你是保持这个文件还是直接打开它。如果你不想看到这个东西,你可以把下面的一段代码放到你的.htaccess文件里。

AddType application/octet-stream .pdf

AddType application/octet-stream .zip

AddType application/octet-stream .mov

4. 省去www前缀

SEO的一个原则是,确保你的网站只有一个URL。因此,你需要把所有的通过www的访问转向的非www,或者反这来。

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^www.aqee.net [NC]

RewriteRule ^(.*)$ http://aqee.net/$1 [L,R=301]

5. 个性化Error页面

对每个错误代码定制自己个性化的错误页面。

ErrorDocument 401 /error/401.php

ErrorDocument 403 /error/403.php

ErrorDocument 404 /error/404.php

ErrorDocument 500 /error/500.php

6. 压缩文件

通过压缩你的文件体积来优化网站的访问速度。

# 压缩 text, html, javascript, css, xml:

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/javascript

AddOutputFilterByType DEFLATE application/x-javascript

7. 缓存文件

缓存文件是另外一个提高你的网站访问速度的好方法。

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>

Header set Cache-Control “max-age=2592000″

</FilesMatch>

8. 对某些文件类型禁止使用缓存

而另一方面,你也可以定制对某些文件类型禁止使用缓存。

# 显式的规定对脚本和其它动态文件禁止使用缓存

<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>

Header unset Cache-Control

</FilesMatch>

安全问题

下面的htaccess代码能够提高你的web服务器的安全水平。图片链接盗用保护非常有用,它能防止其他人偷盗使用你的服务器上的图片资源。

1. 通过.htaccess放盗链

痛恨那些偷盗链接你的web服务器上的图片资源而耗尽了你的带宽的行为吗?试试这个,你可以防止这种事情的发生。

RewriteBase /

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www.)?aqee.net/.*$ [NC]

RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

2. 防黑客

如果你想提高网站的安全等级,你可以去掉下面的几行代码,这样可以防止一些常见恶意URL匹配的黑客攻击技术。

RewriteEngine On

# proc/self/environ? 没门!

RewriteCond %{QUERY_STRING} proc/self/environ [OR]

# 阻止脚本企图通过URL修改mosConfig值

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

# 阻止脚本通过URL传递的base64_encode垃圾信息

RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]

# 阻止在URL含有<script>标记的脚本

RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]

# 阻止企图通过URL设置PHP的GLOBALS变量的脚本

RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]

# 阻止企图通过URL设置PHP的_REQUEST变量的脚本

RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})

# 把所有被阻止的请求转向到403禁止提示页面!

RewriteRule ^(.*)$ index.php [F,L]

3. 阻止访问你的 .htaccess 文件

下面的代码可以阻止别人访问你的.htaccess文件。同样,你也可以设定阻止多种文件类型。

# 保护你的 htaccess 文件

<Files .htaccess>

order allow,deny

deny from all

</Files>

# 阻止查看指定的文件

<Files secretfile.jpg>

order allow,deny

deny from all

</Files>

#多种文件类型

<FilesMatch “.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$”>

Order Allow,Deny

Deny from all

</FilesMatch>

4. 重命名htaccess 文件

你可以通过重命名htaccess文件来对其进行保护。

AccessFileName htacc.ess

5. 禁止目录浏览

禁止服务器对外显示目录结构,反之亦然。

# 禁止目录浏览

Options All -Indexes

# 开放目录浏览

Options All +Indexes

6. 改变缺省的Index页面

你可以把缺省的 index.html, index.php 或 index.htm 改成其它页面。

DirectoryIndex business.html

7. 通过引用信息来阻止某些不欢迎的浏览者

# 阻止来自某网站的用户

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]

RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]

RewriteRule .* - [F]

</ifModule>

8. 通过判断浏览器头信息来阻止某些请求

这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

# 阻止来自某些特定网站的用户

<IfModule mod_rewrite.c>

SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider
|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT

SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT

Deny from env=HTTP_SAFE_BADBOT

</ifModule>

9. 禁止脚本执行,加强你的目录安全

# 禁止某些目录里的脚本执行权限

AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

Options -ExecCGI