PHP で別プロセス(バッチ)にセッションを受け渡す検証をしてみました。
バッチ側にセッションIDを渡して、セッション変数を更新してみます。
ブラウザ→test1f.php起動→test1t.php起動(3回) という流れです。
■test1f.php (WEBアプリ側)
—————————————————————————
<?php
$param = array(“hoge1”, “hoge2”, “hoge3”);
foreach ($param as $value) {
session_start();
$sess = session_id();
$_SESSION[‘param’] = $value;
session_write_close();
$cmd = “php test1t.php $sess”;
exec($cmd, $out, $sts);
var_dump($out);
var_dump($_SESSION);
unset($out); // ここに注意
}
—————————————————————————
■test1t.php(バッチ側)
—————————————————————————
<?php
session_id($argv[1]);
session_start();
error_log(“session_id:”. $argv[1], 0);
error_log(“param:”. $_SESSION[‘param’], 0);
echo $_SESSION[‘param’];
—————————————————————————
■検証結果1
「ここに注意」の行が有効な場合
—————————————————————————
error_log
[17-Dec-2016 11:41:00 Asia/Tokyo] session_id:s6g733bprmkdq9u9do7voh61o2
[17-Dec-2016 11:41:00 Asia/Tokyo] param:hoge1
[17-Dec-2016 11:41:00 Asia/Tokyo] session_id:s6g733bprmkdq9u9do7voh61o2
[17-Dec-2016 11:41:00 Asia/Tokyo] param:hoge2
[17-Dec-2016 11:41:00 Asia/Tokyo] session_id:s6g733bprmkdq9u9do7voh61o2
[17-Dec-2016 11:41:00 Asia/Tokyo] param:hoge3
—————————————————————————
var_dump
array(1) { [0]=> string(5) “hoge1” }
array(1) { [“param”]=> string(5) “hoge1” }
array(1) { [0]=> string(5) “hoge2” }
array(1) { [“param”]=> string(5) “hoge2” }
array(1) { [0]=> string(5) “hoge3” }
array(1) { [“param”]=> string(5) “hoge3” }
—————————————————————————
「ここに注意」の行が無効な(コメントアウトした)場合
—————————————————————————
error_log
[17-Dec-2016 11:42:45 Asia/Tokyo] session_id:s6g733bprmkdq9u9do7voh61o2
[17-Dec-2016 11:42:45 Asia/Tokyo] param:hoge1
[17-Dec-2016 11:42:45 Asia/Tokyo] session_id:s6g733bprmkdq9u9do7voh61o2
[17-Dec-2016 11:42:45 Asia/Tokyo] param:hoge2
[17-Dec-2016 11:42:45 Asia/Tokyo] session_id:s6g733bprmkdq9u9do7voh61o2
[17-Dec-2016 11:42:45 Asia/Tokyo] param:hoge3
—————————————————————————
var_dump
array(1) { [0]=> string(5) “hoge1” }
array(1) { [“param”]=> string(5) “hoge1” }
array(2) { [0]=> string(5) “hoge1” [1]=> string(5) “hoge2” }
array(1) { [“param”]=> string(5) “hoge2” }
array(3) { [0]=> string(5) “hoge1” [1]=> string(5) “hoge2” [2]=> string(5) “hoge3” }
array(1) { [“param”]=> string(5) “hoge3” }
—————————————————————————
error_log を見ると、セッションの受け渡しは成功していることが分かります。
php Manual の exec に以下の記載あります。
—————————————————————————
output について
「配列に既に何らかの要素が含まれる場合は、exec() は配列の最後に追加されることに注意してください。」
—————————————————————————
unset($out); するかどうかで、var_dump($out); の結果が異なっています。