我有一个 VPS 在 CentOS 6 上运行,并使用 apache2 作为 Web 服务器。我的服务器上运行着几个 PHP 脚本,除了文件写入之外,一切都很顺利。出于某种原因,我的 PHP 脚本无法写入或创建文件。
/var/www/html/
我正在使用所拥有的默认位置root:root
。
我尝试过临时修改目录和文件的权限,但没有成功。
我还尝试将文件夹权限设置为 777,结果相同 - 没有成功。
这很奇怪,在管理 VPS 方面我还是新手。
我在 php.ini 中添加了 PHP 错误日志行,并告诉它将日志存储在/var/log/
答案1
CentOS 是那些经常安装某种形式的 SELinux 的操作系统之一。关于使用 SELinux 是好事还是浪费,存在一些争论,但这是你必须做出的选择。
如果您还是个初学者,我建议您花一些时间关闭 SELinux,然后在一切运行后,您可以选择启用它并开始重新配置。
注意:现实世界的做事方式是相反的:从一个完全锁定的系统开始,然后逐一启用您需要的东西。
答案2
您永远不应该使用/var/www/html
它来存储文件。它不适用于临时存储。PHP 脚本应该返回生成的 html,而不是将其写入文件。
如果您确实需要在某处存储数据,则应创建一个具有正确权限的新文件夹。在 Linux 上,nobody
用户帐户通常是运行 apache,但也可以是 www-data 或只是 apache。您可以通过以下方式授予 apache 对该文件夹的访问权限:
chown nobody:nobody <dirname>
如果 apache 设置为阻止执行权限为 777(所有人都可写)的文件,那么对文件夹设置过多权限也会导致错误。
使一切正确的一个非常简单的方法是首先让 PHP 本身创建目录:
<?php
$dir = 'path-to-folder/myFolder';
if ( !file_exists($dir) )
mkdir ($dir, 0777);
file_put_contents ($dir.'/test.txt', 'Hello World');