Bra*_*ayn 17 php include include-path
我想做的是将'domain1'中的'file1.php'包含在'domain2'上的'file2.php'中.所以我认为我应该做的是这样的:
file2.php
require_once '/var/www/vhosts/domain1/httpdocs/file1.php';
Run Code Online (Sandbox Code Playgroud)
但这不能用于我无法真正掌握的原因.所以我做的是将我的路径添加到包含路径.就像是:
file2.php
set_include_path(get_include_path() . PATH_SEPARATOR . "/var/www/vhosts/domain1/httpdocs");
require_once 'file1.php';
Run Code Online (Sandbox Code Playgroud)
那么请你给我一些提示,说明我做错了什么?
谢谢
更新 - 无论哪种方式,我收到以下错误消息:
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
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用safe_mode On和Off.
UPDATE2:我还在我的测试文件上将权限更改为777,并且我已经在bash中仔细检查了包含文件的路径.
解决方案:我设法解开了这个谜!我的托管公司使用Plesk来管理域名等.php.ini中的错误报告级别也不是E_ALL.当我向E_ALL设置错误报告时,我收到一条警告:
Warning: require() [function.require]: open_basedir restriction in effect.
Run Code Online (Sandbox Code Playgroud)
所以我进入/var/www/vhosts/domain2/conf/httpd.include并编辑了open_basedir路径.请注意,这不是一个持久的解决方案,因为每次更改域配置时,此配置文件都会被plesk重写.您应该做的是在同一目录中编辑(或创建)'vhost.conf'文件,然后运行:
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=DOMAIN.TLD
Run Code Online (Sandbox Code Playgroud)
这应该重新配置您的域的设置,但由于一些奇怪的原因,它不适用于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>
Run Code Online (Sandbox Code Playgroud)
谢谢大家!
如果open_basedir
生效,则无法完成此操作,这会阻止PHP遍历主目录.
您可以做的是确保docroot1和docroot2归同一组中的用户所有,相应地设置组权限,并使用docroot2到docroot1的符号链接来读取其他Web根目录.
或者,重新构建PHP并让它像其他每个进程一样遵循典型的*nix权限:)