PHP没有找到在必需文件中声明的函数

时间:2012-02-02 18:40:00

标签: php

最近下载了一些与我玩的小型网页游戏相关的小型开源项目的代码。尝试访问它失败并吐出错误消息:

  

PHP致命错误:在第7行的/Applications/MAMP/htdocs/infocenter/modules/security_mod.php中调用未定义的函数v()

搜索之后,我发现函数v()是在一个名为“system.php”的文件中定义的,该文件是“security_mod.php”文件所需的文件所需的文件所需要的。发生错误。任何require调用都不会发生错误(并且它们都是'require_once',而不是'include')。

这是整个system.php文件:

<?php
function v($a, $i)
{
    return isset($a[$i]) ? $a[$i] : null;
}
?>

这是'security_mod.php'中抛出错误的函数(也包括require调用):

<?php
require_once("settings_mod.php");
require_once("account_mod.php");//this file requires base_mod.php, which requires system.php

class SecurityMod {
    public static function checkLogin() {
        $name = v($_REQUEST, "acc");//this is the line that causes the error
        $password = v($_REQUEST, "pwd");
        if (!isset($name) || !isset($password)) {
            return null;
        }
        $acc = AccountMod::getAccount($name);
        if (SettingsMod::USE_ENCRYPTED_PASSWORDS) {
            if (is_null($acc) || $acc->getPassword() != md5($password)) {
                return null;
            } else
                return $acc;
        } else {
            if (is_null($acc) || $acc->getPassword() != $password) {
                return null;
            } else
                return $acc;
        }
    }
?>

我做了一些测试,发现我可以访问其他一些必需文件中的变量和函数。但是,与v()不同,所有这些都在类中。那会是原因吗?

编辑以澄清'system.php'是如何需要的: 'security_mod.php'在文件的开头有两个require_once调用:

require_once("settings_mod.php");
require_once("account_mod.php");

'settings_mod.php'是一个包含程序使用的常量的文件,不包含任何文件。 'account_mod.php'有两个require_once来电:

require_once("base_mod.php");
require_once("account.php");

'account.php'有一对include_once次调用,其中包含无关紧要和无关的文件。 'base_mod.php'是对'system.php'的最终要求的文件:

require_once("system.php");
require_once("settings_mod.php");

1 个答案:

答案 0 :(得分:1)

发现问题:成功包含的System.php文件与下载代码中的文件不同。由于base_mod.php仅提供了文件名而不是路径,因此PHP首先检查了我的include_path指定的目录,结果显示包含名为System.php的文件。由于我的文件系统不区分大小写,因此判断为与system.php相同,因此包含在内。