这些是我的PHP应用程序myApp.php
和mypartsA/main.php
的代码。
myApp.php
<?php
echo ("##### myApp is starting now !!! </br>");
require_once('/parts/mypartsA/main.php');
?>
mypartsA / main.php
<?php
echo ("#### mypartsA is required </br>");
?>
myApp.php
和mypartsA/main.php
属于以下结构。
Document_root
|
+--- test
| |
| +--- myApp.php
|
+--- parts
|
+--- mypartsA
|
+---main.php
我已经在Windows + Apache上使用了这个应用程序一年没有问题但最近我将其迁移到CentOS + Apache然后我得到与include_path
相关的致命错误
PHP Warning: require_once(/parts/mypartsA/main.php)
[<a href='function.require-once'>function.require-once</a>]
: failed to open stream
: No such file or directory
in /var/www/html/test/myApp.php on line 12
PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]
: Failed opening required (/parts/mypartsA/main.php’
(include_path='.:/php/includes:/usr/share/pear:/usr/share/pear/PEAR:/var/www/html')
in /var/www/html/test/myAPP.php on line 12
根据PHP.net,如果定义了路径,则将忽略include_path。 http://www.php.net/manual/en/function.include.php
我认为在我的情况下,PHP会尝试从parts
或C:\
而不是/
查找include_path
目录。
require_once(/parts/mypartsA/main.php);
因此,myAPP.php
的结果必须是致命错误,无论是在Windows上还是在CentOS上。
但我的应用程序已经工作了一年,在Windows上没有错误。 PHP可以正确找到parts
目录。
可以在Windows上尝试上面的代码并查看..
##### myApp is starting now !!!
#### mypartsA is required
或得到错误?
现在,我想知道为什么在Windows上运行和在CentOS上运行相同代码的结果会有所不同。
我必须检查PHP.ini中的哪些指令?
我知道如果我更改此代码以使用$ _SERVER['DOCUMENT_ROOT']
添加绝对路径。
require_once($_SERVER['DOCUMENT_ROOT']./parts/mypartsA/main.php);
它会很好用。但是有许多应用程序具有相同的编码风格,我不想改变它们。
这些是其他信息。
include_path值phpinfo()在Windows上显示
.;C:\PHP;C:\PHP\pear;C:\Apache2.2.22\htdocs
include_path值phpinfo()在CentOS上显示
.:/php/includes:/usr/share/pear:/usr/share/pear/PEAR:/var/www/html
答案 0 :(得分:0)
$path = realpath(dirname(__FILE__)) . "/../../parts/mypartsA/main.php";
require_once($path);
尝试使用此路径
$path = "../parts/mypartsA/main.php";
第二条路径应该与文档根目录一起使用。