0

这些是我的 PHP 应用程序myApp.phpmypartsA/main.php.

我的应用程序.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
4

1 回答 1

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

试试这条路

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

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

于 2013-03-21T05:00:02.277 回答