私はregister_globals
を使用するフレームワークに取り組んでいます。私のローカルphpバージョンは5.4です。
PHP 5.3.0からregister_globals
が廃止され、PHP 5.4で削除されることはわかっていますが、このコードをPHP 5.4で動作させる必要があります。
PHPの新しいバージョンの機能をエミュレートする方法はありますか?
グローバルで extract を使用してregister_globals
をエミュレートできます scope :
extract($_REQUEST);
または、グローバルと 変数変数 を使用して独立した関数に配置します
function globaling()
{
foreach ($_REQUEST as $key => $val)
{
global ${$key};
${$key} = $val;
}
}
リリースされたアプリケーションがあり、その中で何も変更したくない場合は、globals.php
ファイルを
<?php
extract($_REQUEST);
次に auto_prepend_file ディレクティブを.htaccess(またはphp.ini)に追加します
php_value auto_prepend_file ./globals.php
この後、コードはすべての呼び出しで実行され、アプリケーションは古い設定が有効であるかのように動作します。
参考になるかもしれませんが、これはphp.netでregister_globals Onをエミュレートするために推奨されているコードです。
<?php
// Emulate register_globals on
if (!ini_get('register_globals')) {
$superglobals = array($_SERVER, $_ENV,
$_FILES, $_COOKIE, $_POST, $_GET);
if (isset($_SESSION)) {
array_unshift($superglobals, $_SESSION);
}
foreach ($superglobals as $superglobal) {
extract($superglobal, EXTR_SKIP);
}
}
ソース: http://php.net/manual/en/faq.misc.php#faq.misc.registerglobals
PHPマニュアル によると、
この機能はPHP 5.3.0で廃止され、PHP 5.4.0。で削除されました。
ただし、Google検索により、この方法が buntuフォーラム で明らかになりました。
いいえ、ようやく完全に使用できなくなりました。まだグローバルを使用しているサイトは何ですか、コードを修正するために今から半年以上です。
最も簡単な解決策は、アプリの最初でこのコードを実行して、グローバルを最初から作成することです。
コード:
foreach ($_REQUEST as $key=>$val) {
${$key}=$val;
}
この方法で作成された変数は、スクリプトの残りの部分でまだ定義されていないことに注意する必要があります。
.htaccessファイルのauto_prepend_fileディレクティブを使用して、このコードをサイトのすべてのページの前に強制的に実行できます。
register_globals
を必要とするコードを確認し、無効にして適切に動作するように変更することを強くお勧めします。
以前のphp.iniで:
auto_globals_jit = On
後:
auto_globals_jit = Off