thinkphp5日誌文件權限的問題

因爲www用戶和root用戶(好比command的cli進程日誌)都有可能對log文件進行讀寫。php

若是是由www用戶建立的log文件,不會出任何問題。thinkphp

可是若是是先由root用戶建立的log文件,而後再到www用戶角色去寫,就會出問題了app

由於通常默認建立的log文件的權限是  -rw-r--r-函數

也就是www沒有權限去寫入root用戶建立的log文件。this

網上的方法大致就是像下面代碼同樣在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文件的權限。日誌

【解決辦法】:code

修改文件:\thinkphp\library\think\log\driver\File.php裏的write()函數blog

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 */
        ...
    }
相關文章
相關標籤/搜索