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

时间:2010-05-24 22:10:41

标签: php file-permissions chmod

我正在尝试使用PHP来创建文件,但它无法正常工作。我假设这是因为它没有写访问权限(以前一直是问题)。我试图通过使文件夹chmod 0777来测试这是否是问题,但是刚刚结束使该目录中的每个脚本都返回500错误消息,直到我将其更改回来。 如何为我的文件系统提供PHP写入权限,以便创建文件?

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

编辑2:有人要求代码: 代码是GD图像脚本。我知道其余部分的工作方式与之前我创建的图像一样。现在我尝试在添加新文本时创建它们并将它们保存到文件夹中。我的写行是: imagejpeg(NULL,$文件,85);

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

它返回13,13,1(单独的行),所以它看起来好像它认为它写了一些东西,但testfile.txt是空白的(我上传了一个空白的),或者不存在(如果我删除它) )。

编辑3:服务器运行CentOS。

12 个答案:

答案 0 :(得分:51)

一种简单的方法是让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');

这可以节省您的权限。

答案 1 :(得分:33)

将目录的所有者设置为运行apache的用户。通常没人在linux上

chown nobody:nobody <dirname>

这样你的文件夹就不会是全局可写的了,但仍然可以写入apache:)

答案 2 :(得分:10)

简单的3步解决方案

  

摘要:您需要将目录的所有者设置为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

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

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

答案 3 :(得分:7)

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

ps aux | grep httpd

你会得到这样的几行回复:

phpuser   17121  0.0  0.2 414060  7928 ?        SN   03:49   0:00 /usr/sbin/httpd

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

sudo chown phpuser:phpuser PhpCanWriteHere
sudo chmod 755 PhpCanWriteHere

答案 4 :(得分:3)

您可以使用PHP的chmod()更改文件夹的权限。有关如何使用该命令的更多信息,请访问:http://php.net/manual/en/function.chmod.php

如果在将权限设置为777(全局可写)时出现500错误,则表示您的服务器已设置为阻止执行此类文件。这是出于安全原因。在这种情况下,您将需要使用755作为文件的最高权限。

如果在执行PHP文档的文件夹中生成了error_log文件,则需要查看最后几个条目。这将让您了解脚本失败的位置。

有关PHP文件操作的帮助,我使用http://www.tizag.com/phpT/filewrite.php作为资源。

答案 5 :(得分:2)

我发现使用HostGator你必须将文件设置为CMOD 644和文件夹到755.因为我根据他们的技术支持这样做,它与HostGator一起使用

答案 6 :(得分:2)

您可以将selinux设置为允许分析。

    # setenforce 0

Selinux将登录但允许acesses。因此,您可以查看/var/log/audit/audit.log了解详细信息。也许你需要改变selinux上下文。在此,您将使用chcon命令。如果您需要,请向我们展示您的audit.log更详细的答案。

解决问题后别忘了启用selinux。它更好地保持selinux的强制执行。

    # setenforce 1

答案 7 :(得分:2)

提供对目录的写访问权限的最佳方式..

$dst = "path/to/directory";
mkdir($dst); 
chown($dst, "ownername");
chgrp($dst, "groupname");
exec ("find ".$dst." -type d -exec chmod 0777 {} +");

答案 8 :(得分:1)

chmod不允许您设置文件的所有权。要设置文件的所有权,必须使用chown命令。

答案 9 :(得分:1)

我遇到了同样的问题:

由于我不愿意将0777提供给我的php目录,我创建了一个权限为0777的tmp目录,在那里我创建了我需要写入的文件。

我的php目录继续受到保护。如果有人攻击tmp目录,该网站将继续像往常一样工作。

答案 10 :(得分:0)

我正在运行Ubuntu,如上所述没有人:没有人不在Ubuntu上工作。你得到错误:

page

相反,你应该使用'nogroup',如:

'data-turbolinks': false

答案 11 :(得分:0)

小小的提示!

回声whoami;

确保使用反引号 不是 单引号 ' ' !

(当然现在反引号不会出现在这个编辑器中!哦,好吧,我试过了!)