PHP file_put_contents返回'权限被拒绝'
我知道这是一个常见问题,但我没有能够针对我的具体用例单独解决问题,所以请耐心等待。PHP file_put_contents返回'权限被拒绝'
我有一个简单的PHP脚本send_id
,它只是发送一个ID号码并将其保存到运行Apache 2.4.6的RHEL服务器上的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";
?>
chmodding 777没有做任何事情。此外,我查看了所有权权限,并注意到id.txt文件在用户/组级别由root用户拥有,并且PHP正在根级别运行。
任何人有任何建议吗?如果有任何帮助,这似乎发生在yum update
我通过简单地在我的困扰PHP脚本住在目录中运行chcon -Rt httpd_sys_content_rw_t
解决这个问题。
尝试更改文件夹和文件的所有者到(chown
)到“www-data”或“www-data:www-data”并查看如果它改变了什么...
不好,很遗憾没有做任何事情 –
使用来自Apache的“文档根目录”来引用文件相对文件路径PHP。这是Apache的权限很重要,出于安全原因,它被编码为禁止访问DOCUMENT_ROOT之外的文件..(是的,即使您的路径在它内部导致,只要它看到路径以“/ VAR”开头就会被阻止。 。
假设这个PHP脚本是在同一目录id.txt文件,只是使用
$file = file_put_contents('./id.txt', $str...
或者,如果txt文件是在一个子目录
file_put_contents('./sub-dir/id.txt', $str...
不仅是它很安全,键入的时间也缩短了很多。
“一旦它看到路径以/ VAR开头,Apache就会被阻止”这是一堆废话。 – miken32
起初是'./id.txt',但仍然导致问题。我的解决方案已经解决了这个问题 –
是的,+1不只是禁用SELinux! – miken32
好吧...虽然这将工作,不能推荐..请参阅我的回答 –
Aaaaand这是什么做的到底是什么? – TerranRich