Laravel 5: mkdir/Filesystem::makeDirectory with permissions


Laravel 5: mkdir/Filesystem::makeDirectory with permissions from config

我今天早上遇到了一个问题,FileSystem::makeDirectory直接调用mkdir.我正在尝试创建一个目录,递归地从我的配置中提取所需的模式,如下所示:

$filesystem->makeDirectory($path, config('permissions.directory'), true);

配置/权限.php

<?php
return [
    'directory' => env('PERMISSIONS_DIRECTORY', 0755),
    'file' => env('PERMISSIONS_FILE', 0644)
];

.env

...
PERMISSIONS_DIRECTORY=0775
PERMISSIONS_FILE=0664    

调用此目录时,将创建目录,但它获得的权限会搞砸。它得到了一些类似于dr----Sr-t+的东西.经过一些研究,我得出的结论是,当我使用 config('permissions.directory') 将值从我的配置传递给 mode 参数时,模式被视为十进制而不是八进制。因此,对 config 的调用可能会返回传递给函数的775,而不是0775

如果我删除对config的调用,将使用正确的权限创建目录:

    $filesystem->makeDirectory($path, 0775, true);

有没有人知道如何解决这个问题,同时仍然能够将我的权限存储在我的配置文件上?

它不起作用,因为权限应该是八进制,而不是十进制。当您键入0755作为数字时 - 它是八进制格式。当您尝试使用字符串"0755"时 - 它将自动转换为十进制755。和755 != 0755.

因此,为了将字符串正确转换为八进制数,您应该使用 intval 函数:

$permissions = intval( config('permissions.directory'), 8 );
$filesystem->makeDirectory($path, $permissions, true);

http://php.net/manual/en/function.intval.php