Php 检查exec()是否成功运行

Php 检查exec()是否成功运行,php,exec,Php,Exec,我一直在尝试让大家知道php中的exec()命令是否成功执行,这样我就可以相应地回显某些消息。 我尝试了下面的一段代码,但问题是无论exec()是否成功运行,它总是echo“未创建PDF”并且从不echo成功创建的PDF。请告诉我如何执行exec()的检查,以便相应地回显消息 谢谢 根据PHP,您可以传入指针以获取命令的输出和状态 <?php exec('C://abc//wkhtmltopdf home.html sample.pdf', $output, $return); //

我一直在尝试让大家知道php中的
exec()
命令是否成功执行,这样我就可以相应地回显某些消息。 我尝试了下面的一段代码,但问题是无论
exec()
是否成功运行,它总是
echo“未创建PDF”
并且从不echo成功创建的PDF。请告诉我如何执行exec()的检查,以便相应地回显消息 谢谢


根据PHP,您可以传入指针以获取命令的输出和状态

<?php
exec('C://abc//wkhtmltopdf home.html sample.pdf', $output, $return);

// Return will return non-zero upon an error
if (!$return) {
    echo "PDF Created Successfully";
} else {
    echo "PDF not created";
}
?>

如果您想列举可能的错误,您可以在一个简单的示例中找到代码:

$ip = "192.168.0.2";
$exec = exec( "ping -c 3 -s 64 -t 64 ".$ip, $output, $return );
echo $exec;
echo "<br />----------------<br />";
print_r( $output );
echo "<br />----------------<br />";
print_r( $return );
如果成功(零)

----------------
Array ( [0] => PING 192.168.0.2 (192.168.0.2) 64(92) bytes of data. [1] => [2] => --- 192.168.0.2 ping statistics --- [3] => 3 packets transmitted, 0 received, 100% packet loss, time 2016ms [4] => )
----------------
1
rtt min/avg/max/mdev = 4.727/18.262/35.896/13.050 ms
----------------
Array ( [0] => PING 192.168.0.2 (192.168.0.2) 64(92) bytes of data. [1] => 72 bytes from 192.168.0.2: icmp_req=1 ttl=63 time=14.1 ms [2] => 72 bytes from 192.168.0.2: icmp_req=2 ttl=63 time=35.8 ms [3] => 72 bytes from 192.168.0.2: icmp_req=3 ttl=63 time=4.72 ms [4] => [5] => --- 192.168.0.2 ping statistics --- [6] => 3 packets transmitted, 3 received, 0% packet loss, time 2003ms [7] => rtt min/avg/max/mdev = 4.727/18.262/35.896/13.050 ms )
----------------
0

正确的方法是检查$return_var是否未设置为零,因为它只有在成功时才设置为零。在某些情况下,exec可能会失败,并且return_var没有设置为任何值。例如,如果服务器在执行过程中磁盘空间不足

<?php
exec('C://abc//wkhtmltopdf home.html sample.pdf', $output, $return_var);
if($return_var !== 0){ // exec is successful only if the $return_var was set to 0. !== means equal and identical, that is it is an integer and it also is zero.
    echo "PDF not created";
}
else{
    echo "PDF Created Successfully";
}

?>


注意:不要将$return\u var初始化为零

我为我工作

----------------
Array ( [0] => PING 192.168.0.2 (192.168.0.2) 64(92) bytes of data. [1] => [2] => --- 192.168.0.2 ping statistics --- [3] => 3 packets transmitted, 0 received, 100% packet loss, time 2016ms [4] => )
----------------
1
rtt min/avg/max/mdev = 4.727/18.262/35.896/13.050 ms
----------------
Array ( [0] => PING 192.168.0.2 (192.168.0.2) 64(92) bytes of data. [1] => 72 bytes from 192.168.0.2: icmp_req=1 ttl=63 time=14.1 ms [2] => 72 bytes from 192.168.0.2: icmp_req=2 ttl=63 time=35.8 ms [3] => 72 bytes from 192.168.0.2: icmp_req=3 ttl=63 time=4.72 ms [4] => [5] => --- 192.168.0.2 ping statistics --- [6] => 3 packets transmitted, 3 received, 0% packet loss, time 2003ms [7] => rtt min/avg/max/mdev = 4.727/18.262/35.896/13.050 ms )
----------------
0
对于linux系统和lang:php,laravel

----------------
Array ( [0] => PING 192.168.0.2 (192.168.0.2) 64(92) bytes of data. [1] => [2] => --- 192.168.0.2 ping statistics --- [3] => 3 packets transmitted, 0 received, 100% packet loss, time 2016ms [4] => )
----------------
1
rtt min/avg/max/mdev = 4.727/18.262/35.896/13.050 ms
----------------
Array ( [0] => PING 192.168.0.2 (192.168.0.2) 64(92) bytes of data. [1] => 72 bytes from 192.168.0.2: icmp_req=1 ttl=63 time=14.1 ms [2] => 72 bytes from 192.168.0.2: icmp_req=2 ttl=63 time=35.8 ms [3] => 72 bytes from 192.168.0.2: icmp_req=3 ttl=63 time=4.72 ms [4] => [5] => --- 192.168.0.2 ping statistics --- [6] => 3 packets transmitted, 3 received, 0% packet loss, time 2003ms [7] => rtt min/avg/max/mdev = 4.727/18.262/35.896/13.050 ms )
----------------
0
exec('/usr/bin/tesseract 2.png out1 -l '.$lang,$output,$error);
           return (!$error)? "success":"Error";

如果您不关心返回代码,我建议使用下一种方法:

private function execCommand($command){
exec($command,$output,$return);
return$return==0;
}
然后简单地称之为:

if($this->execCommand(“C://abc//wkhtmltopdf home.html sample.pdf”)){
呼应“成功”;
}否则{
回声“错误”;
}

为什么不检查创建的文件以查看它是否工作?您是否检查了系统中是否启用了
exec()
?exec返回输出的最后一行,这在PHP中必须等于true。@dqlopez显然是因为它给了我输出,所以才启用了它。那么长脚本呢?如何修改代码以使其能够在exec内部运行长python脚本?$return也可以为null,如果exec未能完成,例如,在命令执行过程中磁盘空间耗尽。因此,这不是傻瓜式的解决方案,请参阅我的答案以获得更好的解决方案。我已经创建了一个home.html文件,并在index.php文件中编写了您的代码,然后在浏览器中运行,它对我不起作用。其中提到如果成功,$return\u var应设置为0?“已执行命令的返回状态将写入此变量”因此,如果因为命令甚至没有完成而没有返回状态,那么它将不会被设置为任何值。这就是为什么最好检查它是否被设置为0,而不是相反。哦,我明白你的意思了,“子进程向父进程返回0表示成功的常见编程实践”:进程可以返回它们喜欢的任何结果,但惯例是使用0表示成功,所以大多数情况下,如果您使用的是任何标准工具,那么肯定是这样。其中包含的$output是什么?