检查exec()是否成功运行

问题描述:

我一直在试图让知道知道如果PHP中的exec()命令执行成功与否,所以我可以相应地回复某些消息。 我试了下面这段代码,但它的问题是,exec()是否成功运行,它总是echo "PDF not created",并从未成功创建回声pdf。请让我知道我可以在EXEC的执行(执行检查),这样我就可以相应地回响消息 感谢,检查exec()是否成功运行

<?php 
if (exec('C://abc//wkhtmltopdf home.html sample.pdf')) 
echo "PDF Created Successfully"; 
else 
echo "PDF not created"; 
?> 
+0

为什么不检查创建的文件,看看它是否有效? – 2012-08-09 02:16:42

+0

你是否检查过你的系统中是否启用了'exec()'? – deex 2012-08-09 02:17:19

+0

Exec返回输出的最后一行,这必须在PHP中等同于true。 – 2012-08-09 02:18:48

根据PHP的exec quickref,你可以通过指针获得的输出和状态命令。

<?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"; 
} 
?> 

如果要列举可能出现的错误,你可以在hiteksoftware

+2

感谢代码工作就像一个魅力! – 2012-08-09 02:24:58

+0

很好听! – 2012-08-09 02:34:26

+0

长脚本怎么样?我如何修改代码以使其在exec内运行长python脚本? – proprius 2016-02-03 15:08:52

找到代码在一个简单的例子:

$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); 

在无法ping或错误的情况下。 (一)

---------------- 
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 

在成功(ZERO)

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 
+0

http://php.net/manual/pt_BR/function.exec.php – B4NZ41 2012-08-09 02:25:43

正确的方法是,以检查$ 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_var零

+0

它提到$ return_var应该设置为0如果成功? – 2016-04-05 12:55:12

+0

“执行的命令的返回状态将写入此变量”http://php.net/manual/en/function.exec.php所以如果没有返回状态,因为该命令甚至没有完成,那么它不会被设置为任何东西。这是检查设置为0而不是其他方式更好的原因。 – malhal 2016-04-05 12:58:49

+0

哦,我明白你的意思,“一个儿童流程的常用编程实践将零归零,表示成功”:https://en.wikipedia.org/wiki/Exit_status – malhal 2016-04-05 12:59:55