如何授予 PHP 对目录的写入权限?简单的三步解决方案

2022-08-30 08:26:34

我正在尝试使用PHP创建文件,但它不起作用。我假设这是因为它没有写入权限(以前一直是问题)。我试图通过使文件夹chmod 0777测试这是否是问题所在,但这最终使该目录中的每个脚本都返回500错误消息,直到我将其更改回去。如何授予PHP对我的文件系统的写入权限,以便它可以创建文件?

编辑:它使用Apache托管在Hostgator共享主机上。

编辑2:有人要求代码:代码是GD图像脚本。我知道它的其余部分的工作原理与以前一样,我每次调用它时都会创建图像。现在,我正在尝试在添加新文本时创建它们并将其保存到文件夹中。我拥有的写行是:imagejpeg(null,$file,85);

我还创建了一个测试文件来检查它是否只是一个损坏的脚本(主要从tizag复制):http://gearboxshow.info/rkr/lesig.jpg/testfile.txt(我不知道是否/如何在这里正确发布代码。下面是 PHP 脚本的内容,减去 PHP 标记。

它返回13,13,1(单独的行),所以看起来好像它写了什么,但是测试文件.txt是空白的(我上传了一个空白的),或者不存在(如果我删除它)。

编辑3:服务器运行CentOS。


答案 1

一个简单的方法是让PHP首先创建目录本身。

<?php
 $dir = 'myDir';

 // create new directory with 744 permissions if it does not exist yet
 // owner will be the user/group the PHP script is run under
 if ( !file_exists($dir) ) {
     mkdir ($dir, 0744);
 }

 file_put_contents ($dir.'/test.txt', 'Hello File');

这为您节省了权限的麻烦。


答案 2

简单的三步解决方案

摘要:您需要将目录的所有者设置为PHP使用的用户(Web服务器用户)。


步骤 1:确定 PHP 用户

创建一个包含以下内容的 PHP 文件:

<?php echo `whoami`; ?>

将其上传到您的网络服务器。输出应类似于以下内容:

www-data

因此,PHP 用户是 。www-data


步骤 2:确定目录的所有者

接下来,通过命令行检查 Web 目录的详细信息:

ls -dl /var/www/example.com/public_html/example-folder

结果应类似于以下内容:

drwxrwxr-x 2 exampleuser1 exampleuser2 4096 Mar 29 16:34 example-folder

因此,目录的所有者是 。exampleuser1


步骤 3:将目录所有者更改为 PHP 用户

然后,将 Web 目录的所有者更改为 PHP 用户:

sudo chown -R www-data /var/www/example.com/public_html/example-folder

验证 Web 目录的所有者是否已更改:

ls -dl /var/www/example.com/public_html/example-folder

结果应类似于以下内容:

drwxrwxr-x 2 www-data exampleuser2 4096 Mar 29 16:34 example-folder

因此,已成功将 的所有者更改为 PHP 用户:。example-folderwww-data


做!PHP 现在应该能够写入目录。


推荐