PHP使用shell_exec执行openssl命令报unknown option 2错误如何解决
错误原因
- 重定向语法错误:你命令中写的
2 >/dev/null在2和>之间多了空格,shell会把独立的2作为参数传递给openssl,直接触发「unknown option 2」的报错,标准错误重定向的正确写法是2>/dev/null,中间不能加空格。 - PHP变量解析错误:你用单引号包裹shell命令,PHP单引号字符串不会解析内部的
{$domain_name}变量,命令会原样把{$domain_name}作为参数传递,无法替换为实际的域名值,导致命令执行不符合预期。
修复后的代码
// 改用双引号包裹命令,保证变量正常解析,同时修正重定向的空格问题 $response = shell_exec("openssl s_client -servername {$domain_name} -connect {$domain_name}:443 2>/dev/null | openssl x509 -noout -enddate | grep notAfter | sed -e s#notAfter=##");
调试建议
如果执行仍然有问题,可以先打印拼接完成的命令,确认参数是否符合预期:
$cmd = "openssl s_client -servername {$domain_name} -connect {$domain_name}:443 2>/dev/null | openssl x509 -noout -enddate | grep notAfter | sed -e s#notAfter=##"; // 输出命令确认格式 echo $cmd; $response = shell_exec($cmd);
内容的提问来源于stack exchange,提问作者naoki-haba
相关产品推荐
相关产品推荐

