php - 如何包含文档根目录之外的文件?

标签 php include include-path

我想要做的是将“domain1”中的“file1.php”包含到“domain2”中的“file2.php”中。所以我想我应该做的是这样的:

file2.php
require_once '/var/www/vhosts/domain1/httpdocs/file1.php';

但由于我无法真正理解的原因,这不会起作用。所以我所做的就是将我的路径添加到包含路径中。像这样的东西:

file2.php
set_include_path(get_include_path() . PATH_SEPARATOR . "/var/www/vhosts/domain1/httpdocs");
require_once 'file1.php';

那么你能给我一些提示,告诉我哪里做错了吗?

谢谢

更新 - 无论哪种方式,我都会收到以下错误消息:

Fatal error: require() [function.require]: Failed opening required '/var/www/vhosts/domain1/httpdocs/file1.php' (include_path='.:/php/includes:/usr/share/pear/') in /var/www/vhosts/domain2/httpdocs/file2.php on line 4

我也尝试过打开和关闭 safe_mode。

更新 2:此外,我已将测试文件的权限更改为 777,并仔细检查了 bash 中包含文件的路径。

解决方案:我已经设法解开了这个谜团!我的托管公司使用 Plesk 来管理域等。此外,php.ini 中的错误报告级别不是 E_ALL。当我将错误报告设置为 E_ALL 时,我收到一条警告:

Warning: require() [function.require]: open_basedir restriction in effect.

所以我进入/var/www/vhosts/domain2/conf/httpd.include 并编辑了 open_basedir 路径。请注意,这不是持久的解决方案,因为每次更改域配置时,plesk 都会重写此配置文件。您应该做的是编辑(或创建)同一目录中的“vhost.conf”文件,然后运行:

 /usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=DOMAIN.TLD

这应该为您的域重新配置设置,但由于某些奇怪的原因,它不能与 open_basedir 一起使用。我可以修改其他东西,比如 document_root 但它不会改变 open_basedir,但那是另一个问题 :D

最终解决方案:对于那些有同样问题的人,这里是最终有效的代码。我刚刚在/var/www/vhosts/domain2/conf/vhost.conf 中添加了这个(你可以将 '/var/www/vhosts' 更改为 '/' 或任何你喜欢的):

    <Directory /var/www/vhosts/DOMAIN.TLD/httpdocs>
    <IfModule mod_php5.c>
            php_admin_flag engine on
            php_admin_flag safe_mode off
            php_admin_value open_basedir "/var/www/vhosts"
    </IfModule>
            Options -Includes -ExecCGI
    </Directory>

谢谢大家!

最佳答案

如果 open_basedir 有效,则无法完成此操作,这会阻止 PHP 遍历主目录。

您可以做的是确保 docroot1 和 docroot2 由同一组中的用户拥有,相应地设置组权限并使用从 docroot2 到 docroot1 的符号链接(symbolic link)来读取其他 web 根目录。

或者,重新构建 PHP,让它像所有其他进程一样遵循典型的 *nix 权限:)

关于php - 如何包含文档根目录之外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370053/

相关文章:

php - HTML/PHP : Which parts of an HTML head can be saved in a separate file

javascript - 将innerHTML更改为附近的文档

javascript - 如何使 twig 全局变量在 javascript 库中可访问

c++ - 如何防止从系统目录中包含文件?

c++ - 在Kubuntu上使用code::blocks未定义对curlpp的引用

php - 在 Windows 上使用 wkhtmltopdf

php - 使用 PhpAmqpLib 从 rabbitmq 消费者的回调中获取队列大小

java - 在 PHP 中使用 Java - 找不到类

java - 为什么我的 Android 应用程序将空白记录插入 MySQL 数据库?

c - 如何防止引用的包含搜索当前源文件的目录?