2012-08-09 41 views
25

Tôi đã cố gắng để biết biết nếu lệnh exec() trong php thực hiện thành công hay không vì vậy tôi có thể lặp lại một số thư phù hợp. Tôi đã thử đoạn mã sau nhưng vấn đề với nó là liệu exec() có chạy thành công hay không luôn là echo "PDF not created" và không bao giờ tạo ra tiếng vang pdf thành công. Vui lòng cho tôi biết làm thế nào tôi có thể thực hiện việc kiểm tra về việc thực hiện exec() vì vậy tôi có thể echo thông điệp phù hợp Cảm ơn,Kiểm tra exec() chạy thành công hay không

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

Tại sao không chỉ cần kiểm tra các tập tin được tạo ra để xem nếu nó làm việc? –

+0

bạn đã kiểm tra liệu 'exec()' có được bật trong hệ thống của bạn không? – deex

+0

Exec trả về dòng cuối cùng của đầu ra, và phải tương đương với đúng trong PHP. –

Trả lời

43

Theo PHP exec quickref, bạn có thể vượt qua con trỏ trong để có được sản lượng và tình trạng của lệnh.

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

Nếu bạn muốn liệt kê các lỗi có thể, bạn có thể tìm thấy các mã qua tại hiteksoftware

+2

Nhờ mã làm việc như một sự quyến rũ !! –

+0

thật tuyệt khi nghe! –

+0

Còn các tập lệnh dài thì sao? làm thế nào để tôi sửa đổi mã để làm cho nó hoạt động để chạy các kịch bản python dài bên trong exec? – proprius

4

Một mẫu đơn giản:

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

Trong trường hợp không ping hoặc LỖI. (ONE)

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

Trong trường hợp thành công (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

10

Cách đúng là để kiểm tra xem $ return_var không được thiết lập để không bởi vì nó chỉ được thiết lập để không khi nó thành công. Trong một số trường hợp, exec có thể thất bại và return_var không được đặt thành bất kỳ thứ gì. Ví dụ. nếu máy chủ hết dung lượng đĩa trong khi thực thi.

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

?> 

Lưu ý: không khởi $ return_var để zero

+0

Trường hợp được đề cập rằng $ return_var nên được đặt thành 0 nếu thành công? –

+0

"trạng thái trả về của lệnh được thực hiện sẽ được ghi vào biến này" http://php.net/manual/en/function.exec.php Vì vậy, nếu không có trạng thái trả về vì lệnh này thậm chí không kết thúc thì nó sẽ không được đặt thành bất cứ thứ gì. Đây là lý do tốt hơn nên kiểm tra xem nó có được đặt thành 0 thay vì cách khác không. – malhal

+0

Ồ, tôi hiểu ý bạn là gì, "thực hành lập trình thông thường cho một tiến trình con để trả lại không cho cha mẹ biểu thị thành công": https://en.wikipedia.org/wiki/Exit_status – malhal

Các vấn đề liên quan