【问题标题】:In PHP on OSX 10.5, fopen = Permission denied在 OSX 10.5 上的 PHP 中,fopen = Permission denied
【发布时间】:2011-08-10 15:49:31
【问题描述】:

我在 OSX 10.5.8 上运行 PHP 和 Apache 的标准安装,我试图打开的文件夹的 CHMOD 设置(订单)是 777,组是 _WWW。

$filename = 'orders/54c9942b.txt';

if (!$handle = fopen($filename, 'w')) {
    return(false);
}

我得到以下信息:

Warning: fopen(orders/54c9942b.txt) [function.fopen]: failed to open stream: Permission denied in /Users/New/Sites/thisisnothere/order-save.php on line 36

*编辑:我在我的网络服务器上测试了它(我付费的,不是我设置的),它按我的预期工作。这让我相信这是我的服务器配置的问题,也许是 Apache 的访问问题?还是 PHP?我对配置 Apache 完全不熟悉。

【问题讨论】:

    标签: php apache macos fopen chmod


    【解决方案1】:

    尝试在 fopen() 命令中使用完整的文件系统路径,看看是否可行。在其他你知道也行得通的地方试试(也许/tmp)。

    【讨论】:

    • 当我尝试写入 /tmp 时它会起作用,这感觉像是进步。但是,完整路径不起作用。
    • 我仔细检查过,我试图写入的文件夹的 CHMOD 并不是 777。哦。感谢您检查写入 /tmp 的提示,它让我知道错误不在 PHP 中!
    【解决方案2】:

    重要的是文件的权限,而不是文件所在的目录。我确定这就是您的问题所在。

    【讨论】:

    • 该文件尚不存在 - 我正在尝试使用 fopen 创建它。这不是我应该如何创建一个新文件吗?
    【解决方案3】:

    “如果您试图让该程序运行并且遇到错误,您可能需要检查您是否已授予您的 PHP 文件访问权限以将信息写入硬盘驱动器”取自 tizag.com 听起来像您正如 Tyler 所说,应该设置 php 文件本身的权限。

    【讨论】:

    • 进行调用的 PHP 文件是 CHMOD 777,这不给它权限吗?所有者是相同的(我的计算机名称),并且组是 _WWW 在 php 文件上。 (与我要写入的文件夹相同)。
    【解决方案4】:

    我为您提供了一个解决方案,但我不是安全专家,因此请仅在您的本地主机上使用此解决方案,并且如果您的数据不敏感,如信用卡号码、医疗信息等。也许这里的其他一些专家对此发表评论.

    如果您直接在控制台上自己调用 php,或者通过本地 Web 服务器调用相同的 php 文件,情况会有所不同。我发现我的 mac (lion) 以用户“localaccounts”的身份通过网络服务器运行 php。

    然后我解决了如下问题:

    第一步:将当前目录的组和需要通过网络服务器修改的文件更改为名为“localaccounts”的组。例如。在终端输入以下命令,将其应用于当前目录、子目录“用户图像”和文件 foo.sqlite。

    chgrp -R localaccounts . foo.sqlite user\ images/
    

    第 2 步:使用逗号授予组成员写入权限

    chmod g+w -R . foo.sqlite user\ images/
    

    注意点表示当前目录。

    我在我的虚拟主机上尝试了同样的事情,但他们不允许这样做。相反,他们建议我使用 PHP CGI。然后将像我的 FTP 用户访问一样执行 PHP。我想这更安全,但我还没有尝试过。

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2018-07-21
      相关资源
      最近更新 更多