我知道这是一个常见的问题,但我还没能为我的具体用例挑出问题,所以请耐心等待。
我有一个简单的PHP脚本send_id
,只需发送一个ID号并将其保存到运行Apache 2.4.6和PHP 5.4的RHEL服务器上的TXT文件中。
错误消息: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";
?>
chmodding到777没有做任何事情。此外,我检查了所有权,并注意到id.txt文件由root用户在用户/组级别拥有,而PHP正在根级别运行。
有人有什么建议吗?如果有任何帮助,这似乎发生在yum update
答案 0 :(得分:1)
我通过在我遇到问题的PHP脚本所在的目录上运行chcon -Rt httpd_sys_content_rw_t
来解决这个问题。
附加说明
ls -alZ *
-Z开关可与大多数实用程序一起显示SELinux安全上下文
答案 1 :(得分:-1)
尝试将文件夹和文件的所有者更改为(chown
)到“www-data”或“www-data:www-data”,看看它是否有任何改变......
答案 2 :(得分:-1)
使用来自Apache&#34; DOCUMENT ROOT&#34;的相对文件路径。在PHP中引用文件。它的Apache权限很重要,出于安全考虑,它被编码为禁止访问DOCUMENT_ROOT之外的文件..(是的,即使你的路径在其中引导,Apache也会在看到它时立即被阻止路径以&#34; / VAR&#34; ..
开头假设此PHP脚本与id.txt文件位于同一目录中,请使用
$file = file_put_contents('./id.txt', $str...
或者txt文件是否在子目录中
file_put_contents('./sub-dir/id.txt', $str...
不仅安全,而且输入也要短得多。