2013-03-21 56 views
0

这些是我的PHP应用程序myApp.phpmypartsA/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.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将试图从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 
+0

linux是否区分大小写(windows不是)你确定文件夹名是'mypartsA'吗? – Josh 2013-03-21 04:59:52

+0

我敢肯定,它是mypartsA。 – user1345414 2013-03-21 05:11:21

+0

确认'$ _SERVER [DOCUMENT_ROOT]'实际指向'/ var/www/html /',并且'/ var/www/html/parts/mypartsA/main.php'具有设置正确的执行权限。 – Josh 2013-03-21 05:19:13

回答

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

尝试这条道路

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

第二路径应该工作w ith文档根目录。

+0

谢谢你的建议。正如我所说的,我正在寻找不需要更改代码的方式。 – user1345414 2013-03-21 05:21:08

+0

我想你没有办法做到这一点。 '/' - linux和php文件系统根目录在/ some/path中搜索文件但不在/ your/webroot/some/path中 – 2013-03-21 05:32:09

+0

@NikitaMelnikov'/'在php文件中会指向Apache的根目录不是linux – Josh 2013-03-21 05:34:56

相关问题