【问题标题】:PHP upload a file to a directory outside the webserver rootPHP 将文件上传到网络服务器根目录之外的目录
【发布时间】:2011-06-12 22:24:05
【问题描述】:

所以我有一个问题要问你们......我正在尝试用 PHP 编写一个网站,允许人们将图像上传到我的服务器。我有上传部分工作,所以这不是问题。问题是当我尝试将上传的文件写入 apache 文档根目录之外的目录时。

Apache 的文档根目录是 /var/www/,而我试图将这些图像保存到的目录是 /mnt/storage/images/。我已经创建了目录,将组更改为 www-data,并将目录的权限更改为 777(尽管我知道这在安全方面很糟糕)。我对 apache 配置文件 /etc/apache2/apache2.conf 进行了一些尝试,即添加标签和别名行,但似乎没有任何效果。每次我尝试将文件上传到图像目录时,都会出现权限错误。我什至尝试手动将一些文件放在那里并使用别名导航到目录,使用网络浏览器,我得到一个 403 错误。

我知道我做错了什么,或者我没有做任何事情来完成这项工作。这几天我在谷歌上四处寻找帮助,我发现的只是无用的信息,或者几乎没有帮助的零碎信息。

顺便说一句...我在 Ubuntu 11.04 上使用 Apache 2.2.17,我有 root 访问权限和所有爵士乐。

谢谢, 罗比

编辑:这是我放入的 apache 配置的一部分:

Alias /images "/mnt/storage/images/"
<Directory "/mnt/storage/images/">
    Allow from all
</Directory>

【问题讨论】:

  • 你能发布你的 apache 配置的相关部分吗?可能要先修复 403 错误。
  • 检查目录 /mnt/storage/ 和 /mnt 上的 apache 权限 它至少应该在所有这些目录上获得 x 权限(如果 apache 用户和组不在这些目录的用户或组上这意味着它应该在第三个,好吧)。
  • 如果你不介意的话,你能把写的那段代码粘贴到不同的目录+启用XDEBUG并跟踪流程吗?

标签: php apache


【解决方案1】:

您必须授予 Apache 对所有相关目录的访问权限:

/mnt
/mnt/storage
/mnt/storage/images

如果 Apache 对 storagemnt 目录没有权限,则在 images 上执行 777 毫无意义。

当然,只有images 需要具有写权限,因为那是您实际执行文件操作的地方。 mntstorage 最多需要读取权限,您可以通过将 Apache 的用户帐户放入一个组并将图像目录 chgrp 到该新组来摆脱全局(xx7)权限。

【讨论】:

  • 天哪,谢谢!我没有意识到我必须向 apache 用户授予读/写权限。我不敢相信这么简单的事情就从我身边溜走了。我猜它发生了:P
【解决方案2】:

您可能在 PHP 中启用了safe_mode。把它关掉。

【讨论】:

  • 我检查了,不,我没有打开它
【解决方案3】:

可能是open_basedir。您可以为特定域打开和关闭此功能... 尝试类似

<Directory /var/www/vhosts/domain.com/httpdocs>
        php_admin_flag engine on
        php_admin_value open_basedir none
</Directory>

(此处为信息)[http://forum.parallels.com/showthread.php?t=62750%22] 如果您使用的是 Plesk。或者您应该希望能够使其符合您所使用的内容

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2011-10-28
    • 2011-02-05
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多