PHP exec,仅输出错误

时间:2016-03-19 05:54:39

标签: php

我正在使用PHP exec运行Powershell脚本来创建通过HTML表单提交的新用户。我要做的是在网页上输出此命令的错误,以便任何IT团队成员都可以看到是否出现任何问题。这就是我所拥有的:

if (isset($_POST['size'])) {
                    $where .= ' AND ';
                    $s = $_POST['size'];
                    $end = count($s);

                    for($i=0;$i<count($s);$i++) {
                        $where .= 'pSize=' . $s[$i];
                        if($i != count($s)-1){
                        $where .= ' OR ';
                       }
                    }

                } else {
                    $s = '';
                }

当我执行$psPath = 'c:\\Windows\\System32\WindowsPowerShell\v1.0\\powershell.exe -version 5'; $psDIR = "d:\\wamp64\\www\\includes\\"; $psScript = "NewHire.ps1"; $runCMD = $psPath. ' -ExecutionPolicy RemoteSigned '.$psDIR.$psScript $createuser = exec($runCMD.' 2>&1', $out); 时,它会显示输出和错误。我尝试将其更改为var_dump($out)但仅显示输出。如果我尝试exec($runCMD.' &1', $out),它就不会运行我的命令。有没有办法只能在$ out varible中显示错误?

3 个答案:

答案 0 :(得分:0)

试试这个,

1E-2

答案 1 :(得分:0)

发现这只适用于stderr:

exec($runCMD.' >&2' , $out);

答案 2 :(得分:0)

也许这可能会有所帮助

public static function exec_alt($cmd)
{
    exec($cmd, $output);
    if (!$output) {
        /**
         * FIXME: for some reason exec() returns empty output array @mine,'s machine.
         *        Somehow proc_open() approach (below) works, but doesn't work at
         *        test machines - same empty output with both pipes and temporary
         *        files (not we bypass shell wrapper). So use it as a fallback.
         */
        $output = array();
        $handle = proc_open($cmd, array(1 => array('pipe', 'w')), $pipes, null, null, array('bypass_shell' => true));
        if (is_resource($handle)) {
            $output = explode("\n", stream_get_contents($pipes[1]));
            fclose($pipes[1]);
            proc_close($handle);
        }
    }
    return $output;
}

如果你在Windows 7上,你可能需要:

  

禁用用户帐户控制(UAC)

运行

  

UserAccountControlSettings.exe

C:\Windows\System32\UserAccountControlSettings.exe 并选择&#34;从不通知&#34;