php中exec返回什么内容?
相关的资料定义
在PHP中,exec()函数返回命令执行结果的最后一行内容。该函数用于执行一个外部程序,当指定函数的output参数时,会使用返回结果填充output,若output参数中已经有了元素,exec函数会在output后面追加。
但这个怎么去理解呢?
exec() 默认情况会返回指定命令结果的最后一行,指定output参数,会使用返回结果填充output;如果output参数中已经有元素,exec()会在output后面追加。
exec(执行的程序, 程序执行完返回的结果, 程序执行成功或失败或错误信息);
$return,返回 1,表示运行成功
返回 0,表示运行程序失败
返回 负数,表示程序运行过程出现错误,程序本身有问题。
成功例子(以下代码是本人亲测有效的,还有不等待exe执行完怎么处理的方案):
test.php
<?php
$exe ="ping www.baidu.com";//这里可以换成你要调用的程序路径
//比如: $exe = "C:\\a.exe";//exe程序本身需要做把程序的执行结果返回,如果程序没做,可以执行代码测试一下返回的内容是什么,如果是空,那就说明你需要exe程序要做执行完的返回结果。
// $exe .= " 2>&1 &";//不等待结果,但实际用的时候,很多时候还是会等待
//当你在执行之前设置了$out
//$out = array('111111');//在最后输出的数组里第一个就会是 0=>11111 在输出的数组的最前面
exec($exe,$out, $return);
if($return== 0 )//调用成功
{
$out_new = array();
foreach($out as $k=>$v)
{
$out_new[$k]=iconv("gb2312","utf-8",$v);//这里是处理返回的数组中,中文乱码的将字符串的编码从GB2312转到UTF-8
// $out_new[$k]=iconv("utf-8","gb2312",$v);//将字符串的编码从UTF-8转到GB2312
}
dump($out_new);
}
else//调用失败
{
return 0;
}
成功时,输出的结果会如下
array(11) {
[0] => string(0) ""
[1] => string(73) "正在 Ping www.a.shifen.com [163.177.151.109] 具有 32 字节的数据:"
[2] => string(62) "来自 163.177.151.109 的回复: 字节=32 时间=13ms TTL=55"
[3] => string(62) "来自 163.177.151.109 的回复: 字节=32 时间=13ms TTL=55"
[4] => string(62) "来自 163.177.151.109 的回复: 字节=32 时间=14ms TTL=55"
[5] => string(62) "来自 163.177.151.109 的回复: 字节=32 时间=14ms TTL=55"
[6] => string(0) ""
[7] => string(38) "163.177.151.109 的 Ping 统计信息:"
[8] => string(72) " 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),"
[9] => string(48) "往返行程的估计时间(以毫秒为单位):"
[10] => string(49) " 最短 = 13ms,最长 = 14ms,平均 = 13ms"
}
如果在最开始定了 $out = array('111111'),输出的结果会如下
array(12) {
[0] => string(6) "111111"
[1] => string(0) ""
[2] => string(73) "正在 Ping www.a.shifen.com [163.177.151.110] 具有 32 字节的数据:"
[3] => string(62) "来自 163.177.151.110 的回复: 字节=32 时间=20ms TTL=55"
[4] => string(62) "来自 163.177.151.110 的回复: 字节=32 时间=20ms TTL=55"
[5] => string(62) "来自 163.177.151.110 的回复: 字节=32 时间=20ms TTL=55"
[6] => string(62) "来自 163.177.151.110 的回复: 字节=32 时间=20ms TTL=55"
[7] => string(0) ""
[8] => string(38) "163.177.151.110 的 Ping 统计信息:"
[9] => string(72) " 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),"
[10] => string(48) "往返行程的估计时间(以毫秒为单位):"
[11] => string(49) " 最短 = 20ms,最长 = 20ms,平均 = 20ms"
}
另外,如果想php不等待exe程序执完,就返回进行php程序的下一步
我的成功方案是:
做两个 exe程序。
1.exe:用作调 2.exe程序
2.exe: 是你需要运行很久的 exe程序,”2.exe“ 程序成功被调用时,要立即告诉 1.exe 程序已成功调,然后 1.exe 程序 获取到成功调用的信息立马结束 1.exe 线程或关闭,这样php程序就可以很快知道 2.exe 已被成功调用,可以继续执行php代码的下一步操作了
3.如果想要 获取 最终 2.exe返回的结果,这个就要php 做一个接收 结果的接口并处理返回的结果就好了。
本文详细介绍了PHP中的exec函数如何获取命令执行结果,特别是在执行exe程序时的情况。当指定output参数时,exec会将结果填充到数组中。成功执行返回0,否则可能是错误或失败。通过示例代码展示了如何处理中文乱码,并提供了一个不等待exe执行完的解决方案,即通过两个exe程序互相配合,快速通知PHP程序可以继续执行下一步。
369

被折叠的 条评论
为什么被折叠?



