2012-08-09 140 views
25

我一直在試圖讓知道知道如果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

回答

43

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

4

找到代碼在一個簡單的例子:

$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

10

正確的方法是,以檢查$ 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