Установить разрешение на файл при создании каталога

У меня есть скрипт, который хранит файлы в каталоге. Функция создает новый каталог каждые 7 дней на основе текущей даты (2018> март> неделя 1,2,3 и т. Д.). Это работает фантастически, но мне нужно установить права доступа к каталогу 777, иначе я столкнусь с проблемами. Смотрите код ниже.

static function initStorageFileDirectory() {
$filepath = 'storage/';

$year  = date('Y');
$month = date('F');
$day   = date('j');
$week  = '';
$mode = 0777;

if (!is_dir($filepath . $year)) {
//create new folder
mkdir($filepath[$mode] . $year);
}

if (!is_dir($filepath . $year . "/" . $month)) {
//create new folder
mkdir($filepath[$mode] . "$year/$month");
}

if ($day > 0 && $day <= 7)
$week = 'week1';
elseif ($day > 7 && $day <= 14)
$week = 'week2';
elseif ($day > 14 && $day <= 21)
$week = 'week3';
elseif ($day > 21 && $day <= 28)
$week = 'week4';
else
$week = 'week5';

if (!is_dir($filepath . $year . "/" . $month . "/" . $week)) {
//create new folder
mkdir($filepath[$mode] . "$year/$month/$week");
}

$filepath = $filepath . $year . "/" . $month . "/" . $week . "/";

return $filepath;
}

Как видите, я установил режим $. Вероятно, это не лучший способ сделать это: со вставленным [$ mode] он не может создать каталог вообще, но если я удаляю этот бит кода из mkdir ($ filepath …., он отлично работает.

0

Решение

mkdir($filepath[$mode] . $year);

Это не делает то, что вы думаете, что делает. Он принимает символ по индексу $mode от $filepath, добавляет $year к нему и создает каталог в результате (без явной установки разрешений). поскольку $filepath не содержит 512 символов (0777 511 в восьмеричном), $filepath[$mode] возвращает пустую строку (с уведомлением «Смещение неинициализированной строки») и mkdir пытается создать каталог в $year,

mkdir принимает несколько аргументов, вторым из которых является режим:

mkdir($filepath . $year, $mode);

Но mkdirрежим по умолчанию 0777, так что, если права доступа к каталогу будут другими, ваш umask мешает. Вы можете установить свой umask позволять 0777 разрешений, но это проще и (возможно) безопаснее chmod каталог после его создания:

mkdir($filepath . $year);
chmod($filepath . $year, $mode);
1

Другие решения

Папка хранения должна быть доступна для записи Apache.

Либо вы можете установить разрешение 777, либо передать владение папкой в ​​apache. то есть, чо для пользователя apache

в ubuntu chown -R www-data: www-data storage /

0

Вы должны использовать shell_exec функция php:

shell_exec('chmod -R 777 storage/');
shell_exec('chown -R www-data:www-data storage/');
0
По вопросам рекламы [email protected]