Processコンポーネント

Processコンポーネントを使うと、サブプロセスでコマンドを実行することができます。

インストール

コンポーネントをインストールする方法は何通りもあります。

  • 公式Gitレポジトリ (https://github.com/symfony/Process);
  • PEARコマンドでインストール ( pear.symfony.com/Process);
  • Composerを使ってインストール (Packagistの`symfony/process`).

使用方法

:class:Symfony\Component\Process\Process クラスを使うとサブプロセスでコマンドを実行することができます。

use Symfony\Component\Process\Process;

$process = new Process('ls -lsa');
$process->setTimeout(3600);
$process->run();
if (!$process->isSuccessful()) {
    throw new RuntimeException($process->getErrorOutput());
}

print $process->getOutput();

:method::Symfony\\Component\\Process\\Process:run メソッドは実行される際にプラットフォーム間の軽微な差異を考慮してくれます。

(リモートサーバーへのrsyncのような)長いコマンドを実行する時、 :method::Symfony\\Component\\Process\\Process:run メソッドに無名関数を渡すことで、エンドユーザーに対するリアルタイムなフィードバックを表示させることができます。

use Symfony\Component\Process\Process;

$process = new Process('ls -lsa');
$process->run(function ($type, $buffer) {
    if ('err' === $type) {
        echo 'ERR > '.$buffer;
    } else {
        echo 'OUT > '.$buffer;
    }
});

何かPHPコードを独立して実行させたい時は、代わりに``PhpProcess``クラスを使ってください。

use Symfony\Component\Process\PhpProcess;

$process = new PhpProcess(<<<EOF
    <?php echo 'Hello World'; ?>
EOF);
$process->run();

New in version 2.1: ProcessBuilder は2.1で追加されました。

全てのプラットフォームでよりよく動かしたいなら、代わりに :class:Symfony\\Component\\Process\\ProcessBuilder クラスを使うと良いかもしれません:

use Symfony\Component\Process\ProcessBuilder;

$builder = new ProcessBuilder(array('ls', '-lsa'));
$builder->getProcess()->run();

このページのコンテンツ

前のドキュメント

Finderコンポーネント

次のドキュメント

YAMLコンポーネント

ソース



クイックリンク


現在、翻訳が古くなっている箇所が多くあります。1箇所、1行などほんの少量でもかまいませんので、ドキュメント翻訳にご協力いただける方を募集しています。日本 Symfony ユーザー会メーリングリストまでご連絡ください。