带有绝对路径的嵌套 require_once 不起作用

问题描述 投票:0回答:2

我有一个三重嵌套

require_once

user@mybox:/tmp/foo $ cat bar.php 
<?php
ini_set('display_errors', 1);
require_once 'foo3.php';

user@mybox:/tmp/foo $ cat foo3.php 
<?php

require_once 'foo2.php';
echo "foo3" . PHP_EOL;

user@mybox:/tmp/foo $ cat foo2.php 
<?php

require_once 'foo.php';
echo "foo2" . PHP_EOL;

user@mybox:/tmp/foo $ cat foo.php 
<?php

require_once 'Mage.php';

echo "foo" . PHP_EOL;

user@mybox:/tmp/foo $ cat Mage.php 
<?php

die('require once works' . PHP_EOL);

这有效:调用

php bar.php
时我得到输出
require once works
.

如果我现在改变

foo.php
使用绝对路径:

user@mybox:/tmp/foo $ cat foo.php
<?php

require_once '/tmp/foo/Mage.php';

echo "foo" . PHP_EOL;

我得到以下输出:

user@mybox:/tmp/foo $ php bar.php 
foo
foo2
foo3

最后一个文件的包含不起作用。

非嵌套

require_once
也适用:

user@mybox:/tmp/foo $ php foo.php 
require once works

这只发生在某些机器上(具有相同的 PHP 版本 PHP 5.3.3 (cli)(内置:2014 年 8 月 6 日 05:09:45)

更新

php foo2.php 

也不工作

php debugging
2个回答
-1
投票

我们发现只使用绝对路径是可行的。混合似乎是问题所在。


-1
投票

由于积分不足,我无法发表评论或投票,因此我在这里写下答案。我只想确认亚历克斯在这里的回答是绝对正确的。我相信有关 require_once 的这些信息对所有 PHP 开发人员都有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.