PHP file_put_contents 返回 'Permission Denied' (由于 SELinux 设置)
PHP file_put_contents returning 'Permission Denied' (Due to SELinux setting)
我知道这是一个常见问题,但我无法针对我的特定用例找出问题,所以请耐心等待。
我有一个简单的 PHP 脚本 send_id
,它只是发送一个 ID 号并将其保存到我的 RHEL 服务器 运行ning Apache 2.4.6 上的一个 TXT 文件中 PHP 5.4。
错误信息:Warning: file_put_contents(/var/www/html/id.txt): failed to open stream: Permission denied in /var/www/html/send_id.php on line 6
'1' written to server
PHP 脚本本身:
<?php
$id=$_GET['id'];
$stringData = "$id";
$file = file_put_contents('/var/www/html/id.txt', $stringData.PHP_EOL , FILE_APPEND |LOCK_EX);
echo "'$stringData' written to server";
?>
更改为 777 没有任何作用。此外,我检查了所有权并注意到 id.txt 文件在 user/group 级别都由 root 用户拥有,而 PHP 在 root 级别为 运行。
有人有什么建议吗?如果它有任何帮助,这似乎是在 yum update
之后发生的
尝试将文件夹和文件的所有者更改为 (chown
) 至 "www-data" 或 "www-data:www-data",看看它是否改变了什么...
我通过简单地 运行 chcon -Rt httpd_sys_content_rw_t
在我有问题的 PHP 脚本所在的目录中解决了这个问题。
补充说明
ls -alZ *
-Z 开关将与大多数实用程序配合使用以显示 SELinux 安全上下文
使用来自 Apache "DOCUMENT ROOT" 的相对文件路径来引用 PHP 中的文件。重要的是 Apache 的权限,出于安全原因,它被编码为禁止访问 DOCUMENT_ROOT.. 之外的文件(是的,即使您的路径在其中,Apache 一旦看到路径以“ /VAR" ..
假设此 PHP 脚本与 id.txt 文件位于同一目录中,只需使用
$file = file_put_contents('./id.txt', $str...
或者如果 txt 文件位于 sub-directory
file_put_contents('./sub-dir/id.txt', $str...
它不仅安全,而且输入起来也更短。
我知道这是一个常见问题,但我无法针对我的特定用例找出问题,所以请耐心等待。
我有一个简单的 PHP 脚本 send_id
,它只是发送一个 ID 号并将其保存到我的 RHEL 服务器 运行ning Apache 2.4.6 上的一个 TXT 文件中 PHP 5.4。
错误信息:Warning: file_put_contents(/var/www/html/id.txt): failed to open stream: Permission denied in /var/www/html/send_id.php on line 6
'1' written to server
PHP 脚本本身:
<?php
$id=$_GET['id'];
$stringData = "$id";
$file = file_put_contents('/var/www/html/id.txt', $stringData.PHP_EOL , FILE_APPEND |LOCK_EX);
echo "'$stringData' written to server";
?>
更改为 777 没有任何作用。此外,我检查了所有权并注意到 id.txt 文件在 user/group 级别都由 root 用户拥有,而 PHP 在 root 级别为 运行。
有人有什么建议吗?如果它有任何帮助,这似乎是在 yum update
尝试将文件夹和文件的所有者更改为 (chown
) 至 "www-data" 或 "www-data:www-data",看看它是否改变了什么...
我通过简单地 运行 chcon -Rt httpd_sys_content_rw_t
在我有问题的 PHP 脚本所在的目录中解决了这个问题。
补充说明
ls -alZ *
-Z 开关将与大多数实用程序配合使用以显示 SELinux 安全上下文
使用来自 Apache "DOCUMENT ROOT" 的相对文件路径来引用 PHP 中的文件。重要的是 Apache 的权限,出于安全原因,它被编码为禁止访问 DOCUMENT_ROOT.. 之外的文件(是的,即使您的路径在其中,Apache 一旦看到路径以“ /VAR" ..
假设此 PHP 脚本与 id.txt 文件位于同一目录中,只需使用
$file = file_put_contents('./id.txt', $str...
或者如果 txt 文件位于 sub-directory
file_put_contents('./sub-dir/id.txt', $str...
它不仅安全,而且输入起来也更短。