[PHP-users 5922] Re: PHP3 でPHP4 風にコーディングしたい

KOYAMA Tetsuji php-users@php.gr.jp
Wed, 06 Mar 2002 16:20:38 +0900


  小山です。

At Wed, 06 Mar 2002 15:19:59 +0900,
Mickey Okoshi wrote:
>  今後のPHP4ではregister_blobals=offが標準推奨とされ、かわりに
> $_POSTやimport_request_variables()などが導入されたわけですが、
> 「まだPHP3だが、PHP4への移行に備えてPHP4推奨の安全なコーディング
> に今から直しておきたい」という場合、どうするのが良いでしょうか?
> 
> PHP3でregister_blobals=offの場合、$HTTP_POST_VARS,$HTTP_GET_VARS
> などを使うのだと思いますが、$_REQUESTにあたるものが無いので、
> 「POSTでもGETでもデータを渡せる」ページなど改造が面倒そうです。

  PEAR の Auth.php にあるメソッドを参考にして、こんなのを書いてみまし
た。

function import_variables($type) {
  $var = null;
  switch (strtolower($type)) {
  case 'server':
    if (isset($_SERVER)) {
      $var = $_SERVER;
    } else {
      $var = $GLOBALS['HTTP_SERVER_VARS'];
    }
    break;
  case 'session':
    if (isset($_SESSION)) {
      $var = $_SESSION;
    } else {
      $var = $GLOBALS['HTTP_SESSION_VARS'];
    }
    break;
  case 'post':
    if (isset($_POST)) {
      $var = $_POST;
    } else {
      $var = $GLOBALS['HTTP_POST_VARS'];
    }
    break;
  case 'get':
    if (isset($_GET)) {
      $var = $_GET;
    } else {
      $var = $GLOBALS['HTTP_GET_VARS'];
    }
    break;
  case 'request':
    if (isset($_REQUEST)) {
       $var = $_REQUEST;
    }
    else {
      $var = import_variables('get');
      $post = import_variables('post');
      reset($post);
      while (list($key, $val) = each($post)) {
        $var[$key] = $val;
      }
    }
    break;
  default:
    break;
  }
  if (empty($var)) {
    $var = array();
  }
  return $var;
}

  この手のラッパーを書いてしまうのが、移行するのが分かっているソースの
場合良いのではないでしょうか。使い方は

  $vars = import_variables('request');
  echo $vars['name'];

という感じです。

-- 
	小山 哲志@ビート・クラフト
	koyama@beatcraft.com
	koyama@hoge.org