在Windows和CentOS上PHP的include / require的不同行为

时间:2013-03-21 04:54:43

标签: php windows centos

这些是我的PHP应用程序myApp.phpmypartsA/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.phpmypartsA/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会尝试从partsC:\而不是/查找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

1 个答案:

答案 0 :(得分:0)

$path = realpath(dirname(__FILE__)) . "/../../parts/mypartsA/main.php";
require_once($path);

尝试使用此路径

$path = "../parts/mypartsA/main.php";

第二条路径应该与文档根目录一起使用。