无法在 CentOS 上写入文件

无法在 CentOS 上写入文件

我有一个 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');

相关内容