我正在尝试从我的PHP应用程序为我的网站创建XML站点地图。我们的想法是创建一个新文件或覆盖现有文件。当我打电话给fopen时,我收到以下错误:
[function.fopen]: failed to open stream: Permission denied
我正在尝试写入webroot,其权限是:755。这意味着所有者拥有写入权限,对吧?我需要做什么才能使我的脚本能够写入此文件夹? 777会是一件坏事,对吗?我可以以某种方式运行我的脚本作为所有者吗?
感谢。
答案 0 :(得分:5)
是的,正如你所说,使用777可能是一个巨大的错误。 Web服务器不会与您用于创建文件和文件夹的用户一起运行。
你有一些选择:
302 Redirect
或符号链接。在这种情况下,如果您遇到安全问题让某人编写您的sitemap.xml
,至少他们将无法创建具有更危险扩展名的其他文件(如PHP,这可能会导致网站入侵) )。答案 1 :(得分:5)
我是初学者,我也有这个问题。我正在使用Ubuntu linux w / php和apache
<?php exec('whoami'); ?>
并在您的服务器上运行它。这将告诉您脚本的当前用户是sudo apachectl restart
您需要的主要命令是:
答案 2 :(得分:1)
如果您在webroot分区上启用了ACL,则只授予Web服务器用户名完整权限
setfacl -m u:apache:rwx /var/www/html
将apache
替换为Web服务器用户名,将/var/www/html
替换为您的webroot位置。
答案 3 :(得分:1)
有同样的问题
看起来apache在nobody组
中以 nobody 的形式运行所以如果你做了
useradd -G nobody youruser
chown -R youruser:nobody .
然后将权限更改为0775
chmod -R 0775 .
或者您可以向用户组添加任何人
useradd -G nobody yourgroup
这是一个更好的解决方案
答案 4 :(得分:0)
777很正常,因为PHP不会像你一样运行,它以PHP用户,Apache等运行。事实上,你的webhost应该拥有更高的权限集,阻止其他用户编写/删除你的文件
答案 5 :(得分:0)
是否可以启用组写(即775)? 检查您的组权限以查找该文件所在的目录。只要您的PHP用户(通常是www-data)属于该组,并且它是唯一的用户,您就可以使用775(甚至是774)。
答案 6 :(得分:0)
<?php exec'whoami'; ?>
然后
useradd -G username username2
chown -R username:username2 .
chmod -R 0775 .
它完成了! 谢谢Pascal!