【问题标题】:PHP can't write filesPHP 无法写入文件
【发布时间】:2014-10-07 17:07:52
【问题描述】:

我在 CentOS 上有一个 Apache HTTP 服务器,我安装了 PHP (yum install php),然后测试了一个将文本写入文件的简单脚本,所以我这样做了

$file = fopen($filename,"w") or die("Failure"); 

问题是它总是失败,即使我在那个目录中做了chown apache:apache /var/www/html/* 或chmod 777 *,所以有人知道如何理解/解决这个问题吗?

编辑:所以问题是目录本身没有 chown

【问题讨论】:

  • 您可以尝试在目录中创建一个文件吗?这应该可以区分它是权限问题还是编码问题..
  • #1 包含您的代码。 #2 你考虑过 SELinux 了吗?
  • 您是在该目录还是/var/www/html/ 的子目录中创建文件并运行脚本?
  • 使用-R 选项与chmod 和chown 递归应用模组。然而,777 是您可以设置的最差的 chmod。在文件上使用更体面的640,在目录上使用750。
  • 如果你只在“那个目录”做了一个chmod,问题很可能是“那个目录”没有写权限。因此,如果您正在写信给/var/www/html/ 并失败,请检查/var/www/html/ 的权限。仅当文件已存在时,更改目录中文件的权限才会有所帮助。更改您正在写入的目录的权限将允许您创建一个新文件。

标签: php apache file centos


【解决方案1】:

如果没有来自 PHP 的实际错误消息,很难说它是什么。

看看这个页面:

http://www.w3schools.com/php/php_error.asp

长话短说,创建并设置自定义错误处理程序,如下所示:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
$file = fopen($filename,"w")
?>

在您的情况下,我认为为了使其能够在给定目录中创建新文件,您需要向 chmod 或 chown 添加一个“-R”标志并在目录本身上调用它而不是孩子——这样,如果 PHP 必须创建文件,它就有权限这样做。

编辑:只是好奇为什么这会被否决——什么是“非常草率、不费吹灰之力的帖子,或者一个明显不正确且可能危险地不正确的答案。”?我告诉 OP 检查错误消息并以适当的递归方式设置它们的权限。

【讨论】:

    【解决方案2】:

    将 w 模式更改为 w+ - 如果文件不存在,它将允许 php 创建文件。

    $file = fopen($filename,"w+") or die("Failure");
    

    【讨论】:

    • PHP 将尝试在 w 模式下创建它。 w 和 w+ 的区别在于 w+ 对读写都是开放的。
    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 2021-10-11
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多