宝塔下thinkphp5日志文件权限的问题,文件缓存也一样修改

三个办法解决:

1,修改php-fpm配置文件,把用户改为root

2,把www拉入root用户组下,sudo -g root www

3,修改源码如下

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

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

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

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

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

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

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

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

【解决办法】:

修改文件: hinkphplibrary hinklogdriverFile.php里的write()函数

  1.  
    protected function write($message, $destination, $apart = false, $append = false)
  2.  
    {
  3.  
    ...
  4.  
    if (PHP_SAPI == 'cli') {
  5.  
    $message = $this->parseCliLog($info);
  6.  
    } else {
  7.  
    // 添加调试日志
  8.  
    $this->getDebugLog($info, $append, $apart);
  9.  
     
  10.  
    $message = $this->parseLog($info);
  11.  
    }
  12.  
     
  13.  
    //return error_log($message, 3, $destination);
  14.  
     
  15.  
    /** 解决root生成的文件,www用户没有写权限的问题 by Werben 20190704 begin */
  16.  
    if (!is_file($destination)) {
  17.  
    $first = true;
  18.  
    }
  19.  
     
  20.  
    $ret = error_log($message, 3, $destination);
  21.  
     
  22.  
    try {
  23.  
    if (isset($first) && is_file($destination)) {
  24.  
    chmod($destination, 0777);
  25.  
    unset($first);
  26.  
    }
  27.  
    } catch (Exception $e) { }
  28.  
    return $ret;
  29.  
    /** 解决root生成的文件,www用户没有写权限的问题 by Werben 20190704 end */
  30.  
    ...
  31.  
    }
原文地址:https://www.cnblogs.com/caicaizi/p/13576969.html