使用函数包含文件,而不是识别全局变量

时间:2014-12-18 11:36:05

标签: php pdo mysqli

我尝试使用之前项目中使用的功能连接到我的数据库。我唯一改变的是,我添加了一个loader.php文件。

loader.php

我已经让这个加载器包含我的文件,从根路径开始,因为我在处理不同目录中的多个页面时遇到了一些相对路径问题。

<?php 

function includeFile($path) {
    include ( $_SERVER['DOCUMENT_ROOT'] . '/include/'.$path);
}

function requireFile($path) {
    require ( $_SERVER['DOCUMENT_ROOT'] . '/include/'.$path);   
}

function includeFileOnce($path) {
    include_once ( $_SERVER['DOCUMENT_ROOT'] . '/include/'.$path);   
}

?>

包含/后端/ db_config.php

<?php
/**
 * database login details
 */
define("HOST", "localhost");
define("USER", "****"); 
define("PASSWORD", "****");
define("DATABASE", "****");

define("SECURE", FALSE); //development purposes
?>

包含/后端/ db_connect.php

<?php
include_once dirname(__FILE__) . '\db_config.php';
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
?>

包含/后端/ url_translator.php

<?php
include_once dirname(__FILE__) . '\db_connect.php';

function getUrl($mysqli) {
    if($stmt = $mysqli->prepare("SELECT english, dutch FROM url_translation")) { //line 5
        $stmt->execute();
        $stmt->store_result();

        $stmt->bind_result($english, $dutch);
        $stmt->fetch();

        echo $english . "<br>";
        echo $dutch . "<br>";
    }
}
?>

examplePage.php 当只使用include()时,一切正常,我从查询中获得结果。但是当我使用includeFile()时;我在下面列出了2个错误。

<?php
include( $_SERVER['DOCUMENT_ROOT'] . '/loader.php' );
//include('../backend/url_translator.php'); //works
includeFile('backend/url_translator.php'); //function from loader.php doesn't work
?>

<html>
    <head>
    </head>
    <body>
        <?php 
            getAllUrl($mysqli); //line 12
        ?>
    </body>
</html>
访问examplePage时

错误

Notice: Undefined variable: mysqli in C:\xampp\htdocs\projectname\en\examplePage.php on line 12

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\projectname\include\backend\url_translator.php on line 5

可以通过添加全局$ mysqli来修复第一个错误;在url_translator.php。但是我通过参数传递了$ mysqli。

为什么在使用函数包含文件而不是仅仅使用include()时会有不同的反应?

我只能想到它可能是一个范围问题,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

在examplePage.php中调用$_SERVER['DOCUMENT_ROOT'] . '/include/' . $path时,您能否回复includeFile()的值?