如何为目录提供PHP写入权限?

Lea*_*don 66 php file-permissions chmod

我正在尝试使用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(单独的行),所以它看起来好像它认为它写了一些东西,但testfile.txt是空白的(我上传了一个空白的),或者不存在(如果我删除它).

编辑3:服务器运行CentOS.

fav*_*avo 54

一个非常简单的方法是让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');
Run Code Online (Sandbox Code Playgroud)

这可以节省您的权限麻烦.

  • 我在制作目录时获得了许可被拒绝! (7认同)
  • 这是最简单的解决方案,尽管您不应该在apache上使用777,因为它被配置为阻止该文件. (6认同)
  • 那就对了.您可以修改权限以满足您的需求. (2认同)

Tho*_*nes 33

将目录的所有者设置为运行apache的用户.Linux上经常没有人

chown nobody:nobody <dirname>
Run Code Online (Sandbox Code Playgroud)

这样你的文件夹将不是世界可写的,但仍然可写为apache :)

  • @BrandonMinton'chown www-data:www-data <dirname>'应该这样做.www-data是基于debian的系统上的apache用户 (14认同)
  • 如果您使用Ubuntu,则此用户和组不存在.有什么建议可以完成你在这里做的事吗? (5认同)

Gra*_*ler 12

简单的三步解决方案

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


第1步:确定PHP用户

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

<?php echo `whoami`; ?>
Run Code Online (Sandbox Code Playgroud)

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

www-data
Run Code Online (Sandbox Code Playgroud)

因此,PHP用户是www-data.


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

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

ls -dl /var/www/example.com/public_html/example-folder
Run Code Online (Sandbox Code Playgroud)

结果应类似于以下内容:

drwxrwxr-x 2 exampleuser1 exampleuser2 4096 Mar 29 16:34 example-folder
Run Code Online (Sandbox Code Playgroud)

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


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

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

sudo chown -R www-data /var/www/example.com/public_html/example-folder
Run Code Online (Sandbox Code Playgroud)

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

ls -dl /var/www/example.com/public_html/example-folder
Run Code Online (Sandbox Code Playgroud)

结果应类似于以下内容:

drwxrwxr-x 2 www-data exampleuser2 4096 Mar 29 16:34 example-folder
Run Code Online (Sandbox Code Playgroud)

因此,example-folder已成功将所有者更改为PHP用户:www-data.


完成!PHP现在应该能够写入目录.

  • 这里完全是OT,但没有其他方法可以对您执行ping操作:感谢您在Coffee SE上的辛勤标记工作! (2认同)

sow*_*rov 8

1st使用以下命令确定哪个用户拥有httpd进程

ps aux | grep httpd
Run Code Online (Sandbox Code Playgroud)

你会得到这样的几行响应:

phpuser   17121  0.0  0.2 414060  7928 ?        SN   03:49   0:00 /usr/sbin/httpd
Run Code Online (Sandbox Code Playgroud)

这里第1列显示用户名.所以现在你知道正在尝试编写文件的用户,在这种情况下,phpuser 您现在可以继续设置php脚本尝试编写内容的目录的权限:

sudo chown phpuser:phpuser PhpCanWriteHere
sudo chmod 755 PhpCanWriteHere
Run Code Online (Sandbox Code Playgroud)