所有由waicai发布的文章

WINDOWS环境安装PHP的MEMCACHE扩展

1.下载memcache扩展模块php_memcache.dll,放在\php\ext\目录下

下载地址:http://pecl.php.net/package/memcache/3.0.8/windows

根据PHP版本(5.3,5.4,5.5,5.6),是否线程安全(TS,NTS),PHP服务的版本(X84,X64)

2.在PHP.INI中写入

extension=php_memcache.dll
[Memcache]
memcache.allow_failover=1
memcache.max_failover_attempts=20
memcache.chunk_size=8192
memcache.default_port=11211

3.重启服务

过滤xml中的不合法字符

public function filterStringXml($str) {
$str = @iconv(‘UTF-8′, ‘GBK’, $str);
$str = @iconv(‘GBK’, ‘UTF-8′, $str);
$str = str_replace(“\xC”, ”, $str);

$str = preg_replace(‘/[^\x{0000}-\x{FFFF}]/iu’, ”, $str);
$str = preg_replace(“/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/”, “”, $str);
return $str;
}

BOM头的处理

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于 PHP来说,BOM是个大麻烦,尤其是在用PHP做接口输出的时候。

PHP并不会忽略BOM,在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分,一并输出出去。所以,在调用带有BOM的接口的时候,时常会遇到报文无法正确解析,但是看上去,报文又没有任何问题。

所以,在用PHP做接口被调用方时,一定要避免出现BOM头,这样给大家带来的麻烦都会减少,如果是在调用对方接口时候,对方接口存在BOM头,无法让对方去掉的时候,我们就要自己去手动去掉BOM。

附上一段代码,去判断是否存在BOM,并且去掉。

function checkBOM($filename) {
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191)         {
$contents = substr($contents, 3);
}
return $contents;
}

看病

陪你加班到凌晨,

给你送上回家的的士。

说好的睡够了去医院检查身体,

可是等我醒来,

你却已经在医院。

得知你只睡两个小时,

真的好想用你入怀,让你靠在怀里好好的睡上一觉。

身在公司,心在医院,关注着你的一丝动态。

而你,却什么都不愿意说给我听。

看到你的状态,

真的好担心好担心你。

控制不住给你打了电话,

却什么都没有问出来。

我的关心你都可以丢在一边,

只想知道,

你很好,

不是骗我,

是,

真的很好。

雨夜

夜,下着大雨。

陪你加班,哪怕只是伴你左右。

为你挡雨,哪怕自己满身湿透。

为你遮风,哪怕被风吹透衣衫。

陪你打车,哪怕已经困意阑珊。

为你留伞,哪怕自己大雨浇头。

一切为你,只为让你身上没有一滴雨水。

而你,在打到车的时候。

却挥一挥手,跟我说。

你走吧,仿佛驱赶一条狗。

走,很容易。

只怕我走之后,再也不会有人伴你加班到深夜。

只怕我走之后,再也不会有人为你遮风挡雨。

只怕我走之后,再也不会有人为你献出自己。

大雨滂沱,站在雨中,望着出租车驶去的背影。

默然。

神伤。

用唯一主键批量更新数据(ON DUPLICATE KEY UPDATE)

今天学习到了一种利用唯一主键批量更新sql的方法:

INSERT INTO a ( id,name,age ) values (1,’andy’,12), (2,’lili’,13), (3,’lucy’,14) ON DUPLICATE KEY UPDATE name=VALUES(name), age=VALUES(age);

如果a表的id是唯一主键,而且values里边的值都是要更新的,那么这条语句就会等价于

UPDATE a SET name=’andy’, age=12 WHERE id=1;

UPDATE a SET name=’lili’, age=13 WHERE id=2;

UPDATE a SET name=’lucy’, age=14 WHERE id=3;

更新表时WHERE当前表

今天在修改数据库字段的时候,执行UPDATE XXX SET is_delete=1 WHERE id IN (SELECT id FROM XXX WHERE name=’Andy’)这个SQL,直接报错,错误为:You can’t specify target table ‘XXX’ for update in FROM clause。

百度了一下,说是一个update语句,不能在where条件里边嵌套自身表的查询语句。

根据提供的解决方案,尝试着修改了一下SQL:UPDATE XXX AS a,(SELECT id FROM XXX WHERE name=’Andy’) AS b SET a.is_delete=1 WHERE a.id=b.id,修改后执行,成功修改

PHP接收文件流的HTTP请求

最近,跟JAVA系统进行交互,学习到了一个新东西,HTTP请求接口时,用文件流传输数据。

这种方式相当于在BODY体里边传输数据,而非REQUEST的KEY=>VALUE形式,经过查询后,这种形式的传输,用file_get_contents(“php://input”),这种方式可以获取。

file_get_contents(“php://input”)这种方式同样也可以获取POST和GET的内容,不过会以字符串形式输出。