2017-02-16 118 views
1

我知道这是一个常见问题,但我没有能够针对我的具体用例单独解决问题,所以请耐心等待。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

回答

-1

我通过简单地在我的困扰PHP脚本住在目录中运行chcon -Rt httpd_sys_content_rw_t解决这个问题。

+1

是的,+1不只是禁用SELinux! – miken32

+0

好吧...虽然这将工作,不能推荐..请参阅我的回答 –

+0

Aaaaand这是什么做的到底是什么? – TerranRich

-1

尝试更改文件夹和文件的所有者到(chown)到“www-data”或“www-data:www-data”并查看如果它改变了什么...

+0

不好,很遗憾没有做任何事情 –

-1

使用来自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... 

不仅是它很安全,键入的时间也缩短了很多。

+0

“一旦它看到路径以/ VAR开头,Apache就会被阻止”这是一堆废话。 – miken32

+0

起初是'./id.txt',但仍然导致问题。我的解决方案已经解决了这个问题 –