2015-09-08 93 views
-1

我遇到include/require命令的问题。include不起作用

的文件结构如下所示:

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的答案:-)

+4

include/require使用相对路径搜索相对于php.ini'include_path'指令中列出的条目,该条目通常包括当前工作目录。因此,它们与__current工作目录_相关,不一定与包含文件的目录位于相同的位置....理解这一点,并且您将理解包括......这是许多PHP开发人员从未完全理解的东西 –

回答

2

总是使用文件的绝对路径包括。 e.g

include $_SERVER['DOCUMENT_ROOT']."config.php"; 

相反config.php文件的相对路径。

包含所有文件及其绝对路径。 正如里格的

建议您可以使用__DIR__(这是一个更好的选择)

所以,你可以在网上项目树中随意移动脚本没有变化。

+0

您会更好地使用'__DIR__',这样如果/当站点被移动到测试环境中'documentroot'文件夹的一个子文件夹时,它将继续工作,其中'DOCUMENT_ROOT'不会 – RiggsFolly

+0

那么我会输入什么? – JosefPP

+0

需要__DIR__。 “config.php文件”; ???或者我必须以某种方式定义__DIR__? – JosefPP

0

可以包含'./private/config.php';或者包含'private/config.php',第一个版本查找相对于当前工作目录的文件,第二个版本使用包含路径。

PS:最好使用require_once或include_once,以避免包括相同的功能/类定义多次,这将casuse问题(重新声明函数)

0

Mangesh的回答是不错的(我upvoted),但我建议这个在我看来,稍微好一点的选择:

<?php 
require_once(realpath($_SERVER['DOCUMENT_ROOT']) . '/project_folder/file.php'); 
?> 

我发现这工作得更好,换句话说,更一致地web服务器,因为realpath返回规范化的绝对​​路径,而这正是我们常常有,我们不?

说明:真实路径将剥去其路径参数的任何尾随斜线,所以一定要有一个前导斜线后的功能(该projeft_folder之前,在这种情况下)。

在任何情况下,您都可以在所有项目文件中使用require/include格式,并且它可以工作。远离相对路径,他们很麻烦。

相关问题