【问题标题】:PHP file permission issues on live server实时服务器上的 PHP 文件权限问题
【发布时间】:2016-09-05 00:12:34
【问题描述】:

最近,由于权限问题,我移动了一个网站,所有与文件相关的操作都停止工作,例如copyimagecreatefromjpeg 等。

所有文件都在 files/ 目录中创建。我递归地给了它 755 的目录权限和 644 的所有文件权限。 PHP函数仍然不起作用。它只有在我授予 777 权限时才有效(甚至 775 都无效)。

我检查了其他实时项目的权限。他们有 755 个目录和 644 个文件,但它们似乎仍然可以正常工作,没有任何权限问题。

谁能在这个特定的网站上解释一下这个问题的原因?

谢谢

【问题讨论】:

  • 对于您尝试写入的文件夹(复制,imagecreatefromjpeg)需要明确777权限。否则它将不起作用(写入权限问题)。其他文件夹您可以设置为775
  • @BikashP 但是他们怎么会为其他项目工作。我从来不需要为这些设置 777 权限。
  • 您是否检查了这些文件的拥有用户和组?运行网络服务器的用户是所有者还是所属组的成员?
  • 也许在其他项目中文件夹的所有者与执行 php 进程的相同...通常是 www-data
  • 尝试将所有权更改为该用户,即使其名称相同。

标签: php permissions file-permissions


【解决方案1】:

听起来像是所有权问题。

要进行测试,请在服务器上创建一个具有 777 权限的文件夹(例如 tmp,可能在您的文档根目录中)。

然后创建一个脚本(与 tmp 一起)对该文件夹进行简单的写入。

<?php

file_put_contents(__DIR__ . '/tmp/test.txt', 'hello earth');

然后查看生成文件的所有权和权限。

在我的开发服务器上,我在 Linux (Debian) 上的 Web 服务器 Apache(使用 mod php)下运行了 Php。脚本以用户“www-data”的身份运行。所以这里的关键是用户www-data 需要能够写入文件夹。

如果 Web 服务器无法写入该文件夹,则 apache 错误日志中会出现类似以下错误:

[Tue May 10 08:27:52.404959 2016] [:error] [pid 18] [client 172.17.42.1:59832] PHP Warning:  file_put_contents(/var/www/stackoverflow/tmp/test.txt): failed to open stream: Permission denied in /var/www/stackoverflow/so_test.php on line 3, referer: http://localhost/

尝试并了解您的服务器环境和 unix 权限。

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 2018-01-24
    • 1970-01-01
    • 2020-07-06
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    相关资源
    最近更新 更多