php踩坑记录(一)

版权声明:本文为博主原创文章,允许转载,但须注明原文地址 https://blog.csdn.net/yan_fang/article/details/60966824


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);




猜你喜欢

转载自blog.csdn.net/yan_fang/article/details/60966824