2009-05-21 14 views
7

バッチファイルのように、別のPHPスクリプトから複数のPHPスクリプトを実行するにはどうすればよいですか?私はインクルードが何をしているのか分かっていればインクルードはうまくいくとは思わない。私が実行しているファイルのそれぞれが同じ関数などを再宣言するからです。私が望むのは、変数、関数などを知らないできれいな新鮮なスタックのように、それぞれの新しいPHPスクリプトを実行することです。それの前に来た。バッチファイルのようなPHPスクリプトから複数のPHPスクリプトを実行するにはどうすればよいですか?

更新:スクリプトはWindowsでは実行されているが、Webサーバーでは実行されていないと言わざるを得ない。

答えて

10

exec()関数を使用して、各スクリプトを外部コマンドとして呼び出すことができます。

<?php 

exec('php -q script1.php'); 
exec('php -q script2.php'); 

?> 

Execはそれを取り巻くいくつかのセキュリティ上の問題があるが、それはあなたのために働くかもしれないように聞こえる:

はたとえば、あなたのスクリプトが行うことができます。

+1

-qは何ですか?それはまだ関係がありますか?私はマニュアルページを探していて、それを静かに実行します。どういう意味ですか?出力や何かを抑える? – Fallenreaper

6

//は、私は、各ファイルへのリンクを含むフレームセットを作成するような何かをやった昔のexec http://www.php.net/manual/en/function.exec.php

<?php 

exec('/usr/local/bin/php somefile1.php'); 
exec('/usr/local/bin/php somefile2.php'); 

?> 

を使用しています。フレームセットを呼び出すと、すべてのスクリプトが呼び出されます。あなたは最近、iframeやajaxで同じことをすることができます。

3

exec()はうまく機能しますが、親スクリプトを使い続けるためにプロセスが終了するまで待つ必要があります。各プロセスに少し時間がかかるプロセスのバッチを実行しているなら、popen()を使うことをお勧めします。

あなたが得る変数はパイプへのポインタを作成します。パイプを使って一度にいくつかのプロセスを実行し、配列に格納してから、それらがすべて完了した後にシリアル速度ですべてアクセスしますさらに同時に)steam_get_contents()を使用します。

これは、メモリを大量に消費したり、計算集約型ではなく、それぞれが完了するまでにかなりの時間がかかるスクリプトを実行している場合に特に便利です。

3

これらのスクリプトの返品結果が必要な場合は、system機能を使用することができます。

$result = system('php myscript.php'); 
$otherresult = system('php myotherscript.php'); 
関連する問題