【问题标题】:Laravel 5: mkdir/Filesystem::makeDirectory with permissions from configLaravel 5:mkdir/Filesystem::makeDirectory 具有来自配置的权限
【发布时间】:2015-05-11 20:04:48
【问题描述】:

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

$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);

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

【问题讨论】:

  • 试试intval函数:intval('0755', 8)
  • 这似乎工作得很好,谢谢。如果您创建答案,我会接受。

标签: php laravel permissions mkdir


【解决方案1】:

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

【讨论】:

  • 另外,还有一个变种,但我不确定。您是否尝试直接在配置中输入0755 而不是"0755"?我认为这也应该有效
  • 如果您注意到,我的配置文件和 .env 文件中有 0775 等。我设法发现该问题仅在它使用从我的 .env 文件中检索到的值时发生。这些值最终以字符串形式出现,当我将其传递给makeDirectory 时,它最终被转换为整数。如果我从 .env 文件中删除这些值,它就可以工作。
  • 所以是的,回答您的问题,是的,我的配置文件中确实有0775,就像我的问题一样。如果我没有 .env 中的值,那就可以了
  • 啊,是的,是的,它是.env,而不是旧式local/*.php 配置,只是忘了它:)
  • 好答案!,这对你很有帮助,朋友。
猜你喜欢
  • 2016-05-04
  • 2016-12-10
  • 1970-01-01
  • 2015-12-03
  • 2011-09-20
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多