【问题标题】:Why does my server keep creating new files with 0640 permissions in my PHP fwrite?为什么我的服务器在我的 PHP fwrite 中不断创建具有 0640 权限的新文件?
【发布时间】:2010-09-29 17:03:43
【问题描述】:

我正在使用简单的fopen("w")fwrite 设置在我的服务器上写入一个新文件。最近,这一直在给这些文件任意分配0640权限,这意味着我无法从浏览器中查看它们。但这并不是每次都发生。谁能告诉我为什么?我在这里缺少什么?这是我的代码:

if ($file=fopen("$filesDir/$yr/$mo/{$tempFile[0]}.xml","wb")) {
    if(fwrite($file,$output,strlen($output))) {
        $success="YES";
        $message="File successfully built.";
    } else {
        $message="Could not write XML file.";
    }
} else {
    $message="Could not open file.";
}

【问题讨论】:

  • 第一次写入后您是否尝试使用 PHP 手动更改 chmod?在您的代码中,您使用fopen("wb") 而不仅仅是w,这正常吗? php.net/manual/fr/function.chmod.php
  • 我可以在我第一次编写它之后进行 chmod,但奇怪的是它并非每次都发生,而且直到最近它根本没有发生。有些文件将立即可读,644,而同一文件夹中的其他文件则不是。
  • 据我了解,wb 应该(从您链接到的同一站点收集)将 $output 单独保留为二进制文件,而不是尝试使其成为某种类型的文本。 $output 是 UTF-8,所以我认为这是最简单的方法。

标签: php permissions fopen chmod fwrite


【解决方案1】:

我冒昧地猜测它可能与 umask 或您在其中创建文件的目录的当前权限有关。尝试将粘性组添加到目录并保留组 www-data 或 apache (取决于您的安装)

【讨论】:

  • 这是否会导致文件看似​​随机地拥有不同的权限,尽管它们位于同一个文件夹中?
  • 为什么将它们设置为看起来不同的权限我无法理解,但如果你给它一些东西,我认为它不再是随机的了。
  • 好的,那么……哈哈,这听起来可能很傻,但我该怎么做呢?
  • 自从我这样做以来已经有一段时间了,可能是错的,但是,试试这个 find ./nameofdir -type d -exec sudo chmod g+s {} \; sudo chgrp -R www-data nameofdir
  • 我用我的目录而不是 nameofdir 逐字尝试,它只是说无效命令。我只是通过 OSX 的终端来做这个......而且我不完全确定这些东西是什么意思。我的意思是我知道 chmod,而且我以前见过 sudo,但仅此而已。
【解决方案2】:

默认情况下它会这样做,因为 PHP 假定您将再次读取该文件。或者,在这种情况下写入它。您也许可以更改 php.ini 文件中的默认设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2012-05-20
    • 2011-01-15
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多