PHP Velho Oeste 2024

import_request_variables

(PHP 4 >= 4.1.0, PHP 5 < 5.4.0)

import_request_variablesGET/POST/Cookie 変数をグローバルスコープにインポートする

説明

import_request_variables ( string $types [, string $prefix ] ) : bool

GET/POST/Cookie 変数をグローバルスコープにインポートします。 この関数は、register_globals を無効としているが、いくつかの変数をグローバルスコープで参照したいといった場合に有用です。

$_SERVER のような他の変数をグローバルスコープへインポートすることを考えている場合には、 extract() の使用を検討してください。

警告

この関数は PHP 5.3.0 で 非推奨となり、 PHP 5.4.0 で削除されました。

パラメータ

types

types パラメータを使用すると、インポートする リクエスト変数の種類を指定可能です。文字 'G'、'P'、'C' がそれぞれ GET、POST、Cookie を表します。これらは大文字小文字を区別しないため、 'g'、'p'、'c' の組み合せも使用することが可能です。 POST には、アップロードされたファイルに関する情報も含まれます。

注意:

文字の順番には注意してください。 "GP" とすると、POST 変数は同名の GET 変数を上書きします。GPC 以外の文字は無視されます。

prefix

変数名の接頭辞として使用され、 グローバルスコープにインポートされる全ての変数名の前に付加されます。 このため、"userid" という名前の GET 値があり、 接頭辞 "pref_" を指定した場合、 $pref_userid という名前のグローバル変数が作成されます。

注意:

prefix パラメータはオプションですが、 接頭辞を指定しないか接頭辞として空の文字列を指定した場合、 E_NOTICE レベルのエラーが発生します。 これは、セキュリティ上の問題を発生する可能性があります。 NOTICE レベルのエラーは、デフォルトの error reporting レベルでは表示されません。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

例1 import_request_variables() の例

<?php
// GET および POST 変数を、接頭辞 "rvar_" を付けて
// インポートします
import_request_variables("gp""rvar_");

echo 
$rvar_foo;
?>

参考

add a note add a note

User Contributed Notes 6 notes

up
8
ceo AT l-i-e DOT com
19 years ago
Call me crazy, but it seems to me that if you use this function, even WITH the prefix, then you might as well just turn register_globals back on...

Sooner or later, somebody will find a "hole" with your prefixed variables in an un-initialized variable.

Better to import precisely the variables you need, and initialize anything else properly.
up
5
brian at enchanter dot net
19 years ago
import_request_variables does *not* read from the $_GET, $_POST, or $_COOKIE arrays - it reads the data directly from what was submitted. This is an important distinction if, for example, the server has magic_quotes turned on and you massage the data to run stripslashes on it; if you then use import_request_variables, your variables will still have slashes in them.

In other words: even if you say $_GET=""; $_POST=""; then use import_request_variables, it'll still get all the request data.

If you change the contents of $_GET and you then want to bring this data into global variables, use extract($_GET, EXTR_PREFIX_ALL, "myprefix") instead.
up
1
rustamabd at gmail dot com
12 years ago
import_request_variables() is gone from PHP since version 5.4.0. A simple plug-in replacement it extract().

For example:

import_request_variables('gp', 'v_');

Can be replaced with:

extract($_REQUEST, EXTR_PREFIX_ALL|EXTR_REFS, 'v');
up
-1
jason
18 years ago
reply to ceo AT l-i-e DOT com:

I don't think it's a risk, as all of your request variables will be tagged with the prefix. As long as you don't prefix any of your internal variables with the same, you should be fine.

If someone tries to access an uninitiated security-related variable like $admin_level through request data, it will get imported as $RV_admin_level.
up
-2
samb06 at gmail dot com
18 years ago
What i do is have a small script in my header file that takes an array called $input, and loops through the array to extract variables. that way the security hole can be closed, as you specify what variables you would like extracted

$input = array('name' => null, 'age' => 26) ;

// 26 is the default age, if $_GET['age'] is empty or not set

function extract_get()
    {
        global $input ;
       
        if ($input)
            {
                foreach ($input as $k => $v)
                    {
                        if ($_GET[$k] == '' or $_GET[$k] == NULL)
                            {
                                $GLOBALS[$k] = $v ;
                            }
                        else
                            {
                                $GLOBALS = $_GET[$k] ;
                            }
                    }
            }
    }
up
-3
cornflake4 at gmx dot at
19 years ago
oops, a typo in my comment:

The last line in the second example (the on using the extract() function) should read:

echo $_GET['var']; # prints 1, so $_GET has been unchanged
To Top