【问题标题】:Trying to Include Files outside of Document Root (Plesk 10)尝试在文档根目录之外包含文件 (Plesk 10)
【发布时间】:2012-01-22 23:13:03
【问题描述】:

好的,我什么都试过了,这似乎是迄今为止最好的地方,我想在这里创建文档根httpdocs/[folder]/html,我有 php 包含文件,我想在根(require '../[folder]/file.php'] 以上但不能够访问比/var/www/vhosts/example.com/httpdocs 更远的地方。我知道我受到open_basedir 的限制,因为phpinfo() 中的值仍然是httpdocs/[folder]/html,但对于我的生活,我无法改变那个本地值!

这是我迄今为止尝试过的: 我已经看到了这个 - How to include file outside document root? - 并创建了一个仍然位于 conf 目录中的“vhost.conf”,重新配置了文件,重新启动了 apache……什么都没有。这是一篇好文章,但似乎有点过时了。

我将 php.ini 本身编辑到 open_basedir = '/var/www/vhosts/example.com/httpdocs,将其上传回原来的位置,重新配置,重新启动 - 什么都没有

我通过从另一个 conf 文件(vhost.conf)中添加相同的行来删除“httpd.conf”并对其进行编辑,然后将其放回 - 什么都没有,然后我尝试按照 godaddy 在这里所说的 - http://help.godaddy.com/article/1616并添加了 php_admin_value open_basedir none' to 'httpd.conf 行 - 也没有运气。

现在是 0435,我几乎睁不开眼睛——这个网站预计明天 2000 年推出!提前感谢任何愿意/能够阅读和/或帮助的人。

更新:感谢您的快速回复,以下是我能给您的最佳答案:

它会给你一个错误吗?

是的,我收到一个服务器错误,并通过我的服务器错误日志,具体来说:

PHP 警告:require() [function.require]:open_basedir 限制生效。文件(/var/www/vhosts/[example.com]/httpdocs/[folder]/[存在安全 php 文件的文件夹]/[file.php])不在允许的路径中:

所以我 99.99% 确定它是因为 open_basedir 限制。

您确定您的网络服务器设置为 vhosts/ 的所有者吗?

我很确定,我对控制服务器有点陌生,我真的不知道这到底意味着什么,但我通过 Godaddy 有一个虚拟专用服务器,运行 Parallels Plesk v10.3.1,我做了上面的文件通过 Shell SSH 移动。

在 Plesk 中,我可以将“文档根目录”更改为 /var/www/vhosts/example.com 以下的任何内容,Plesk 会将“open_basedir”更改为我设置的任何内容。例如,如果我在 Plesk 中将文档根目录设置为“httpdocs”,那么“open_basedir”将更改为同一个文件夹,并且一切正常。问题是我不想公开访问/httpdocs/[folder]中的所有内容

我的目标是我想将“文档根”更改为/httpdocs/[folder]/html,将“open_basedir”更改为/httpdocs,但由于某种原因,我无法更改open_basedir 中的本地值。出于安全考虑,我想这样做,所以人们只能直接访问不重要的 php 文件,但 php 本身我想给文件夹更多的访问权限。

您是否尝试包含使用相对路径或绝对路径?

我试图在“文档根目录”上方的文件中包含/要求的 php 文件中的路径看起来与这种格式完全一样:

require '../[folder where secure php files exist]/file.php';

如果我理解正确,我并没有使用服务器的整个路径。

【问题讨论】:

  • 它会给你一个错误吗?您确定您的网络服务器设置为 vhosts/ 的所有者吗?您是否尝试使用相对路径或绝对路径?
  • 不幸的是,Plesk 是由一些对网站知之甚少的人设计的。您的文件必须在公共目录树下或私有目录中(现在允许 PHP 访问私有目录)。
  • 是的,检查我所做的最后一次更新,我解决了原来的问题,但由于某种原因,服务器正在跳过我所有的嵌入文件(css、js、php、图像、视频)。我什至将“open_basedir”设置为“无”,但它仍然忽略它们,所以它不再是“open_basedir”问题。我在 index.php 上看到了所有未设置样式的 html,但我没有收到任何错误,而且我的脚本“需要”一堆文件! php.ini..ugh 中的某些东西必须打开或关闭!
  • 这是回答它的页面 -> link

标签: php apache include open-basedir


【解决方案1】:

ANSWER:(这里改成了答案):

显然,在 Plesk 10 中,Plesk 的程序将“文档根”路径设置为“open_basedir”,但在 Plesk 10 中没有用户友好的方式来更改“open_basedir”!!!

所以它有点像 hack,你必须先去这里:

/usr/local/psa/admin/conf/templates/default/service/php.php

然后更改文件中的这两行(第 11 和 29 行): echo "php_admin_value open_basedir {$OPT['dir']}/:/tmp/\n";

对此: echo "php_admin_value open_basedir /var/www/vhosts/[your.domain]/httpdocs/:/tmp/\n";

或到您希望限制停止的任何地方。

然后确保您运行这些行是 SSH:

/usr/local/psa/admin/sbin/httpdmng --reconfigure-all

/etc/init.d/httpd 停止

/etc/init.d/httpd 启动

但是我现在遇到了一个新问题。 “文档根目录”指向正确的文件夹:

/var/www/vhosts/[my.domain]/httpdocs/[文件夹]/html

但是当服务器到达时没有任何错误: require '../[folder]/[file.php]';

它会跳过它,就像它甚至不存在一样!没有给我错误消息或任何东西。它还跳过了我所有嵌入的 css 文件、js 文件、图像、视频......它不会进入任何目录!我感觉这是一个 'php.ini' 设置或 Plesk 正在做的一些奇怪的事情。

已解决:最后一个问题是因为我从未使用过访问根目录以上的文件。允许 PHP 超过根目录,但你不能这样做: src="../img/imagefile.jpg"

在 HTML 中。

因此,在重组了我所有的网站文件之后,我的网站现在可以正常运行了!感谢所有帮助,希望有人不必再这样做了。另外,我看到了一篇 Plesk 正在更新它的帖子,因为这是一个大问题。为 Parallels 工作的人说,http://forum.parallels.com/showthread.php?t=113236 这将是下一个版本中的一个选项,所以在那之前是 hack 时间!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2014-02-19
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2017-09-28
    相关资源
    最近更新 更多