2

私は持っている

$client = new Google_Client();

そして、それはjsonのトークンです。

ここで、このクライアント オブジェクトと json トークンを shell_exec() 経由で別のスクリプトに渡したいと思います。
コマンドを次のように仮定しましょう

php myscript.php var1 var2 $client $token

コマンドラインはすべての引数を文字列として受け取るため、json とクライアント オブジェクトを渡すことができません。私が見つけたjsonとserialize()コマンドunserialize()プロンプトに渡すことができる関数については、$clientオブジェクトをコマンドプロンプトに渡す方法はどうですか? 助けてください。

4

3 に答える 3

6

Serialize will also "stringify" objects! You can also base64 encode/decode your arguments to prevent special chars troubles :

$aArgs = array($client, $token);
$sArgs = base64_encode(serialize($aArgs));
exec('php myscript.php '.$sArgs);
于 2013-09-26T09:37:15.677 に答える
3

私はjson_encode()を使用します:

PHP 配列を格納するための推奨される方法 (json_encode と serialize)

TLDR? json_encode() にはいくつかの問題が考えられます。

  • デフォルトでは、json_encode() は UTF-8 文字を Unicode エスケープ シーケンスに変換しますが、serialize() は変換しません。注: UTF-8 文字をそのままにしておくには、オプション JSON_UNESCAPED_UNICODE を PHP 5.4 以降で使用できます。
  • JSON には、オブジェクトの元のクラスが何であったかの記憶はありません (それらは常に stdClass のインスタンスとして復元されます)。
  • JSON で __sleep() および __wakeup() を利用することはできません
  • パブリック プロパティのみが JSON でシリアル化されます
  • JSON は移植性が高い

ただし、これらのいずれもユースケースの問題ではない場合。serialize() よりも 100 ~ 150% 高速です。(文字列をデコードすると、Google_Client() クラスは標準クラスに変換されます)。

// Script that kicks off the background task
$aArgs = array($client, $token);
$sArgs = base64_encode(json_encode($aArgs));
exec('php myscript.php '.$sArgs . ' > /dev/null 2>/dev/null &');

// myscript.php
$sArgs = json_decode(base64_decode($argv[1]));
// do something with $sArgs here...
于 2015-02-06T03:50:21.013 に答える