PHP Windows require_once ignored


PHP Windows require_once ignored

我的问题是,

这是要包含的文件,

<?php
$dbhost = "localhost";
$dbuser = "****";
$dbpass = "***";
$dbname = "****";
$MYSQL_ERRNO = "";
$MYSQL_ERROR = "";
// Connect To Database
function db_connect() {
global $dbhost, $dbuser, $dbpass, $dbname;
global $MYSQL_ERRNO, $MYSQL_ERROR;
$link_id = mysql_connect($dbhost, $dbuser, $dbpass);
if(!$link_id) {
$MYSQL_ERRNO = 0;
$MYSQL_ERROR = "Connection failed to $dbhost.";
return 0;
}
else if(!mysql_select_db($dbname)) {
$MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error();
return 0;
}
else return $link_id;
}
?>

主文件有以下代码来建立db连接,

<?php
require_once 'file.php';
$link_id = db_connect($dbname);
......
?>

但是我得到函数未定义错误。

1)检查包含的相对路径。

2)仅仅因为PHP文档说你可以使用没有括号的require_once并不意味着你应该这样做。保持一致,使用require_once("file.php");

3)在函数中保持花括号的一致性。你在上面少了一两个。我想知道如果你重写你的函数如下方式,如果它的工作:

function db_connect() {
    global $dbhost, $dbuser, $dbpass, $dbname, $MYSQL_ERRNO, $MYSQL_ERROR;
    $link_id = mysql_connect($dbhost, $dbuser, $dbpass);
    if ($link_id === false) {
        $MYSQL_ERRNO = 0;
        $MYSQL_ERROR = "Connection failed to $dbhost.";
        return 0;
    } elseif (mysql_select_db($dbname) === false) {
        $MYSQL_ERRNO = mysql_errno();
        $MYSQL_ERROR = mysql_error();
        return 0;
    } else {
        return $link_id;
    }
}

请记住,检查您的web服务器错误日志通常会有所帮助。

编辑:

根据对这个答案的评论,你没有包括你认为的文件。为包含使用绝对路径,这样您可以100%确定包含的文件

逻辑。
有时我们需要它。

让我们整理一下你的案子。

  1. 你可以看到任何"函数未定义错误"。(虽然我更喜欢字面和精确的PHP错误消息,因为它们包含了很多有用的信息,让我们假设它是在这个地方抛出的常规PHP错误)。
  2. 我们可以从(1)中得出结论,您可以看到发生的所有错误。
  3. 所以,从(2)我们可以告诉如果有一个文件没有找到错误,你会得到通知。
  4. 因此,我们可以从(3)中假设没有错误并且文件被正确包含。

接下来是什么?
你得到这个错误的最有可能的原因是错误的代码你张贴在这里。
例如,如果您不将文件包含为file.php,而是包含为http://example.com/file.php,那么结果将与所描述的完全相同。
或者有两个名为'file.php'的文件,一个包含函数定义,另一个不包含。
或者函数名中也可能有拼写错误。

所以,你只需要仔细检查你的名字和打印一些调试信息,以确保你包括正确的文件和调用正确的函数