基本的に、私が知りたいのは、create_function関数の2番目のパラメーターについて、セミコロンなしで文字列を渡す方法はありますか?またはそれは動作しません。
例:
taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),
文字列にセミコロンがあることに注意してください。実行/評価するセミコロンなしで誰かが関数に入ることができる方法はありますか?
基本的に、私が知りたいのは、create_function関数の2番目のパラメーターについて、セミコロンなしで文字列を渡す方法はありますか?またはそれは動作しません。
例:
taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),
文字列にセミコロンがあることに注意してください。実行/評価するセミコロンなしで誰かが関数に入ることができる方法はありますか?
create_function() を使用して、無名関数を作成しています。2 番目のパラメーターは、関数のコードである文字列です (作成する他の関数と同様)。セミコロンで終わる必要はありません。次に例を示します。
$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }');
echo $coolfunction(1) . ' and ' . $coolfunction(-1);
'}' で終わり、出力: Yes and no!
いいえ、できません。PHP はセミコロンの影響を受けやすいため、すべてのステートメントを右中かっこの前で終了するためにセミコロンを使用する必要があります。私はこのような通常の機能も試しました:
function f() {
return 1
}
JavaScript とは異なり、構文エラーを吐き出しました。
ユーザー入力を使用する前に、常にサニタイズする必要があります。ユーザー入力でセミコロンを探し、見つからない場合は追加することをお勧めします。
ユーザーがここに何でも入力できる場合、無効な関数名を入力したり、ゴミを入力したりすると、まだ問題があります。
preg_match()で検証できます(ただし、私は preg の専門家ではないので、他の誰かに手伝ってもらいます)。
まず、なぜそれが必要なのですか?これは、関数を作成するための本当に汚い方法です。人々が関数を直接作成できるインターフェイスを作成したいからです (これはあなただけのものになるか、セキュリティ上の大きな問題になるでしょう)。あなたがそれをどのように使いたいのか、私にはよくわかりません。
とにかく、あなたの質問のために、それが機能しているかどうか気にする必要はありません。つまり、セミコロンを自分で入力するだけでなく、機能しているかどうかをテストするだけです。これは単なる文字列のテストです。