私は次のPHPスクリプトを持っています:
<?php
function dump_extracted_post() {
extract($_POST);
var_dump(get_defined_vars());
}
dump_extracted_post();
?>
このスクリプトに、いくつかのデータを含むフォームを投稿すると、次の(予期しない)結果が生成されます。
Array(0) {
}
投稿されたデータが表示されないのはなぜですか?
extract()またはget_defined_vars()の理解に欠けているものはありますか?$ _POSTからの抽出を妨げる可能性のあるセキュリティ設定はありますか?
私はextractの性質に眉をひそめていることを知っているので、おそらくそれはセキュリティの問題ですが、phpドキュメントをスキャンしてもそのような問題については言及されていないようです。これを使用して、簡単なテンプレートを作成したいと思います。
スクリプトを次のように変更した場合:
<?php
function dump_extracted_post() {
var_dump($_POST);
}
dump_extracted_post();
?>
投稿されたデータは期待どおりに表示されます(そうです、間違いなくデータを投稿しています)。
同様に、スクリプトを次のように変更すると、次のようになります。
<?php
function dump_extracted_post() {
$a = 'moocows';
var_dump(get_defined_vars());
}
dump_extracted_post();
?>
期待される出力が表示されます。
array(1) {
["a"]=>
string(7) "moocows"
}