php踩坑记录(一)



1. php多用户文件写权限问题

一般情况下,运行php进程的用户为www,有时候一些后台运行的守护进程或定时脚本,会用admin用户,二者都会对同一日志文件进行写操作,所以必须保证两者都有写权限。因此在创建文件或目录的时候,可以先创建,再修改权限。

//创建目录
mkdir($dir, 0777);
chmod($dir, 0777);

//创建文件
touch($file_path, 0666);
chmod($file_path, 0666);

为什么使用mkdir($dir, 0777);创建出来的目录并没有0777权限呢?原因是linux下 umask的影响,查看当前用户的umask值可直接使用umask命令进行查看。

这里就不对umask进行介绍了,umask如何影响目录或文件权限?详情baidu.


2. bom头问题

若php文件中包含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) { // BOM 的前三个字符的ASCII 码分别为 239 187 191
return true;
} else{
return false;
}
}


3. php5.6自动加载问题
经验证,在php5.6环境下,new对象时,类名不符合规范时,不会进入到注册的自动加载函数中
因此,在通过外部的类名入参来new对象时,需验证类名是否符合规范,避免在php5.6环境下报fatal error

$match = preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $ctlClass);




智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告