thinkphp5日志文件权限的问题

由于www用户和root用户(比如command的cli进程日志)都有可能对log文件进行读写。

如果是由www用户创建的log文件,不会出任何问题。

但是如果是先由root用户创建的log文件,然后再到www用户角色去写,就会出问题了

因为一般默认创建的log文件的权限是  -rw-r--r-

也就是www没有权限去写入root用户创建的log文件。

网上的方法大体就是像下面代码一样在mkdir的时候修改目录的权限 

//thinkphp/library/think/log/driver/File.php
$destination = $this->getMasterLogFile();
 
$path = dirname($destination);
if (PHP_SAPI != 'cli') {
     !is_dir($path) && mkdir($path, 0755, true);
}else{
     !is_dir($path) && mkdir($path, 0777, true) && chmod($path, 0777);
}

但是上面只能修改文件夹的权限,并没有修改文件夹下具体的.log文件的权限。

【解决办法】:

修改文件:\thinkphp\library\think\log\driver\File.php里的write()函数

protected function write($message, $destination, $apart = false, $append = false)
    {
        ...
        if (PHP_SAPI == 'cli') {
            $message = $this->parseCliLog($info);
        } else {
            // 添加调试日志
            $this->getDebugLog($info, $append, $apart);
 
            $message = $this->parseLog($info);
        }
 
        //return error_log($message, 3, $destination);
 
        /** 解决root生成的文件,www用户没有写权限的问题 by Werben 20190704 begin */
        if (!is_file($destination)) {
            $first = true;
        }
 
        $ret = error_log($message, 3, $destination);
 
        try {
            if (isset($first) && is_file($destination)) {
                chmod($destination, 0777);
                unset($first);
            }
        } catch (\Exception $e) { }
        return $ret;
        /** 解决root生成的文件,www用户没有写权限的问题 by Werben 20190704 end */
        ...
    }

转载于:https://www.cnblogs.com/werben/p/11550320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值