ホームページ  >  記事  >  バックエンド開発  >  php shell_exec() コマンドの使用法_PHP チュートリアル

php shell_exec() コマンドの使用法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:10:053014ブラウズ

PHP CLI SAPI を使用すると、PHP でサポートされるシェル スクリプト (デスクトップ ベースのスクリプトも含む) を開発できます。実際、このツールは PHP コマンド ラインから実行できます。このようにして、PHP 開発者は、Perl、AWK、Ruby、またはシェル プログラマーと同じくらい生産性を高めることができます。この記事では、PHP が実行される基盤となるシェル環境とファイル システムを理解できるようにするために、PHP に組み込まれているツールについて説明します。 PHP は、shell_exec()、exec()、passthru()、system() など、外部コマンドを実行するための関数を多数提供します。これらのコマンドは似ていますが、実行する外部プログラムに対して異なるインターフェイスを提供します。これらのコマンドはすべて、指定したコマンドまたはスクリプトを実行する子プロセスを生成し、各子プロセスは標準出力 (stdout) に書き込まれるコマンド出力をキャプチャします。

PHP CLI SAPI を使用すると、PHP でサポートされるシェル スクリプト (デスクトップベースのスクリプトも含む) を開発できます。実際、このツールは PHP コマンド ラインから実行できます。このようにして、PHP 開発者は、Perl、AWK、Ruby、またはシェル プログラマーと同じくらい生産性を高めることができます。この記事では、PHP が実行される基盤となるシェル環境とファイル システムを理解できるようにするために、PHP に組み込まれているツールについて説明します。 PHP は、shell_exec()、exec()、passthru()、system() など、外部コマンドを実行するための関数を多数提供します。これらのコマンドは似ていますが、実行する外部プログラムに対して異なるインターフェイスを提供します。これらのコマンドはすべて、指定したコマンドまたはスクリプトを実行する子プロセスを生成し、各子プロセスは標準出力 (stdout) に書き込まれるコマンド出力をキャプチャします。

shell_exec()

リスト 1. バッククォートを使用して単語の数をカウントします
次のようにコードをコピーします:

#! /bin/sh
number_of_words=`wc -w *.txt`
echo $number_of_words

# 結果は次のようになります:
#165 readme.txt 388 results.txt 588 summary.txt
#and so on....

PHP スクリプトでは、次のように、shell_exec() コマンドでこれを実行できます。リスト 2 のように実行すると、望ましい結果が得られます。ここでは、同じディレクトリにいくつかのテキストファイルが存在すると仮定します。

リスト 2.shell_exec() で同じコマンドを実行します。
次のようにコードをコピーします。 >

図 1 からわかるように、得られる結果はシェル スクリプトから得られるものと同じです。これは、shell_exec() を使用すると、シェルを通じて外部プログラムを実行し、結果を文字列として返すことができるためです。
図 1.shell_exec() 経由でシェル コマンドを実行した結果

以下に示すように、末尾のアポストロフィ演算子を使用するだけでも同じ結果が得られることに注意してください。
リスト 3. 末尾のアポストロフィ演算子のみを使用する


$results = `wc -w *.txt`;


リスト 4 Giveもっと簡単な方法が見つかりました。
リスト 4. より簡単な方法

次のようにコードをコピーします:

echo `wc -w *.txt`;
UNIX コマンドラインとシェルを使用して多くのことが実行できます。スクリプト、これは重要な点です。たとえば、パイプを使用してコマンドを接続できます。演算子を使用してその中にシェル スクリプトを作成し、そのシェル スクリプトを呼び出すこともできます (必要に応じてパラメータありまたはパラメータなし)。


たとえば、ディレクトリ内の最初の 5 つのテキスト ファイルの単語数のみをカウントしたい場合は、垂直バー (|) を使用して wc コマンドと head コマンドを接続できます。あるいは、以下に示すように、出力を pre タグ内に配置して、Web ブラウザーでより美しくレンダリングすることもできます。

リスト 5. より複雑なシェル コマンド
次のようにコードをコピーします。

$results =shell_exec('wc -w *.txt | head -5');

echo "".$results . "";

?>

図 2 は、リスト 5 のスクリプトを実行した結果を示しています。

図 2. より複雑なシェル コマンドを実行した shell_exec() の結果

この記事の後半では、PHP を使用してこれらのスクリプトに引数を渡す方法を学習します。これをシェル コマンドを実行する方法と考えることができますが、表示できるのは標準出力のみであることに注意してください。コマンドまたはスクリプトでエラーが発生した場合、パイプ経由で標準エラー (stderr) を stdout に追加しない限り、標準エラー (stderr) は表示されません。

公式ウェブサイト参照

define("__USED_CHARS__", "abcdefghijklmnopqrstuvwxyz0123456789");
define("__CASE_SENSITIVE__", true) // 上記の文字列を使用するか、大文字/小文字のバリアントを使用します

$bf = newchargen(2); // 新しいchargenオブジェクト、長さ2

$bf->generate("whois") // 文字を生成し、whois関数を呼び出す

function whois($str)
{

$domain = $ str .".com";

$retval =shell_exec("whois $domain");

if (eregi("no match", $retval))
echo $domain." is availablen";
else
else
echo $domain." is unavailablen";

}


クラス料金
{
プライベート $chars = NULL ;

private $maxlength = NULL;

protected $buffer = NULL;


function generated($mycallback = false)
{
foreach ($this->buffer as $char)
{
foreach ($this-> ;chars として $nextchar)
{
$retval = $char.$nextchar;

$this-&g t;buffer[$retval] = $retval;


if ($mycallback && function_exists($mycallback))
$mycallback( $ retval); mycallback);
}

function __construct($maxlength = 8)

{

$chars = array();

$this->buffer = array();

array_push($this->buffer, "" );

for ($i = 0; $i {
$index = substr(__USED_CHARS__, $i, 1);
if(__case_sensitive __)

{
$ this-> chars [$ index] = $ index;
}
{
$ this-> chars [strtolower($ index)] = strtolower($ index); $this->chars[strtoupper($index)] = strtoupper($index);
}
}

$this->maxlength = $maxlength;
}

}

?>



http://www.bkjia.com/PHPjc/444752.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444752.html技術記事 PHP CLI SAPI は、PHP でサポートされているシェル スクリプト (たとえセッション セクションに基づくものであっても) を公開することを許可します。実際には、PHP コマンドを使用して実行できるツールです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。