1

我的笔记本电脑上有一个运行 XAMPP 的虚拟 Arch Linux 测试服务器,即使权限设置为 777,我也无法使用 php 创建新文件。代码如下:

$CompleteFilepath = $AFilepath . '/filepath/filename.php';
$FileHandle = fopen($CompleteFilepath, 'c')
    or
die ("cannot be opened for writing"); // Debug

之后显然还有更多代码,但这无关紧要,因为它总是死在这里。我无法通过修改所有者和组设置来使其工作,所以我最终求助于将所有内容(主根文件夹除外)递归设置为 777,它仍然无法工作。但是该文件夹不是直接在根目录中创建的,所以没关系,对吧?

编辑:我仍然不确定我做错了什么,但是今天我将所有者设置为服务器并且它起作用了。我以为我已经尝试过了,但也许没有。至少我可以继续开发,即使我最终需要更安全地配置我的生产服务器。

4

4 回答 4

3

我在全新安装 CentOS 7 时遇到了类似的问题。事实证明,它默认安装了 SELinux,这会阻止所有 PHP 写入,即使目录权限正确也是如此。

测试是否安装了 SELinux:sestatus

将 SELinux 置于许可模式:setenforce 0

于 2015-11-20T12:58:32.643 回答
0

什么 php 版本正在运行,afaik 选项“c”仅适用于 php 5.2.6 及更高版本。

或简称:确实

$FileHandle = fopen($CompleteFilepath, 'w');

工作?

于 2013-02-13T01:59:21.090 回答
0

好吧,我将所有者设置为服务器,现在它可以工作了。我以为我已经尝试过了,但显然没有。仍然不确定我到底做错了什么,但至少现在它可以工作了,所以我可以继续开发。

于 2013-03-11T04:50:13.367 回答
0

PHP 有一个名为open_basedir的指令,它允许限制对文件系统的访问到指定的目录树。

例如,如果您有php.ini

open_basedir = /srv/http/:/home/:/tmp/

您将访问该文件/filepath/filename.php,然后您必须设置:

open_basedir = /srv/http/:/home/:/tmp/:/filepath/

否则 PHP 将无法访问该文件。

这样一来,这台机器上运行的所有PHP 代码都可以访问/filepath/ 目录树,因此对于生产环境来说是不安全的。更好的方法是设置基于open_basedir. httpd.conf我让你检查你的 HTTP 服务器文档和open_basedir文档。

于 2013-04-24T07:11:54.560 回答