2

我有一个 PHP 文件 /a/b/file.php 的行

require("../connect.php");

在 connect.php 中有一行

require("../config.inc.php");

这一切在我的本地服务器上运行良好。有一堆文件使用 connect.php,它们也都可以正常工作。

但是在托管站点 /a/b/file.php 会引发错误:

Fatal error: require() [function.require]: Failed opening required 
'../config.inc.php' (include_path='.:/usr/local/php5/lib/php') in
/******/connect.php on line 3

我怀疑即使 connect.php 在另一个文件夹中,它也会相对于 /a/b 查找它。是否有一个 php.ini 设置来改变这个?

4

4 回答 4

2

你为什么不使用类似的东西:

require( dirname(__FILE__).DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."connect.php");

这样,您将避免在类 Unix 系统上开发应用程序并将其部署在 Windows 系统上时出现的问题,反之亦然。

于 2010-12-27T17:17:08.137 回答
1

我不知道是否有 php.ini 设置,但通常我$_SERVER['DOCUMENT_ROOT']用于包含的文件。

require $_SERVER['DOCUMENT_ROOT']."/path/relative/to/document_root/file.php";

在某些情况下,相对路径更好,但大多数情况下,您要包含的文件将保留在同一个目录中。

于 2010-12-27T17:18:00.993 回答
1

通常我个人制作一个名为global.php(位于root项目目录中)的文件,其中我define()是一个常量,包括库等。

<?php
// ...
define('APP_INCLUDE_DIR', dirname(__FILE__) .'/');
// ...
?>

之后,我将该文件包含在位于同一目录中的所有其他文件中(例如 index.php 和require('global.php')。现在所有内容都在该目录级别执行,您可以APP_INCLUDE_DIR在包含的每个文件中使用常量。

<?php
require('global.php');

// ...
require_once(APP_INCLUDE_DIR .'a/b/c/connect.php');
?>

例如,a/b/c/connect.php你可以写

<?php
// ...
require_once(APP_INCLUDE_DIR .'a/b/config.inc.php');
?>
于 2010-12-27T17:21:03.067 回答
0

检查 PHP.ini 文件中的include_pathhttp://php.net/manual/en/function.set-include-path.php

例如,在我的本地服务器 (XAMPP) 上,它看起来像这样:`include_path .;C:\xampp\php\PEAR

你也可以做一个 phpinfo() 来找出答案。

于 2010-12-27T17:20:22.613 回答