2009-08-24 8 views
2

私はPHP 5.3にアップグレードし、新しいクライアント用の古いWebサイトをサポートし始めました。これは私が以前に遭遇したことのない奇妙なPHPコードを使用しているようです。 $ {「変数名」}私は(PHP構文解析されていないと思われるのでによる未定義の変数に生成された通知を取得

:$ _GETや$ _REQUEST変数、開発者は次のように使用しているにアクセスしようとしながら、

$ {"variable_name"}スタイルコード)。

これを$ _REQUEST ['variable_name']に変更すると、期待通りに機能しますが、サイト全体が大規模で所有者レイアウトの方法を使用しているため、コードをすべて変更して変更することはできません。

これらのタグ/コードブロックのサポートを有効にすることができますか?私はPHP.iniを見てきましたが、ASPスタイルタグと短いタグについては言及していますが、これを有効にすることは効果がありません(とにかくまったく異なって見えます。

+0

コードサンプルを投稿できますか? – cmcculloh

+2

aspスタイルのタグは<% %>となります。そして短いタグはの代わりにとなるでしょう – sshow

答えて

16

私はその構文を使用して新しいものがあるとは思わない:

$a = 10; 
var_dump(${"a"}); 

作品だけで結構;-)


あなたの問題は、おそらく前に、register_globalsだった、という事実によるものです(デフォルトでは、PHP < = 4.somethingの場合)となり、現在は無効になっています。 Onに設定register_globalsを

は、$_REQUESTのいずれかの変数が自動的にアプリケーションでvartiableとして注入される - だけでなく、実際に、これはvariables_order設定オプションによって異なりますが、これはほとんどの場合、GET、POST、およびクッキーを含んでいます、 少なくとも。

例えば、$_GET['my_var']のような変数がある場合は、$my_varという変数もあります。そして、この1つはまた、構文でアクセスすることができ${'my_var'}


register_globalsを考慮すると、PHP 4.2のようなものので、デフォルトでOffで、(私の記憶が正しければ)PHP 6 に消えるはずです、私は再に対して助言しますそれをアクティブにする...少なくとも、コードを修正/テストするのに必要な時間があれば...

+0

ありがとう、私は以前のことをやっているその方法を遭遇していない!最初は奇妙だと思われましたが、PHPで1つのことをする方法がたくさんあるようです。 – BeesonBison

+0

LOTS(あまりにも多く、いくつかは^^)というものがあります。^^ –

2

古いサーバーにはおそらくREGISTER_GLOBALSがあります。だから奇妙な括弧は問題ではありません。あなたが$_REQUEST['test']にアクセスできることを意味グローバルスコープの通常の変数は、$test${"test"}

ブラケット構文はデフォルトでオンになって、私はあなたを信じていないようにアクセスすることができますよう

REGISTER_GLOBALS$_REQUEST内のすべての変数を置きますそれをオン/オフすることができます。

2

register_globalsがオンになっている可能性があります。 {$variable_name}の構文は常にオンですが、register_globals$_REQUEST['variable_name']のようになります。$variable_nameになります。

可能な限り、スイッチをオンにしないでください。長い間アドバイスされた理由がありますが、PHP6では完全になくなります。

3

$ {"variable_name"}の構文は、実質的に$ variable_nameと同じですが、中括弧が最初に評価されます。最新版のPHP、ベータ版でもサポートされています。 PHPの最近のバージョンではサポートされていないのは、$ _REQUEST(およびその他の)変数をグローバル変数として登録するサポートです。それは、しかし理由はセキュリティ問題の本番使用することは推奨されていない

register_globals = on

:それを有効にするための設定があります。いくつかの「sed」のようなツールを使ってソースを実行し、正規表現で置き換える方が簡単かもしれません。

5

変数の中括弧構文はPHPの埋め込み部分であり、まもなく存在しています。その理由は、variable variablesを使用すると、配列とオブジェクトの構文であいまいさを解決するためです。

マニュアルから:

可変変数を配列で 使用するためには、あなたは 曖昧さの問題を解決しなければなりません。あなたは 書き込み$$ 1その後、パーサはあなたが 変数として$ 1を使用することを意図しているかどうかを知る に必要がある場合、またはあなたがその から 変数、その後1指標として$$たい場合つまり、変数。このあいまいさを解消する の構文は次のとおりです。$ {$ a 1} 最初のケースは$ 012 {$ a} 1 秒です。

heredoc syntaxを使用して何かを出力している間、配列変数またはオブジェクト変数を使用するなど、いくつかの状況で非常に便利な構文です。

私はregister_globalsを使用することについて他の人の助言を繰り返しませんが、この珍しい構文を解説したかっただけです。

0

register_globalsはphp 5.3で廃止され、php 6.0以降は削除されます。あなたがしたいのは、ほとんどのPHP IDE(zendo studio 6+)のリファクタリング機能を使用して、変数の名前をもっと適切なもの、つまり$_GET['variable_name']に変更することです。

関連する問題