fopen создает файлы, принадлежащие пользователю root в php - PullRequest
0 голосов
/ 01 декабря 2018

Я пишу код для преобразования комментариев 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 голосов
/ 01 декабря 2018

Не знаю почему, и я хотел бы знать, но это решает проблему:

Я использую это:

chmod($dir, 0775);

вместо:

* 1007Каталог *

не был исполняемым для других, и при создании он создавал файлы в этом каталоге, принадлежащие пользователю root.Очень странно.

...