20-06-2016 0 条评论

有时因为项目的需求,一个项目要布署多套系统,所以即使有版本控制往往也需要手动更新代码,造成项目维护性差。
下面通过shell脚本,可以通过svn up定时自动更新代码

#! /bin/sh
filelist=`ls /var/www/html/ |grep '^new_o2o_'`
for file in $filelist
do
   while read line
   do
   svn up ./$file/$line
   done < svn_update.txt
done

其中svn_update.txt 存储更新的文件路径,每行一个文件。
设置crontab -e 设置脚本运行时间。

14-06-2016 0 条评论

1.php错误日志保存
基本的方法是使用error_log进行保存,可以存放在一个目录下。
如:

error_log(
    date_default_timezone_set('asia/chongqing');

格式是:错误的日志,发生错误的级别,显示错误错的代码
如:
date().$a.’\r\n’,3,$b;

date(‘Y年m月d日—G小时i分钟s秒’).$变量名–将错误的日志赋值给这个变量.’\r\n’,3,’d:\dir—指的是存放的目录’;
)
2.php异常处理
请记住一点:PHP默认的异常处理是一个类,是系统默认的类,即:Exception。
1.基本语法

    try{
        //可能出现错误或是异常的代码
    }
    //catch 捕获  Exception 是异常类(是php定义好的一个类)
    catch(Exception e){
        //对异常处理
        //1.自己处理
        //2.自己不处理,将其抛出
    }

例子:

    try{
        a('addd');
        echo '12155';
    }catch(EXception $a){
    echo '失败了'.$a->getMessage();
    //可以继续抛出,这时将会启动PHP默认的异常处理器来处理。
    //你可以自定义一个顶级异常处理,见下文有介绍。
    }
    function a($name){
        if($name=='peng'){
            echo '这是正确的peng';
        }else{
            throw new Exception ('出错了');
        }
    }

//这种处理的方式,可以有效的控制错误,所以在开发中大量的使用。
注意事项:
1.当捕获到一个异常后,try{}里面后续代码将不会被执行,需要注意的是前面的代码可以执行,
那这到底是个什么样的意思呢?
如上的例子中,echo ‘12155’是不会被执行的,反之如果这样修改:

    try{
        echo '12155';
        a('addd');
        //这里的12155是会被执行的。
    }

2.定义一个顶级异常处理器

    function my_exception($e){
        echo '我是顶级异常处理器'.$e->getMessage();
    }

//修改默认的顶级异常处理函数(器)

set_exception_handler("my_exception");

3.如果一个异常发生,但是你没有catch捕获,则提示Uncatched Exception。
4.当catch一个异常,你可以处理,也可以不处理,不处就可以。

throw new Exception('信息');

5.使用多个catch代码块可以捕获不同种类的异常。

    try{
        //代码码...需要进行检测代码的异常
    }catch(PDOException $e){

    }catch(Exception $e){

    }

    try{
    $i=8/0;
    }catch(Exception $e){
    echo 'ok';
    echo $e->getMessage();
    }

这个例子并不会执行’ok’,原因是$i=8/0,并没有抛出异常。
所以可以看出,能不能捕获(catch)到异常,要取决于有没有真的抛出异常。

14-06-2016 0 条评论

我们知道在php里面,session默认保存的路径都是在/tmp/session或/var/lib/php5,这样就造成了这个目录里面的文件数太多,引发了PHP性能问题,所以我们可以设置多级目录,当然也可以把session放在mysql或者redis,这里我们只说分级目录,后续会讲mysql及redis方案。
首先,修改 php.ini的 session.save_path 选项修改如下:

session.save_path = “2;/tmp/session“  //这里设置2级就可以
session.hash_function = 1 //默认是为0(md5),这里设置为1(sha1)
session.hash_bits_per_character = 5 //指定在SID字符串中的每个字符内保存多少bit  4: 0-9, a-f ;5: 0-9, a-v; 6: 0-9, a-z, A-Z, “-“, “,”

找到PHP安装目录下的ext/session/mod_files.sh 通过脚本就可以生成目录。

#! /bin/sh
 
if test "$2" = ""; then
echo "usage: $0 basedir depth"
exit 1
fi
 
if test "$2" = "0"; then
exit 0
fi
 
hash_chars="0 1 2 3 4 5 6 7 8 9 a b c d e f"
if test "$3" -a "$3" -ge "5"; then
hash_chars="$hash_chars g h i j k l m n o p q r s t u v"
if test "$3" -eq "6"; then
hash_chars="$hash_chars w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ,"
fi
fi
 
for i in $hash_chars; do
newpath="$1/$i"
mkdir $newpath || exit 1
sh $0 $newpath `expr $2 - 1` $3
done

#cd /home
#./mod_files.sh /var/lib/php5 2 5 //参数表示 存放路径, 几级目录,每个目录生成多少个目录。
其中一点,需要注意其存储目录(/tmp/session或/var/lib/php5),要有相应的执行权限,可以给777。
因为通过使用session多级目录,php是不会释放资源的,所以需要我们自己写脚本定时清理。
rm_session_auto_mksession.sh

#! /bin/sh
rm -rf /var/lib/php5/*
/home/sh/session_mod_file.sh /var/lib/php5 2 5
chmod -R 777 /var/lib/php5

通过这个脚本和上面的脚本配合crontab -e就可以定时清理SESSION文件。
0 3 * * * /home/sh/rm_session_auto_mksession.sh,每天凌晨3点开始工作。