0
$out = shell_exec('powershell -command "& {Get-WmiObject win32_Process | where-object {($_.CommandLine -like \"*php*\") } | Select-Object ProcessId,CommandLine,\"MMxDelimiter\" | Format-List}" < NULL');

foreach (explode("MMxDelimiter :",$out) as $Row) {
    preg_match_all("/ProcessId[^:]+:[^0-9]+([0-9]+)[^a-z]*CommandLine[^:]+:(.+)/is",$Row,$OutPut);
    if (trim($OutPut[1][0]) != "") {
        $Files[] = array("ProcessId"=>$OutPut[1][0],"Command"=>preg_replace("/[\n][ ]+/","",$OutPut[2][0]));
    }
}
print_r($Files);

此代码通过 power shell 显示工作 php 文件,它在 win7 上运行良好,但由于< NULL参数原因在 win server 2008 上出现错误。

任何人都可以告诉我如何解决这个问题

4

1 回答 1

0
$out = shell_exec('powershell -command "& {Get-WmiObject win32_Process | where-object {($_.CommandLine -like \"*php*\") } | Select-Object ProcessId,CommandLine,\"MMxDelimiter\" | Format-List}" < '.__FILE__);

foreach (explode("MMxDelimiter :",$out) as $Row) {
    preg_match_all("/ProcessId[^:]+:[^0-9]+([0-9]+)[^a-z]*CommandLine[^:]+:(.+)/is",$Row,$OutPut);
    if (trim($OutPut[1][0]) != "") {
        $Files[] = array("ProcessId"=>$OutPut[1][0],"Command"=>preg_replace("/[\n][ ]+/","",$OutPut[2][0]));
    }
}
print_r($Files);

我改变< NULL了一个真实的文件路径 < __FILE__ ,所以它不是最好的解决方案,但可以工作!!!

于 2013-08-23T07:03:42.383 回答