【发布时间】:2011-11-16 01:29:28
【问题描述】:
我在 Parallels/Plesk VPS 主机上,这是一个非常新手的问题。
webroot 位于:
/var/www/vhosts/my-domain-name/httpdocs
还有一个路径叫:
/var/www/vhosts/my-domain-name/private/
但是 PHP 脚本似乎无法读取其中的文件。
据我了解,任何放置在 webroot 中的文件,如果其 web-path/filename 请求,都有被提供给公众的危险。我隐约知道使用 .htaccess 文件来告诉 Apache 不要提供某些文件/目录。
但是我可以(或应该)将我的敏感文件放在 webroot 外部的某个位置,同时仍然允许 PHP 脚本读取它吗?
谢谢!
这是我在尝试读取上述“私人”文件夹中的文件时出现的错误:
Warning: file() [function.file]: open_basedir restriction in effect. File(../../private/test.txt) is not within the allowed path(s): (/var/www/vhosts/blah.com/httpdocs:/tmp) in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8
Warning: file(../../private/test-dt.txt) [function.file]: failed to open stream: Operation not permitted in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8
更新:已解决
reddit/r/PHPHelp 上的 Picto 为我提供了我需要的东西,并且它是特定于 Plesk 系统的。 我必须编写一个名为 vhost.conf 的文件,并将其放在与 httpdocs 处于同一级别的 conf 文件夹中。在 vhost.conf 中,我使用了:
<Directory /var/www/vhosts/my-domain-name/httpdocs>
php_admin_value open_basedir /var/www/vhosts/my-domain-name/httpdocs:/tmp:/var/www/vhosts/my-domain-name/myfolder
</Directory>
所以我现在将敏感文件放在 webroot (httpdocs) 之外的“myfolder”中。 在此之后,要使这些设置生效,(重新启动 Apache 不起作用)有一些 Plesk 特定的命令要给出,请参阅:http://www.gadberry.com/aaron/2006/02/09/plesk_vhost/
【问题讨论】:
-
在类似 RedHat 的系统上使 apache 组可读。如果您正在处理 ubuntu,请为该组设置读取权限:www-data