【问题标题】:mkdir always sets folders to read-only?mkdir 总是将文件夹设置为只读?
【发布时间】:2014-09-26 02:50:57
【问题描述】:

我正在尝试从 php.ini 中创建文件夹。每当我使用权限为 0777 的 mkdir 函数时,我都会得到一个只读文件夹。我希望这个文件夹可以读写。 父文件夹 (drive/) 对每个用户都是完全可写和可读的。

这是我使用的:mkdir(ABSPATH . 'drive/' . $folderName, 0777);

我也尝试在没有任何额外参数的情况下使用它:mkdir(ABSPATH . 'drive/' . $folderName);

任何想法为什么会这样以及如何解决这个问题以便我可以生成具有写访问权限的文件夹?

【问题讨论】:

    标签: php mkdir


    【解决方案1】:

    问题可能是面具:)

    if (!function_exists('mkdir_r')) {
        /**
         * create directory recursively
         * @param $dirName
         * @param int $rights
         * @param string $dir_separator
         * @return bool
         */
        function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) {
            $dirs = explode($dir_separator, $dirName);
            $dir = '';
            $created = false;
            foreach ($dirs as $part) {
                $dir .= $part . $dir_separator;
                if (!is_dir($dir) && strlen($dir) > 0) {
                    $created = mkdir($dir, $rights);
                }
            }
            return $created;
        }
    }
    
    if (!function_exists('ensure_dir')) {
        /**
         * ensure directory exist if not create 
         * @param $dir_path
         * @param int $mode
         * @param bool $use_mask
         * @param int $mask
         * @return bool
         */
        function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) {
            // set new mask 
            $old_mask = $use_mask && $mask != null
                ? umask($mask)
                : null;
            try {
                return is_dir($dir_path) || mkdir_r($dir_path, $mode);
            } finally {
                if ($use_mask && $old_mask != null) {
                    // restore original mask 
                    umask($old_mask);
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      mkdir..这里是代码

      <?php
       $dir = 'myDir';
       // create new directory with 744 permissions if it does not exist yet
       // owner will be the user/group the PHP script is run under
      
       if ( !file_exists($dir) ) {
      mkdir ($dir, 0744);
      }
      
       file_put_contents ($dir.'/test.txt', 'Hello File');
      

      here找到源

      【讨论】:

      • 这与文档一致:php.net/manual/en/function.mkdir.php。请注意,该模式在 Windows 上会被忽略。
      • 在 Windows 上没有像在 UNIX 上那样的真正权限。这就是我的脚本在上传文件然后重新安排内容并与 ffmpeg 交谈时没有任何问题的原因之一,而在 UNIX 上我确实遇到了问题。
      【解决方案3】:

      在共享环境中,mkdir 无法正确设置权限。一种解决方法是在创建目录后将 chmod 设置为 chmod()

      【讨论】:

      • 它有效,谢谢。奇怪的是,在共享环境中,它无法在函数中设置它,但在文件创建和 chmodding 之后,它神奇地具有读写权限..