Quantcast
Channel: proc_open - それマグで!
Viewing all articles
Browse latest Browse all 4

php のコマンド実行のproc_open でexitcode を取得する

$
0
0

proc_open でexitcode を取得すると -1 になる

proc_open の関数で、exitcode を参照すると、常に -1 が固定で返ってくる件

proc_get_status($process)['exitcode']; // -1
proc_get_status($process)['exitcode']; // -1
array:8 [
  "command" => "ssh"
  "pid" => 6694
  "running" => false
  "signaled" => false
  "stopped" => false
  "exitcode" => -1
  "termsig" => 0
  "stopsig" => 0
]

原因

プロセス終了後に status 取得すると、常に -1 しか返ってこない。そういうものである

対策。

proc_get_status($process)['running']falseになった瞬間の status を保存しておくと exitcode が正しく取れる。

終了後に初めて呼び出したときに、正しいexitcode が取れる。それ以降は「終了済み」を示す -1 が常に返ってくる。

<?php$cmd=['ssh','localhost', '/bin/noexists_command'];
$process=proc_open($cmd, [2=>$fd_ferr=fopen('php://temp','w')] , $pipes);
if(!is_resource($process)){thrownew \Exception("実行エラー");}do{$stat=proc_get_status($process);
        // waitingusleep(1000*1);
}while($stat['running']);

if($stat['exitcode']>0){fseek($fd_ferr,0);
        $err=stream_get_contents($fd_ferr);
        thrownew \Exception($err);
}

これは、気づかんわ。

参考資料

https://stackoverflow.com/questions/7645499/getting-the-real-exit-code-after-proc-open


Viewing all articles
Browse latest Browse all 4


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>