php - Laravel 5: mkdir/Filesystem::makeDirectory 具有配置权限

标签 php laravel permissions mkdir

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

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

config/permissions.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') 将值从配置传递给模式参数时,模式被视为十进制而不是一个八进制。因此,对 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

关于php - Laravel 5: mkdir/Filesystem::makeDirectory 具有配置权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962800/

相关文章:

php - YouTube 如何对视频进行 "live streaming"评论?

php - Laravel 的 Artisan 无法连接到数据库,抛出错误 "SQLSTATE[HY000] [2002]"

php - 超时作业挂起 15 或 30 分钟,然后运行

java - 为什么我获得拒绝连接到端口 338 的权限?

php - 开始我的第一个项目?

php - AJAX/本地存储 : Is it possible to pass a JS variable to PHP?

javascript - 在 Laravel 中获取 500 内部服务器代码

linux - 为什么我的 'touch'可以写保护文件?

android - 如何防止其他应用程序定义相同的权限名称

php - 调用未定义的函数imagewebp(Dockerfile,php,gd,webp)