46

phpのコマンドが正常に実行されるかどうかを知らせようとしているexec()ので、それに応じて特定のメッセージをエコーできます。私は次のコードを試しましたが、問題は、exec()正常に実行されるかどうかにかかわらず、常にecho "PDF not created"正常に作成されたpdfをエコーし​​ないことです。exec()の実行をチェックして、それに応じてメッセージをエコーできるようにする方法を教えてください。ありがとうございます。

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

5 に答える 5

72

PHPのexecquickrefによると、コマンドの出力とステータスを取得するためにポインタを渡すことができます。

<?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でコードを見つけることができます。

于 2012-08-09T02:20:23.893 に答える
15

正しい方法は、$ 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をゼロに初期化しないでください

于 2016-03-24T21:07:47.903 に答える
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またはエラーが発生しない場合。( 1 )

----------------
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
于 2012-08-09T02:24:24.640 に答える
0

私は私のために働きます

システムlinuxおよびlang:php、laravelの場合

exec('/usr/bin/tesseract 2.png out1 -l '.$lang,$output,$error);
           return (!$error)? "success":"Error";
于 2020-11-19T16:11:56.140 に答える
0

リターンコードを気にしない場合は、次の方法を使用することをお勧めします。

private function execCommand($command) {
    exec($command, $output, $return);

    return $return === 0;
}

次に、単に次のように呼び出します。

if ($this->execCommand("C://abc//wkhtmltopdf home.html sample.pdf")) {
    echo "Success";
} else {
    echo "Error";
}
于 2021-02-18T13:12:42.103 に答える