레벨 캐시 파일 권한 설정
16714 단어 LaravelCachepermission
Laravel 파일 권한 문제
다른 거는요?
만약 파일 디렉터리의 생성이umask의 영향을 받는다면, 로그 설정 파일의 권한은 어떻게 됩니까?알아봤어.도착한 것은 다음과 같은 방법이다.
Monolog\Handler\StreamHandler.php
/**
* {@inheritdoc}
*/
protected function write(array $record): void
{
if (!is_resource($this->stream)) {
if (null === $this->url || '' === $this->url) {
throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().');
}
$this->createDir();
$this->errorMessage = null;
set_error_handler([$this, 'customErrorHandler']);
$this->stream = fopen($this->url, 'a');
if ($this->filePermission !== null) {
@chmod($this->url, $this->filePermission);
}
restore_error_handler();
if (!is_resource($this->stream)) {
$this->stream = null;
throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url));
}
}
if ($this->useLocking) {
// ignoring errors here, there's not much we can do about them
flock($this->stream, LOCK_EX);
}
$this->streamWrite($this->stream, $record);
if ($this->useLocking) {
flock($this->stream, LOCK_UN);
}
}
결과chmod 또는~~.그럼 나도 할 거야.사용자 정의 캐시 드라이버 만들기
프로파일
우선, 설정 파일을 추가 기록합시다!permissions가 추가되었습니다.
config/cache.php
'file' => [
'driver' => 'local',
'path' => storage_path('framework/cache/data'),
'permissions' => [
'dir' => 0775,
'file' => 0664,
],
],
여기driver도'file'→'로컬'로 바꿉니다.스토리지 생성
그리고 드라이버를 만드는 상점입니다.
pp\Extensions\CacheLocalFileStore.php
<?php
namespace App\Extensions;
use Illuminate\Cache\FileStore;
use Illuminate\Filesystem\Filesystem;
use League\Flysystem\Cached\CachedAdapter;
class CacheLocalFileStore extends FileStore
{
/**
* The file cache permissions.
*
* @var array
*/
protected $permissions;
/**
* Create a new file cache store instance.
*
* @param Filesystem $files
* @param $config
*/
public function __construct(Filesystem $files, $config)
{
$this->files = $files;
$this->directory = $config['path'];
$this->permissions = $config['permissions'];
}
/**
* Store an item in the cache for a given number of seconds.
*
* @param string $key
* @param mixed $value
* @param int $seconds
* @return bool
*/
public function put($key, $value, $seconds)
{
$this->ensureCacheDirectoryExists($path = $this->path($key));
$result = $this->files->put(
$path, $this->expiration($seconds).serialize($value), true
);
@chmod($path, $this->permissions['file']);
return $result !== false && $result > 0;
}
/**
* Create the file cache directory if necessary.
*
* @param string $path
* @return void
*/
protected function ensureCacheDirectoryExists($path)
{
$concatPath = $this->directory;
$dir = trim(str_replace($concatPath, '', dirname($path)), '/');
$dirNames = explode('/', $dir);
foreach ($dirNames as $direName) {
$concatPath .= '/'. $direName;
if (! $this->files->exists($concatPath)) {
$this->files->makeDirectory($concatPath, 0777, true, true);
@chmod($concatPath, $this->permissions['dir']);
}
}
}
}
기존 FileStore를 상속하고 사용했습니다.ensure Cache Directory Exists에서 foreach 부분을 사용하는 이유는 만든 path가'/8/50'같은 디렉터리 구조이기 때문에chmod는 부모의 단층에서도 사용할 수 있는 용법이 생각나지 않기 때문이다.공급업체 생성
등록할 공급업체를 만듭니다.
<?php
namespace App\Providers;
use App\Extensions\CacheLocalFileStore;
use App\Extensions\MongoStore;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\ServiceProvider;
class CacheServiceProvider extends ServiceProvider
{
/**
* コンテナ結合の登録
*
* @return void
*/
public function register()
{
//
}
/**
* 全アプリケーションサービスの初期起動
*
* @return void
*/
public function boot()
{
Cache::extend('local', function ($app) {
return Cache::repository(new CacheLocalFileStore($app['files'], config('cache.stores.file')));
});
}
}
구성 파일의 드라이버 "로컬"을 사용하여 등록합니다.config/app.등록 php.
Reference
이 문제에 관하여(레벨 캐시 파일 권한 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/FattyRabbit/items/693b367bfb2b27e0e4a1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)