一个非常简单的PHP网站首页静态化方案

下面这段代码是一个用PHP编写的网站首页静态化程序,代码并非站长本人所写,只是在一个项目中看到的。这个方案是将首页内容存入到一个磁盘文件中,需要时从这个文件中取出内容并输出。

这个方案只适用于并发量不高的网站,因为在较高并发量状况下,频繁的进行磁盘IO对于性能影响较大。(高并发的网站可以考虑将内容存入Memcached)

代码如下:

阅读更多

修改Linux用户使用资源限制ulimit

如果ulimit设置的过小,对于并发量大的网站,可能会出现too many open files的错误。因此需要我们对ulimit设置进行调整,方法如下:

例如apache以www用户身份运行

首先,打开limits.conf文件
vi /etc/security/limits.conf

在末尾加上如下内容:
www soft nofile 32768
www hard nofile 65536

上面两行的含义是:
www – 所指定的用户名
soft – 软限制
hard – 硬限制
nofile – 允许打开的文件数量,后面的数字就是具体的数量。

分享一个支持UTF-8的PHP字符串截取函数

截取UTF-8编码字符串的方法有很多,我也分享一个:

function cutStr($Str, $Length)
{
    global $s;
    $i = 0;
    $l = 0;
    $ll= strlen($Str);
    $s = $Str;
    $f = true; 

    while ($i <= $ll) {
        if (ord($Str{$i}) < 0x80) {
            $l++; $i++;
        } elseif (ord($Str{$i}) < 0xe0) {
            $l++; $i += 2;
        } elseif (ord($Str{$i}) < 0xf0) {
            $l += 2; $i += 3;
        } elseif (ord($Str{$i}) < 0xf8) {
            $l += 1; $i += 4;
        } elseif (ord($Str{$i}) < 0xfc) {
            $l += 1; $i += 5;
        } elseif (ord($Str{$i}) < 0xfe) {
            $l += 1; $i += 6;
        }
        if (($l >= $Length - 1) && $f) {
            $s = substr($Str, 0, $i);
            $f = false;
        }
        if (($l > $Length) && ($i < $ll)) {
            $s = $s . '...';
            break; //如果进行了截取,字符串末尾加省略符号“...”
        }
    }
    return $s;
}

Apache日志文件每日自动切割的配置方法

打开Apache的httpd.conf文件,分别找到:

错误日志
ErrorLog logs/error_log
修改为
ErrorLog “| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log_%Y%m%d 86400 480”

访问日志
CustomLog logs/access_log common
修改为
CustomLog “| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_%Y%m%d 86400 480” common

解决FCKeditor在IE9下弹出层兼容问题

在IE9下,FCKeditor的弹出浮动层会出现兼容bug,下面提供一个解决方法:

打开下面这个文件
fckeditor/editor/js/fckeditorcode_ie.js

找到第 38行的这个方法:FCKTools.RegisterDollarFunction

将原来的
FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};

修改方法为:
FCKTools.RegisterDollarFunction=function(A){A.$=function(v){return A.document.getElementById(v);}};

定时处理MySQL超时Locked进程的Shell脚本

最近一段时间,我刚刚进入一家新公司,并接手了这里的一个站点,由于这个站点的架构设计不太合理,导致MySQL的压力始终很大,经常出现超时的Locked进程,于是编写了一段Linux的Shell脚本来定时kill掉这些进程。

脚本如下:

#!/bin/bash
mysql_pwd="xxxxxx" #mysql的root密码
mysql_exec="/usr/local/mysql/bin/mysql"
tmp_dir="/tmp"
file_sh="$tmp_dir/mysql_kill_locked.sh"
file_tmp="$tmp_dir/mysql_kill_locked.tmp"
file_log="$tmp_dir/mysql_kill_locked.log" #日志
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" > $file_tmp
cat $file_tmp >> $file_log
for line in `cat $file_tmp | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $file_sh
done
chmod +x $file_sh
sh $file_sh #执行临时脚本
> $file_sh #清空临时脚本

最后,将这段脚本加入到crontab,定时执行即可。

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

Nginx手册:Gzip压缩模块详解

Nginx中的Gzip模块,支持在线实时压缩输出数据流。有利于减少访问网站过程中传输的数据量,从而减少带宽资源的占用率。

使用范例

gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;

指令详解:

阅读更多

Nginx的rewrite规则基础知识

Nginx的rewrite规则与Apache有一些区别,特地找来一些资料,学习一下Nginx的rewrite规则。

正则表达式匹配,其中:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行

阅读更多

WordPress多站点模式 在Nginx下的rewrite配置方法

最近在把很多应用从Apache转入Nginx下,遇到最棘手的问题莫过于两个平台下rewrite规则的重新调整,下面就拿WordPress为例,和大家分享一下WordPress在多站点模式下,如何配置Nginx中的rewrite规则。

我们在开启WordPress(版本:3.2.1)多站点模式的过程中,会提示我们将一段rewrite写入.htaccess文件中,如下:

阅读更多