Windows环境下PHP exec()添加2>&1突然失效问题求助
解决方案:Windows下PHP exec()中2>&1失效问题
显式通过cmd.exe执行命令
最近Windows更新可能导致PHP的exec()不再默认通过系统shell解析命令,而是直接调用可执行文件,使得2>&1这类shell重定向语法被当作参数传递给程序,而非由shell处理。解决方法是显式调用cmd /c来包裹命令:exec('cmd /c "ver 2>&1"', $out, $code); // 此时$code应为0,$out包含系统版本信息原理是
cmd /c会启动命令行解释器,由它来解析重定向逻辑,确保2>&1被正确处理,将标准错误输出重定向到标准输出。改用shell_exec()函数
shell_exec()本身就是通过系统shell执行命令,天然支持shell语法,无需额外处理重定向:$output = shell_exec('ver 2>&1'); // $output会包含命令的所有输出(正常+错误)如果需要获取返回码,可以结合
$?变量(需在shell_exec之后立即调用):$output = shell_exec('ver 2>&1'); $code = $?;验证PHP配置(可选)
可以检查php.ini中的disable_functions项,确认exec、shell_exec未被禁用,排除配置层面的潜在影响。
内容的提问来源于stack exchange,提问作者E_D
相关产品推荐
相关产品推荐

