PHP上传文件到Web服务器根目录之外的目录

5
所以我有一个问题要问你们... 我正在尝试用PHP编写一个网站,让人们上传图像到我的服务器。我已经解决了上传部分的问题,所以那不是问题。问题在于当我尝试将上传的文件写入apache文档根目录之外的目录时。
Apache的文档根目录是/var/www/,而我正在尝试保存这些图像的目录是/mnt/storage/images/。我已经创建了该目录,将组更改为www-data,并将目录权限更改为777(尽管我知道从安全角度来看这很糟糕)。我尝试了一些关于apache配置文件/etc/apache2/apache2.conf的事情,即添加一个标签和一个别名行,但是似乎没有任何作用。每次我尝试上传文件到图像目录时,都会给我一个权限错误。我甚至尝试手动将几个文件放在那里,并使用Web浏览器使用别名导航到目录,结果却得到了403错误。
我知道我要么做错了什么,要么还没有做某些事情使其工作。我已经在Google上寻求帮助几天了,但我找到的都是无用的信息,或者是几乎没有帮助的碎片化信息。
顺便说一句...我正在使用Ubuntu 11.04和Apache 2.2.17,并且我有root访问权限和所有其他权限。
谢谢, 罗比
编辑:这是我放入apache配置文件的部分:
Alias /images "/mnt/storage/images/"
<Directory "/mnt/storage/images/">
    Allow from all
</Directory>

你能发布一下你 Apache 配置文件的相关部分吗?可能需要先修复 403 错误。 - Doug Owings
检查 /mnt/storage/ 和 /mnt 目录的 Apache 权限,至少应该在所有这些目录上获取 x 权限(如果 Apache 用户和组不是这些目录的用户或组,则意味着它应该在第三个 all 权限上)。 - regilero
如果您不介意的话,能否粘贴一下写入到其他目录的代码片段并启用XDEBUG以跟踪流程。 - Rakesh Sankar
3个回答

3

您需要授予Apache访问所有相关目录的权限:

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

如果Apache没有对存储(storage)或挂载点(mnt)目录的权限,那么在图像(images)上执行777也没有意义。
当然,只有图像(images)需要具有写权限,因为这是您实际进行文件操作的地方。mnt和storage最多需要读取权限,您可以通过将Apache用户帐户放入组中并将图像目录的chgrp更改为该新组来避免进行全局(xx7)权限设置。

1
哇塞,谢谢!我没意识到我需要给Apache用户读写权限。真不敢相信这么简单的问题居然让我忽略了。我想这种事情偶尔也会发生 :P - Robbie

0

你可能在 PHP 中启用了 safe_mode。请关闭它。


我检查过了,不,我没有打开它。 - Robbie

0

这可能是由于 open_basedir 的设置。您可以为特定的域名打开或关闭此设置... 尝试类似以下的操作:

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

如果您正在使用Plesk,则可以在此处查看信息:[http://forum.parallels.com/showthread.php?t=62750%22]。否则,您应该能够将其调整为您正在使用的任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接