我在 rackspace 云上有一个服务器...Fedora 13,我安装了 apache 和 mysql。
现在,我有一段代码(PHP),我的 Web 应用程序经常使用它。它在运行 XAMPP 的本地机器上运行良好,但当我将此代码上传到 Rackspace 服务器上时,它却无法运行:
$myFile = "textfile.txt";
$fh = fopen($myFile, 'w') or die("cant open");
$stringData = "CONTENT";
fwrite($fh, $stringData);
fclose($fh);
非常简单的 PHP 代码应该可以正常工作。但是,它不会创建文件,如果我自己上传 textfile.txt 文件,并将权限设置为 0666,那么它会编辑该文件。但是,这并不理想,因为它仍然不会创建新文件(或目录),并且手动更改每个文件的权限是不可行的。
文件的所有者是root,文件组是root
我该如何让它工作?
更新 - 已修复
我将所有者更改为 apache:apache 执行以下操作:chown -R apache:apache /var/www/html
似乎有效:)
这样做是否存在安全问题,或者拥有用户 apache 和组 apache 可以吗?
谢谢!
答案1
授予 apache 用户对整个 DocRoot 的写入权限并不理想。我通常会进行一些不同的配置。
首先,我确定文件将被写入的位置 - 可以是在 DocRoot 中,也可以是在 apache 中使用 Alias 配置引入的单独位置。
我创建一个组(通常称为 www-pub)并将 apache 用户添加到其中。
然后我就这么做了
chown root:www-pub <directory>
和
chmod g+rwxs <directory>
它设置了 setgid 位,这意味着在顶部创建的任何文件或目录都将具有与父目录相同的组,并且可以由该组写入(和读取)。
这样,您就限制了 apache 用户可以访问的位置和内容,但仍然只允许在该区域创建文件等等。
答案2
放置一个 info.php。
echo -e "<?php \nphpinfo(); \n?>" > info.php
具有适当的所有权。然后在此处更新,以便我可以检查是否display_errors
处于开启状态。
或者简单转动ON
display_errors
它就会帮助您排除故障。