2016-12-22 8 views
1

bashのコマンドラインからPHPを実行しているときに、$_SERVER変数、それ自身、配列を設定することは可能ですか?私はこの

$ export test=foo 

ような何かをしてから、この

<?php 
#File: test.php 
var_dump($_SERVER['test']); 

プログラムが出力する文字列値「foo」というようなプログラムを実行する場合、ある

$_SERVER['test']をのPHPコードなしでのPHP配列と等しくすることはできますか?

私が解決しようとしている特定の問題は、私が変更できないsymfony CLIベースのプログラムを持っていることです。このプログラムは、その環境をブートストラップするために変数$_SERVERを使用します。

use Magento\Framework\App\Bootstrap; 
use Magento\Framework\Shell\ComplexParameter; 
//... 
$bootstrapParam = new ComplexParameter(self::INPUT_KEY_BOOTSTRAP); 
$params = $bootstrapParam->mergeFromArgv($_SERVER, $_SERVER); 
$params[Bootstrap::PARAM_REQUIRE_MAINTENANCE] = null; 
$bootstrap = Bootstrap::create(BP, $params); 

Bootstrap::create(BP, $params);$paramsにいくつかのネストされたキーを認識して - 私は、CLIプログラム自体を変更せずにこれらの値を変更する方法を見つけようとしています。

+0

たとえば、スクリプトで読み込んで必要に応じて編集できるJSONファイルなどの設定ファイルを作成することを検討しましたか? –

+0

[mod_env](https://httpd.apache.org/docs/2.4/mod/mod_env.html)モジュールを使用 – Xorifelse

+0

@NiettheDarkAbsolご協力いただきありがとうございますが、私はここでPHPコードを変更することはできません。はい、通常、私はPHPベースの設定、または別の値から設定を読み込むPHPコードを使用します。 –

答えて

1

mergeFromArgv$_SERVER配列全体を使用していませんが、それは$_SERVER['argv']部分だけです。これは基本的にはスカラのコマンドライン引数です。

php yourscript.php a[]=1\&a[]=2\&a[b]=anything 

あなたは、文字列を引用またはシェルに応じて、文字をエスケープする必要があるかもしれません:あなたは、次のようにPHPの配列aを渡すことができる必要がありますので

引数は、その後、parse_strで解析しているようです。

+0

+1、私の間違った 'mergeFromArgv'を指摘してください。それでも、もしbashが$ _SERVERに配列を送ることができるかどうかを見るためにそれを開いたままにしておきます。 –

+0

しかし、 'mergeFromArgv($ _ SERVER、$ _SERVER);はそれを正確に行います。それは$ _SERVER ['argv'] 'を' $ _SERVER'にマージします。 'test = foo'をコマンドライン引数として入力するだけです。 –

1

あなたは、あなたがPHPファイルに

echo $_SERVER["MY_EXAMPLE"]; //outputs myexample_data 
をその変数にアクセスすることができますが、 mod_env

SetEnv MY_EXAMPLE myexample_data 

を使用してそれを行うことができ、の.htaccessファイルまたはApache の.confファイルを経由して任意のサーバー変数を設定することができます

またはPHP CLI を使用している間は、$ _SERVERに次のように変数を設定することができます

putenv('MY_EXAMPLE=myexample_data'); 
+0

有用な情報ですが、PHP配列である 'MY_EXAMPLE'に値を設定できるようにしたいと考えています。 '.htaccess'、' http.conf'、または 'mod_env'はそれをサポートしていますか? –

+0

@AlanStorm '.htaccess'の' http.conf'の 'mod-env'はcliには適用されません。 cliやWebスクリプトのために必要ですか? –

関連する問題