fopen在php中创建root拥有的文件

时间:2018-12-01 16:01:31

标签: php file-permissions

我正在编写将disqus注释转换为HashOver系统的代码,并且我有这样的代码:

// $threads is list of threads from disqus api that I cached on disk
foreach ($threads as $thread) {
    $dir_name = getSafeThreadName(preg_replace("%^https?://[^/]+%", "", $thread['link']));
    $dir = 'threads/' . $dir_name;
    if (!is_dir($dir)) {
        mkdir($dir);
        chmod($dir, 0774);
    }
    // ...
    // $thread_posts are $post that belong to $thread
    foreach($thread_posts as $post) {
        $xml = new SimpleXMLElement('<comment/>');
        // ...
        // $name_arr is array of numbers for HashOver comments
        $fname = $dir . '/' . implode('-', $name_arr) . ".xml";
        $f = fopen($fname, 'w');
        fwrite($f, $xml->asXML());
        fclose($f);
        chmod($fname, 0664);
    }
}

它为我的线程中的每个帖子创建了一个目录,该目录由所有者apache:apache进行读写,并且里面有诸如1.xml这样的文件,所有者为root:root

为什么root:root?我怎样才能做到apache:apache

编辑:

这不是重复项,我不想将权限从apache:apache更改为root:root,可以使用chown完成,但是我想这样做首先不要将其更改为root:root,我也想知道为什么将其更改为root:root。这对我来说似乎是php或apache中的错误,或者对我而言apache中的某些错误配置。我不认为这是代码,因为它只是打开,写入和关闭文件。

1 个答案:

答案 0 :(得分:0)

不知道为什么,我想知道,但这可以解决问题:

我已经使用过:

chmod($dir, 0775);

代替:

chmod($dir, 0774);

目录对于其他目录不可执行,并且在创建时将创建该目录中的文件,并由root拥有。很奇怪。