RHEL + PHP:写入/ var / www / html之外的文件?

我试图打开一个文件进行读/写。 我一直在Ubuntu上开发,并没有任何问题。 现在是部署到RHEL服务器的时候了,我发现似乎对要写入的文件的位置有某种限制。

在RHEL上,除非在/ var / www / html下,否则无法打开文件。 我无法弄清楚如何让其他地点。 由于磁盘空间pipe理的原因,我需要处理不同卷上的文件。

以下是在Ubuntu上无论如何都能正常工作的代码,但如果文件位于Web根目录之外,则会在RHEL上中断:

$repometa = fopen( "/path/to/file/it/does/exist/and/has/good/perms", "r+b"); 

实际的错误如下,这很奇怪,因为权限很好(由“apache”用户拥有,0644烫发文件上,755在目录上)。

 fopen(<thefile>): failed to open stream: Permission denied 

有人可以指向我的文档描述如何不破坏RHEL的Apache / PHPconfiguration,以允许写入文件系统上的备用位置?

谢谢,〜保罗

正如在httpd_selinux(8)手册页中所写的httpd_selinux(8) ,如果您希望能够读取或写入文件,则必须为文件和目录提供特定的文件上下文。 有关详细信息,请参阅手册页,请记住,PHP脚本作为守护程序运行,除非您已专门将PHP设置为以CGI方式运行。

为了给接受的答案添加一些细节,我也有这个确切的问题,这个命令修复了我。

 chcon -R -t httpd_sys_content_t /path/to/file/it/does/exist/and/has/good/perms 

听起来像一个用户和/或组权限问题。 文件本身可能是可写的(正如你在你的好路径名中提到的那样),但也许apache用户(或者标题)不允许在默认的/ var / www / html目录?

任何方式来更改/ var / www / html中的文件,然后让另一个shell脚本(和/或用户)从那里把它移动到你想要的目录?

有趣的是,它可以在Ubuntu而不是RHEL上运行; 也许RHEL对用户和团队来说更严格?

另外:一般来说,不要让PHP写入www目录以外的文件可能会更安全。:)

编辑

在@伊格纳西奥的提示(1),也许这样的事情可能会工作: http : //us2.php.net/manual/en/function.fopen.php#56551

如果这是你一直需要的东西,你可能要尝试在命令行上输入:

 /usr/sbin/setsebool -P httpd_can_network_connect=1 

我仍然要小心www文件夹以外的PHP文件操作…但是,希望有帮助…!

(1) http://linux.die.net/man/8/httpd_selinux