php踩坑记录(一)

    xiaoxiao2021-03-25  159

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

    转载请注明原文地址: https://ju.6miu.com/read-15336.html

    最新回复(0)