我遇到了include / require命令的问题。
文件结构如下所示:
private |
- config.php
- dbc.php
public |
- index.php
- includes |
- database.php
这是更好理解的图像 http://i.stack.imgur.com/iHm5C.png
配置文件中的我有:
<?php
$dbname = "Prehlad_oop";
$dbuser = "lifestype_oop";
$dbpass = "fwoop";
$dbhost = "localhost";
?>
dbc.php中的我有这个:
public function c(){
include "config.php";
$this->conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
.... other code
并在database.php中:
require '../private/dbc.php';
$conn = new connection;
$conn->c();
当我从dbc.php加载它时,这个东西正在工作,但是,如果我从database.php加载页面,它不起作用,说我在dbc.php中有未定义的变量
我找到了一种方法来使这段代码工作,即使我从database.php调用,通过添加
../private/
dbc.php中的...最终代码如下所示:
public function c(){
include "../private/config.php";
我的问题是,当我想要包含的文件位于同一目录(config.php和dbc.php)时,为什么我需要进入目录路径。仅当我从database.php调用该函数时才会发生此错误。当我在包含文件中包含文件等时,是否存在一些障碍? ty答案: - )
答案 0 :(得分:2)
始终使用要包含的文件的绝对路径。 e.g
include $_SERVER['DOCUMENT_ROOT']."config.php";
而不是config.php
文件的相对路径。
包含所有文件及其绝对路径。 正如Rigg的建议
您可以使用__DIR__
(这是一个更好的选择)
因此,您可以在不更改的情况下将脚本移动到Web项目树中的任何位置。
答案 1 :(得分:0)
包括'./private/config.php';或者包含'private / config.php',第一个版本查找文件,相对于当前工作目录,第二个版本使用包含路径。
PS:最好使用require_once或include_once,以避免多次包含相同的函数/类定义,这将导致问题(重新声明函数)
答案 2 :(得分:0)
Mangesh的答案很好(我赞成它),但我认为这是一个更好的选择:
<?php
require_once(realpath($_SERVER['DOCUMENT_ROOT']) . '/project_folder/file.php');
?>
我发现这可以更好地工作,换句话说,在Web服务器上更加一致,因为realpath返回规范化的绝对路径名,这就是我们总是倾向于拥有的,不是吗?
注意: realpath将去除其路径参数的任何尾部斜杠,因此请确保在函数后面有一个前导斜杠(在 projeft_folder 之前,在这种情况下) )。
在任何情况下,您都可以在所有项目文件中使用该require / include格式,它将起作用。 远离相对路径,他们很麻烦。