代码之家  ›  专栏  ›  技术社区  ›  Jonathon

Laravel 5:mkdir/Filesystem::makeDirectory,具有来自配置的权限

  •  2
  • Jonathon  · 技术社区  · 11 年前

    我今天早上遇到了一个问题 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') 该模式被视为十进制而非八进制。因此,对config的调用可能会返回 775 而不是 0775 .

    如果我取消对的呼叫 config ,将使用正确的权限创建目录:

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

    是否有人知道如何在仍然能够将我的权限存储在配置文件中的情况下解决此问题?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Anatoliy Arkhipov    11 年前

    它不起作用,因为权限应该是八进制,而不是十进制。键入时 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