web-dev-qa-db-fra.com

Vérifier que exec () fonctionne correctement ou non

J'ai essayé de faire savoir si la commande exec() en php s'exécute avec succès ou non afin que je puisse faire écho à certains messages en conséquence. J'ai essayé le morceau de code suivant, mais le problème est que si exec() s'exécute correctement ou non, toujours echo "PDF not created" et jamais d'écho pdf créé avec succès. Veuillez me faire savoir comment puis-je effectuer la vérification de l'exécution de exec () afin que je puisse faire écho aux messages en conséquence Merci,

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

Selon PHP exec quickref , vous pouvez passer des pointeurs pour obtenir la sortie et l'état de la commande.

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

Si vous souhaitez énumérer les erreurs possibles, vous pouvez trouver les codes sur hiteksoftware

59
Matt Williamson

La bonne façon est de vérifier que la variable $ return_var n'a pas été définie sur zéro car elle n'est définie sur zéro qu'en cas de succès. Dans certains cas, l'exec peut échouer et le return_var n'est défini sur rien. Par exemple. si le serveur a manqué d'espace disque pendant l'exécution.

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

?>

Remarque: n'initialisez pas $ return_var à zéro

13
malhal

Un échantillon simple:

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

En cas de non ping ou d'ERREUR. (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

En cas de succès (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
4
deepcell