【问题标题】:Httpd file permission on Apache serverApache 服务器上的 Httpd 文件权限
【发布时间】:2012-04-05 21:42:31
【问题描述】:

我一直使用以下代码在 Apache 服务器上创建文件夹,但最近在其中一台服务器上出现权限被拒绝错误。

if(!is_dir('img/user/'.$id))
{
    mkdir('img/user/'.$id, 0777, true);   
    chmod('img/user/'.$id, 0777); 
}

在互联网上,我发现要为httpdneeds to have write permissions 上传目录,如下所示:

drwxrwxrwx   2 user     staff   512 Jan 07 12:32 uploads/

此权限设置在哪里?我不直接访问服务器。有没有其他办法?

【问题讨论】:

  • 您或许可以使用 FTP 设置权限。

标签: php apache file-permissions


【解决方案1】:

PHP 以用户身份运行:www-data 在组中:www-data (Ubuntu) 或其他取决于服务器操作系统的东西。 如果您无法通过 FTP 自行设置,您可以要求您的提供商设置正确的地图/文件访问权限。

【讨论】:

    【解决方案2】:

    如果可以避免的话,你永远不想将权限设置为全局可写,或者甚至是可读的。 0770 将是一个更好的选择,如果仍然有点宽泛。要点是有问题的文件夹需要可由网络服务器用户写入。例如,在许多 webhosts 上,apache 将由用户 nobody 运行,因此更合适的权限如下所示:

    drwxrwx---   2 nobody     nobody   512 Jan 07 12:32 uploads/
    

    现在,如果您无法直接访问设置权限,除非通过 PHP,否则会出现问题,因为某些 Web 主机将不允许您在 PHP 中运行chmod 或其他权限或所有权修改。也就是说,如果您正在使用 cPanel(并且可能其他托管系统也这样做),您可以使用在线文件管理器通过浏览到适当的目录并使用位于页面顶部的 change permissions 来完成您想要的操作.

    因此,最终,您需要满足以下条件:如果您需要能够在特定位置创建目录,则需要确保该位置可由 Web 服务器写入。在您的示例中,这意味着您需要先在img/user 上设置适当的权限,然后再尝试创建img/user/$id。这意味着img/user 必须具有0770 的权限并且必须由nobody:nobody 拥有(用户或组都可以在这种情况下工作,您不需要两者),或者它必须具有0777 的权限.然后,当您创建特定的用户目录时,您可以这样做:

    if(!is_dir('img/user/'.$id))
    {
        mkdir('img/user/'.$id, 0770, true);
    }
    

    ...因为它已经归相应的用户所有,并且您已经拥有对它的写入权限,这仅仅是因为您的网络服务器首先创建了它。

    如果您找不到非 PHP 方法来执行此操作,则必须让您的虚拟主机提供帮助。

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多