function.fopen:无法打开流:PHP中的权限被拒绝

Sta*_*bie 5 php linux permissions file-permissions

我正在尝试从我的PHP应用程序为我的网站创建XML站点地图.我们的想法是创建一个新文件或覆盖现有文件.当我调用fopen时,我收到以下错误:

[function.fopen]: failed to open stream: Permission denied
Run Code Online (Sandbox Code Playgroud)

我正在尝试写入webroot,其权限是:755.这意味着所有者拥有写入权限,对吧?我需要做什么才能使我的脚本能够写入此文件夹?777会是一件坏事,对吗?我能以某种方式运行我的脚本作为所有者吗?

谢谢.

Gon*_*lde 5

是的,正如你所说,使用777可能是一个巨大的错误.Web服务器不会与您用于创建文件和文件夹的用户一起运行.

你有一些选择:

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

祝好运!


raj*_*cla 5

我是初学者,我也有这个问题.我正在使用Ubuntu linux w/php和apache

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

您需要的主要命令是: