2015-03-10 2 views
1

У меня сегодня проблема с FileSystem::makeDirectory, которая напрямую вызывает mkdir. Я пытаюсь создать каталог рекурсивно вытягивать нужный режим из моей конфигурации, как так:Laravel 5: mkdir/Filesystem :: makeDirectory с разрешениями из конфигурации

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

конфиг/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); 

Кто-нибудь есть идеи, как обойти эту проблему, пока еще в состоянии сохранить свои права на мой конфигурационный файл ?

+1

Try в 'intval' функции:' intval ('0755', 8) ' –

+0

Это, кажется, работает отлично, спасибо. Я соглашусь, если вы создадите ответ. – Jonathon

ответ

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

+0

Кроме того, еще один вариант, но я не уверен. Вы пытались ввести '0755' вместо' '0755" 'непосредственно в config? Я думаю, что это также должно работать –

+0

Если вы заметили, у меня есть 0775 и т. Д. В моем файле конфигурации и в файле '.env'. Мне удалось обнаружить, что проблема возникает только тогда, когда она использует значения, полученные из моего файла .env. Значения заканчиваются строкой на этом пути, и она заканчивается тем, что бросается в целое число, когда я передаю его в 'makeDirectory'. Если я удалю значения из файла .ENV, он будет работать. – Jonathon

+0

Так что да, в ответ на ваш вопрос, да, у меня буквально есть '0775', в моем файле конфигурации, как в моем вопросе. Это работает, если у меня нет значения в '.env' – Jonathon

Смежные вопросы