2012-02-02 9 views
2

私がプレイしている小さなウェブゲームに関連するマイナーなオープンソースプロジェクトのコードをいくつかダウンロードしました。それが失敗したとのエラーメッセージ吐き出すアクセスしようとする:検索した後PHPが必要なファイルに宣言された関数を見つけられない

PHP Fatal error: Call to undefined function v() in /Applications/MAMP/htdocs/infocenter/modules/security_mod.php on line 7

を、私は関数vは()であるファイルが必要とする「system.php」と呼ばれるファイルで定義されていることがわかりましたエラーが発生した "security_mod.php"ファイルで必要とされるファイルで必要とされます。必要な呼び出しでエラーは発生しません(また、 'include'ではなく 'require_once')。

これはsystem.phpファイルの全体です:

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

これは(も必要とするコールを含む)エラーがスローされます 'security_mod.php' 内の関数である。

<?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()とは異なり、クラスに属します。それが理由だろうか? 「security_mod.phpは、」ファイルの先頭にこれら二つのrequire_onceの呼び出しがあります:必要とされる方法を「system.php」明確にする

EDIT

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

「settings_mod.php」を含むファイルですプログラム内で使用される定数で、ファイルは含まれません。

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

「account.php」取るに足らないと関係のないファイルを含めるinclude_once呼び出しのペアを持っています 「account_mod.phpは」これら2つのrequire_onceのコールを持っています。問題を発見

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

'system.php'がどのように正確に必要なのかを表示できますか? –

答えて

1

: 「base_mod.phpは」「system.php」の究極の要件を持つファイルであるSystem.phpファイルが正常にダウンロードされたコード内の1つのと同じではありませんでした含まれています。 base_mod.phpはパスではなくファイル名のみを提供していたので、PHPはinclude_pathで指定されたディレクトリを最初にチェックしました。このファイルにはSystem.phpという名前のファイルが含まれていました。私のファイルシステムは大文字と小文字を区別しないので、それはsystem.phpと同じであると判断され、代わりに含まれています。

関連する問題