【问题标题】:Filesystem operations don't work from my PHP script; do I need to chmod something?文件系统操作不适用于我的 PHP 脚本;我需要 chmod 吗?
【发布时间】:2010-01-21 23:24:11
【问题描述】:

我在 PHP 中遇到了mkdir 的一些权限问题。我试图简单地移动一些文件(并创建一个文件夹来放置它们),但我收到了这个错误:

mkdir() [function.mkdir]: Permission denied in

在我的旧网站上,我将文件夹设置为 755,一切似乎都正常。 似乎只有当文件夹的模式为 777 时,我才能让 mkdir 或相关功能在此服务器上工作。

网络浏览器是否被视为“其他”?我不觉得把我的文件夹留在 777 是个好主意,对吧?

【问题讨论】:

  • 很好的编辑,吉姆...不知道如何正确表达:)

标签: php permissions chmod


【解决方案1】:

如果您需要在服务器上创建文件夹,然后可以从 Web 浏览器写入,您可能需要至少使用 775。请注意,创建文件不一定是这种情况。事实上,您可能根本不希望您的文件为 777。

如果您想避免让您的服务器(又名 www-data)创建目录,您也可以在 php 代码中使用 bash 命令,但您仍然需要在文件夹上放置正确的权限以允许 www-data然后将文件写入目录。

请检查您的所有权。以上基于由 www-data 拥有的某个用户和组拥有的文件夹。您也可以尝试将文件夹所有权设置为 www-data 但该特定用户的权限仍为 rwx。

我希望这不会令人费解。

可以帮助您找出谁在您的服务器上运行 apache 的命令:

#top

寻找类似的东西:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                          
20610 www-data  20   0 36772  10m 4380 S    4  0.1   0:04.03 apache2 

#ps aux | grep "apache"

寻找类似的东西

www-data 26898  0.0  0.0  34248  4076 ?        S    17:59   0:00 /usr/sbin/apache2 -k start

【讨论】:

  • patrick...www-data 是普通用户吗?我还没有看到它。目前“拥有”该文件的用户是我的 plesk 用户...“johnnie”
  • ..and..i 将允许人们在网站上上传照片等,因此网络服务器将需要允许浏览器添加/编辑/等
  • www-data 是 ubuntu 和类似系统上的普通用户。您可能还会将其识别为 http 或 apache。我不知道你对你的服务器有多少访问权限,但你可以尝试一些事情来找出谁在运行 apache。尝试在命令行运行“top”,然后在您的服务器上查询网页。您可能会看到一行快速转到顶部,标记为 command:apache。您还可以检查 /etc/group 文件以了解系统用户。您可以在命令行中尝试的另一件事是“ps aux | grep "apache"。
【解决方案2】:

网络浏览器不是被视为“其他人”的对象,而是运行网络服务器的用户,例如httpdapache

一种常见的方法是 chown 文件以将用户和/或组设置为 Web 服务器用户,从而允许诸如 755 之类的权限。

例子:

chown apache:apache ./example/

【讨论】:

  • 当您通过 FTP 客户端上传文件夹并希望 PHP 写入时,在共享主机上是否也可能出现这种情况?如果是这样,如何检测服务器的用户/组是什么? PS.:我知道 suPHP 之类的,但恐怕并非所有共享主机都提供这个。
  • 好吧...@enbuy...所以说网络服务器在我的 Plesk 用户“johnnie”下运行。当我检查权限等时,它说:用户是 johnnie,组是 psacln。这不应该意味着浏览器应该很酷吗? ...顺便说一句,感谢您的宝贵时间
  • @johnnietheblack:我来不及了 :),看来你已经准备好了
【解决方案3】:

这可能适用也可能不适用,具体取决于您运行网络服务器的操作系统,您可能有其他安全机制干扰您尝试执行的操作。一个明显的例子(让我困惑了一段时间)是 SELinux 安全系统。尝试查看是否可以写入 /tmp。如果你不能寻找其他问题。作为一般规则,爆破 777 权限可能会导致安全漏洞。

【讨论】:

    【解决方案4】:

    您确定问题不在于文件夹所有权吗?

    也许 chown 是解决这个问题的正确命令

    【讨论】:

    • eric,好问题...我确实将文件夹 chown 给我的 plesk 用户和 psacln 组...应该可以吗?
    • 我不确定您的 plesk 用户应该扮演什么角色,但请记住,运行 mkdir 命令的是 Web 服务器,而不是最终用户浏览器。如果您使用的是 apache,我认为 apache 会创建一个具有该名称的用户
    • 好点,我检查一下......所以也许用户实际上应该是“apache”。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2019-03-02
    • 2014-08-22
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    相关资源
    最近更新 更多