备忘日志【七】

1、 【2015-04-29】system、exec、passthru这些执行外部程序的函数。

任何程序使用此函数启动,为了能保持在后台运行,此程序必须将输出重定向到文件或其它输出流。否则会导致 PHP 挂起,直至程序执行结束。

程序在后台执行:
exec('/usr/local/php/bin/php /home/web/public/index.php crontab exprot > /dev/null &');
虽然是推到了后台执行,但是没输出重定向,PHP 挂起,直至程序执行结束:
exec('/usr/local/php/bin/php /home/web/public/index.php crontab exprot  &');

当用户提供的数据传入此函数,使用 escapeshellarg() 或 escapeshellcmd() 来确保用户欺骗系统从而执行任意命令。

Note:

如何程序使用此函数启动,为了能保持在后台运行,此程序必须将输出重定向到文件或其它输出流。否则会导致 PHP 挂起,直至程序执行结束。


2、【2015-04-29】php和C接口交互, 避免明文加异或操作。

C++异或:

for(int i=0; i<tcpdata->len-8; i++)
{
	*(data+i) = *(data+i)^(0xF4 * (i+8));
}

PHP异或:

//加异或操作,避免明文,从 command 后的数据都要异或
        for($i=8; $i<$len; $i++){
            $pack[$i] = chr(ord($pack[$i]) ^ (0xF4 * ($i)));
        }
        return $pack;

总结:不能直接把C代码翻译成PHP的,还要通过ord()和chr()这两个函数做转换。

附上完整的函数:

private function _headXor($cmd, $body)
    {

        $tmp[0] = pack("L", 8 + strlen($body));
        $tmp[1] = pack("L", $cmd);
        $tmp[2] = $body;
        $pack = join("", $tmp);
        $len = strlen($pack);
        //加异或操作,避免明文,从 command 后的数据都要异或
        for($i=8; $i<$len; $i++){
            $pack[$i] = chr(ord($pack[$i]) ^ (0xF4 * ($i)));
        }
        return $pack;
    }


3、【2015-04-30】验证E-mail地址 

这是一个用于验证电子邮件的正则表达式。但它并不是高效、完美的解决方案。在此不推荐使用。

$email = "test@ansoncheung.tk";  
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {  
    echo "Your email is ok.";  
} else {  
    echo "Wrong email address format";  
}  

为了更加有效验证电子邮件地址,推荐使用filer_var。

Php代码 
if (filter_var('test+email@ansoncheung', FILTER_VALIDATE_EMAIL)) {  
    echo "Your email is ok.";  
} else {  
    echo "Wrong email address format.";  
} 


4、【2015-04-30】用python把大的XLS表格转换为CSV文件。

php用PHPExcel读取50M左右的xls文件时经常超时或者报错,没找到解决办法。最后用python写了个脚本先把XLS的文件转换为小的CSV文件,php再读取csv文件轻松多了。

需要说明的是python读取50M左右的XLS文件只要10秒左右。

#!/usr/bin/python
#coding=utf-8
import os
import sys  
reload(sys)  
sys.setdefaultencoding('utf8') 
import xlrd
import csv


def csv_from_excel(file_name):
        if not os.path.isfile(file_name):
                sys.exit(0)
        file_n,file_ext = os.path.splitext(file_name)
        if file_ext != '.xls':
                sys.exit(0)
	wb = xlrd.open_workbook(file_name)
	worksheets = wb.sheet_names()
	i = 0
	for worksheet_name in worksheets:
		i += 1
		worksheet = wb.sheet_by_name(worksheet_name)
		file_csv = file_name+"_"+str(i)+".csv"
		your_csv_file = open(file_csv, 'wb')
		wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
		for rownum in xrange(worksheet.nrows):
		    wr.writerow([worksheet.cell_value(rownum,4)+"_end",worksheet.cell_value(rownum,6)])
		    #print worksheet.cell_value(rownum,4)
	your_csv_file.close()

file_name = sys.argv[1]
csv_from_excel(file_name)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值