Apache 无法写入文件

Apache Unable to Write to File

我在 VirtualBox 上使用 Fedora 24 来托管一个小型 PHP 网络应用程序。我正在尝试将文本附加到与 PHP 文件 (/var/www/html/) 位于同一本地目录中的文件中。无论我尝试在目录 (html/) 或文件上设置何种权限或所有权,我都会不断收到 "Permission denied in /var/www/html/pdf.php on line 21" 错误。

我的 php.ini 文件中是否有任何配置设置需要启用才能允许编辑文件?我什至尝试将目录和文件设置为 chmod 777 只是为了看看它是否会给我访问权限,但即使这样也被拒绝了。

编辑:我也尝试在其他位置创建目录和文件,结果相同。我尝试让 Apache 运行 mkdir 和 touch 命令具有相同的结果。

编辑 2:应评论的要求留给我最初的问题。以下是目标目录的所有权信息: ls -l /var/www/html/ drwxrwxr-x。 2 apache apache 4096 11 月 23 日 21:28 文档

文件的所有权信息: -rwxrwxr-x。 1 个 apache apache 1381 11 月 28 日 17:47 pdf.php

尝试分配给 www-data:nobody

chown -R www-data:nobody *,检查您 httpd.conf 上的 apache 组。

验证 /var/html 权限至少为 775。

花了很多时间寻找这个答案,但它都是零碎的,没有人每个人都发布解决方案(大部分时间)所以这是我的解决方案,它也用于各种网络控制面板.

安装和使用MOD_RUID2

使用 CLI 安装 PHP(这是较新版本的标准配置)

在虚拟主机的 HTTPD.CONF 文件中,您将添加以下内容,将 username 替换为用户的登录名,将 usergroup 替换为用户所在的组(这些通常相同)

<IfModule !mod_ruid2.c>
    SuexecUserGroup username usergroup
</IfModule>
<IfModule mod_ruid2.c>
    RMode config
    RUidGid username usergroup
    RGroups @none
</IfModule>

虚拟主机 conf 的示例是:

<VirtualHost *:443>
  DocumentRoot "/home/imtheuser/public_html"
  ServerName imtheuser.com
  <IfModule !mod_ruid2.c>
    SuexecUserGroup imtheuser imtheuser
  </IfModule>
  <IfModule mod_ruid2.c>
    RMode config
    RUidGid imtheuser imtheuser
    RGroups @none
  </IfModule>
  <Directory "/home/imtheuser/public_html">
    allow from all
    Options None
    Require all granted
  </Directory> 
</VirtualHost>

这将允许 apache/php 写入用户拥有的目录。将 chmod 设置为 0777 会更安全。