这些是我的PHP应用程序myApp.php
和mypartsA/main.php
的代码。PHP在Windows和CentOS上的不同行为include/require
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将试图从C:\
或include_path
/
找不到parts
目录。
require_once(/parts/mypartsA/main.php);
的myAPP.php
所以结果一定是无论是在Windows还是在CentOS致命错误。
但是我的应用程序已经在Windows上工作了一年没有错误。 PHP可以正确地找到parts
目录。
可以sameone尝试在Windows上面的代码,看看..
##### myApp is starting now !!!
#### mypartsA is required
或得到错误?
现在,我想知道为什么在Windows上运行和在CentOS上运行时,相同代码的结果不同。
我必须检查PHP.ini中的哪些dirctive?
我知道如果我更改此代码以添加绝对路径与$ _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
linux是否区分大小写(windows不是)你确定文件夹名是'mypartsA'吗? – Josh 2013-03-21 04:59:52
我敢肯定,它是mypartsA。 – user1345414 2013-03-21 05:11:21
确认'$ _SERVER [DOCUMENT_ROOT]'实际指向'/ var/www/html /',并且'/ var/www/html/parts/mypartsA/main.php'具有设置正确的执行权限。 – Josh 2013-03-21 05:19:13