创建目录时设置文件权限

Set File permission when creating directory

我有一个将文件存储到目录中的脚本。该函数根据当前日期(2018>March>week1、2、3 等)每 7 天创建一个新目录。它工作得非常好,但我需要将目录权限设置为 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。这可能不是最好的方法:插入 [$mode] 它无法完全创建目录,但是如果我从 mkdir($filepath.... =11=]

存储文件夹应该可以被 apache 写入。

您可以将权限设置为 777 或将文件夹所有权转让给 apache。即,chown 到 apache 用户

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

你应该使用 shell_exec php 函数:

shell_exec('chmod -R 777 storage/');
shell_exec('chown -R www-data:www-data storage/');
mkdir($filepath[$mode] . $year);

这与您认为的不同。它从 $filepath 获取索引 $mode 处的字符,将 $year 附加到它,并在结果处创建一个目录(没有明确设置权限)。由于 $filepath 中没有 512 个字符(0777 是八进制的 511),$filepath[$mode] returns 一个空字符串(带有 "Uninitialized string offset" 通知)和mkdir 尝试在 $year.

创建一个目录

mkdir 有多个参数,第二个参数是模式:

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

但是mkdir's default mode is 0777, so if the directory permissions end up being different, your umask is getting in the way. You can set your umask to allow 0777 permissions, but it's easier and (possibly) safer to chmod创建后的目录:

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