function.fopen:未能打开stream:在PHP中的权限被拒绝

我正在尝试从我的PHP应用程序为我的网站创buildXML站点地图。 这个想法是要么创build一个新的文件,要么覆盖现有的文件。 当我打电话时,我得到以下错误:

[function.fopen]: failed to open stream: Permission denied 

我试图写入到webroot,它的权限是:755.这意味着所有者拥有写权限,对吗? 我需要做什么才能让我的脚本能够写入这个文件夹? 777会是一件坏事,对吗? 我可以以某种方式运行我的脚本吗?

谢谢。

Solutions Collecting From Web of "function.fopen:未能打开stream:在PHP中的权限被拒绝"

是的,正如你所说的,使用777可能是一个巨大的错误。 网络服务器不会与您用来创建文件和文件夹的用户相同。

你有一些选择:

  • 以cronjob身份运行站点地图创建,使用有权写入的用户,而不是apache用户。
  • 将站点地图放在另一个目录中,并设置一个302 Redirect或一个符号链接。 在这种情况下,如果你有一个安全问题让别人写你的sitemap.xml ,至少他们将无法创建另一个更危险的扩展文件(如PHP,这可能会导致网站入侵)。
  • 制定一个重写规则,将任何命中重定向到sitemap.xml,以输出适当的XML的PHP​​脚本。

祝你好运!

我是初学者,我也有这个问题。 我正在使用Ubuntu Linux W / PHP和Apache

  • 写一个PHP脚本w /以下内容: <?php exec('whoami'); ?> <?php exec('whoami'); ?>并在您的服务器上运行它。 这告诉你脚本的当前用户是谁
  • SSH到你的服务器。
  • 建立一个对您所需文件具有读写访问权限的组。
  • 使组有读取,写入,并在您需要的文件夹上执行。
  • 使您在第一步中找到的当前用户成为可以访问所需文件的组的一部分。
  • 重启Apache: sudo apachectl restart

你需要的主要命令是:

  • groupadd:创建一个新的组
  • usermod:将你的用户添加到一个新的组
  • chgrp:将文件/文件夹更改为您指定的组
  • chmod:更改您指定的文件/文件夹的权限。 所有您需要的命令在这里: http : //www.yolinux.com/TUTORIAL/LinuxTutorialManagingGroups.html

如果您在webroot分区上启用了ACL,只需授予Web服务器用户名的完整权限即可

 setfacl -mu:apache:rwx /var/www/html 

将Web服务器用户名和/var/www/html替换为您的webroot位置。

有同样的问题

看起来像apache在无人组中像没有人一样运行

所以如果你做一个

 useradd -G nobody youruser chown -R youruser:nobody . 

然后将权限更改为0775

 chmod -R 0775 . 

或者可以将任何人添加到您的用户组

 useradd -G nobody yourgroup 

这是一个更好的解决方案

777是非常正常的,因为PHP不像你一样运行,它运行的是PHP用户,Apache等。事实是,你的虚拟主机应该有一个更高的权限集,以防止其他用户写/删除你的文件。

它启用组写入(即775)吗? 检查你的组文件所在目录的权限。只要你的PHP用户(通常是www-data)是该组的一部分,并且是唯一的用户,你应该可以使用775(甚至774)。

像帕斯卡说的! 只需找到你的Apache用户

 <?php exec'whoami'; ?> 

接着

 useradd -G username username2 chown -R username:username2 . chmod -R 0775 . 

而且完成了! 谢谢帕斯卡!