我想要做的是将'domain1‘中的'file1.php’包含到'domain2‘上的'file2.php’中。所以我想我应该这样做:
file2.php
require_once '/var/www/vhosts/domain1/httpdocs/file1.php';
但由于我不能真正理解的原因,这是行不通的。所以我所做的就是将我的路径添加到include路径中。类似于:
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的情况下都这样做。
UPDATE2:另外,我已经将我的测试文件的权限更改为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>
谢谢你们所有人!
发布于 2010-03-09 19:57:47
如果open_basedir
生效,您就不能做到这一点,因为它阻止PHP遍历主目录。
您可以做的是确保docroot1和docroot2为同一组中的用户所有,相应地设置组权限,并使用从docroot2到docroot1的符号链接来读取另一个web根目录。
或者,重新构建PHP,让它像其他进程一样遵循典型的*nix权限:)
发布于 2010-03-14 02:22:19
这可以在我管理的几台机器上运行
ini_set("include_path",".:/hsphere/local/home/user_name/other_domain.com");
require "filename.php";
发布于 2010-03-14 00:08:59
我坐在这里想知道你为什么不做个符号链接。还是我错过了什么?您可以将包含所需内容的文件夹符号链接到您有权访问的路径。
https://stackoverflow.com/questions/2370053
复制相似问题