ホームページ >バックエンド開発 >PHPチュートリアル >Linux_PHP チュートリアルでは php exec の戻り値を負にすることはできません

Linux_PHP チュートリアルでは php exec の戻り値を負にすることはできません

WBOY
WBOYオリジナル
2016-07-13 10:56:16919ブラウズ

Linux の php exec の戻り値は負の値にはなりません。必要な場合は参照してください。

まずはexec関数の使い方を学びましょう

実行()
原型:

コードは次のとおりです コードをコピー
string exec (string command [, string array [, int return_var]])

exec () 関数は system () と似ていますが、指定されたコマンドを実行しますが、結果は出力されず、結果の最後の行が返されます。コマンド結果の最後の行のみを返しますが、2 番目のパラメーター配列を使用すると、配列の最後に結果を 1 行ずつ追加することで完全な結果を取得できます。したがって、配列が空でない場合は、呼び出す前に unset() を使用して配列をクリアするのが最善です。第3パラメータは第2パラメータを指定した場合のみ、コマンド実行時のステータスコードを取得できます。
例:

3 番目のパラメータ、なぜ負の数値を受け入れられないのですか?? ここでの &$return_var はプログラムの戻り値です。最初の私の答えは、負の数を指定できるというものでした。 一般的にC言語では次のように書きます
コードは次のとおりです コードをコピー
exec("/bin/ls -l"); exec("/bin/ls -l", $res); exec("/bin/ls -l", $res, $rc);



コードは次のとおりです

コードをコピー #include int main() { 注: 多くの人は C コードで main 関数を void main() として記述しますが、これは実際には間違っているため、詳細は説明しません。 上記のコードをコンパイルした後、CMD で実行すると、出力結果を確認できます。次に、「echo %ERRORLEVEL%」と入力して Enter キーを押すと、プログラムの戻り値が表示されます。この %ERRORLEVEL% は、プログラムの戻りステータスを表します。確かに、WIN では負の数になる可能性があります
#include
Printf("^_^n");
-5 を返します;
}




この-5は戻り値ですが、0か1で書くのが慣例です。

、PHP 呼び出しも正常です。

コードは次のとおりです

コードをコピー しかし、Linux では、この値は常に正の数になります。私は最初、権限の問題ではないかと疑っていましたが、chmod +x を使用した後、権限の問題は解決されました。
E:devphp535>php -r "exec('return.exe',$out,$a);var_dump($a);"

int(-2)


コードは次のとおりです

コードをコピー var_dump($out,$a); 配列(1) { [0]=> 文字列(3) "^_^" } int(251)
exec("/home/wwwroot/test/rtest.out 2>&1",$out,$a);


256+return val のようになります。実際には負の数が返されますが、正の数に変換されていることがわかります。
次に、standard/exec.c のソース コードを調べましたが、何の手がかりも見つかりませんでした。そして、あるステップを忘れていたことに突然気づきました。プログラムがOSに返す値を見るのを忘れていました
echo $? を使用すると、最後のコマンドのステータスを表示できます。

コードは次のとおりです コードをコピー
-bash-3.00$ vi main.c
-bash-3.00$ gcc -o ./mm main.c
-bash-3.00$ll
合計48
drwxr-xr-x 3 www www 4096 2011 年 5 月 4 日 2011
drwxr-xr-x 6 www www 4096 2011 年 6 月 23 日 eoc
-rwxr-xr-x 1 www www 7131 2月1日 12:47 こんにちは
-rw-r--r-- 1 www www 3 2月1日 12:51 hello.c
-rw-r--r-- 1 www www 99 2月1日 12:50 main.c
-rwxr-xr-x 1 www www 4714 2 月 1 日 12:51 mm
drwxr-xr-x 3 www www 4096 2011 年 6 月 24 日のテスト
-bash-3.00$ ./mm
^_^
-bash-3.00$ エコー $?
251
-バッシュ-3.00$

このようにして、exec が OS に返す値を確認できます。
Linux では、この戻り値は符号なし型で正の数を返すため、PHP に渡されるときも、実際には exec 呼び出しによって返される値になります。

たぶん Linux ではプログラムの戻り値は 1 ~ 255 の範囲で規定されているのでしょうが、このルールはわかりません。ただし、これが Linux に当てはまるかどうかはまだ確認されていません。この質問は痛ましいものであり、あまり重要ではありませんが、同様の問題に遭遇した人の参考のためにここに残しておくことができます。しかし、ここで詳細に立ち入る必要はありません。本当に徹底的に理解したい場合は、シェルを見てください

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632189.html技術記事 Linux の php exec の戻り値は負の値にすることはできません。必要な場合は参照してください。 まず、exec 関数 exec() プロトタイプの使用方法について学びましょう。コードは次のとおりです。コードをコピーしてください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。