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 会更安全。
我在 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 会更安全。