包含不起作用

时间:2015-09-08 10:58:44

标签: php mysql database

我遇到了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答案: - )

3 个答案:

答案 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格式,它将起作用。 远离相对路径,他们很麻烦。