2016-10-05 13 views
-1

機能が存在するかどうかをチェックしたい。私はfunction_exists()を使ってチェックしています。オーケーPHPでチェック機能が存在するかどうか

$func = $_GET['function']; 
$func(); 
if(function_exists('func')) 
{ 
    echo "Exists"; 
} 
else 
{ 
    echo "Invalid Function name called"; 
} 

は、今私はregisterと呼ばれる機能を持っていると私はこのようにそれを呼び出しています:

www.example.com/index.php?function=register 

その関数が存在しませんので、それは、正常に動作しているわかりました。 しかし、もし、

www.example.com/index.php?function=registerssss 

それは私に、このエラーを与える:

Call to undefined function registerssss() 

私は上記の投稿したとして、私のカスタムエラーを印刷したいです。 解決策はありますか?それが動作しますので、ここで

$func = $_GET['function']; 

if (function_exists($func)) { 
    echo "Exists"; 
    $func(); 
} else { 
    echo "Invalid Function name called"; 
} 
+6

コール存在する場合のみ –

+2

ここで解決しようとしている問題があれば、このように解決しないでください。それは悪い習慣を促進するだけです。 – apokryfos

答えて

1

あなたはそれが存在するかどうかをチェックする前に関数を呼び出している

4

が...解決策ですが、私はあなたのコードを変更しました。

<?php 
    if (isset($_GET['function']) && function_exists($_GET['function'])) { 
    $func = $_GET['function']; // set the url var to a regular php var 
    $func();     // do the function 
    echo "Exists and Runned"; // Let the user know the function exists and it was runned 
    } else { 
    echo "Invalid Function name called"; // function does not exists so output custom error message 
    } 
?> 

私は、これはそれがないなら、私に知らせて、本当に役立ちます願っています。 $_GET

index.php?function=rrr ***FALSE*** 

index.php?function=test ***TRUE*** 

ため

+0

さようなら!あなたは、しかし、私は私のwww.example.com/index.php?function=registerを変更すると私は他の部分をプッシュするはい、関数のレジスタが存在するかどうかを変更するが、idk何ですか? –

+0

登録はクラスの一部ですか?関数はこのファイルに含まれていますか? –

1

Webアドレスこれは以下の罰金に動作します:

function test() { 
    echo "test"; 
} 

$foo = $_GET['function']; 

// Check $_GET has data and function exists 
if (isset($_GET['function']) && function_exists($foo)) { 
    echo "True"; 
} else { 
    echo "False"; 
} 
4

function_existsは、ここでは仕事のための適切なツールではありません。ユーザーがURLに追加するだけで組み込み関数を実行できないようにするにはどうすればよいですか?

は、代わりにスイッチを使用して、定義した関数のみを含めると、ユーザーが実行できるようにしたい:

switch ($_GET['function']) { 
    case 'function1': 
     function1(); 
     break; 
    case 'function2': 
     function2(); 
     break; 
    case 'function3': 
     function3(); 
     break; 
    default: 
     trigger_error("Invalid function"); 
} 

それとも、代わりにこのように、配列を使用することができます。

$allowed_functions = ['function1', 'function2', 'function3']; 

if (!empty($_GET['function']) && in_array($_GET['function'], $allowed_functions)) { 
    call_user_func($_GET['function']); 
} 
else { 
    trigger_error("Invalid function"); 
} 
関連する問題