質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

34288閲覧

PHPで他のPHPを実行する方法をお教えください

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

4クリップ

投稿2015/08/01 01:56

phpのexec関数を使って他のphpを実行したいと考えています。
ネットでいろいろ検索してみているのですがなかなか答えが見つからないのでお教えいただきたいと思い質問させて頂きました。

やりたいことは、「phpで他のphpを複数同時に実行したい」ということです。
WindowsのXAMMP環境(開発環境)とLinux環境(デプロイ先)です。

まず実際に複数同時に実行するphpをexecute.phpとします。
このphpは実行完了まで数秒~数十秒かかる内容です。

このexecute.phpファイルを他のphpファイル(例えばasync.php)で呼び出して実行したいです。

async.php

// execute.phpを5回呼び出して実行する for ($i = 0; $i < 5; $i++){ exec("execute.php > /dev/null &", $output, $status); var_dump($output); var_dump($status); }

上記のようにしました。
まずXAMPP環境で実行してみたところ、execute.phpが実行されずに単にexecute.phpファイルが5回開きました(Windowsのテキストエディタでファイルが開かれました)。
そして以下の出力がされました(以下の内容が5つ分)。

> array (size=0) > empty > int 0

次に以下のphpマニュアルに記載されているように、Windows環境の場合でpclose/popenで実行してみました。
http://php.net/manual/ja/function.exec.php

async.php

// execute.phpを5回呼び出して実行する for ($i = 0; $i < 5; $i++){ pclose(popen("start /B execute.php", "r")); }

しかしexec関数と同じく5回ファイルが開かれるだけでした。
どのようにすればXAMPP環境でexecを実行できるのでしょうか?

またパラメータを付与する方法もお教え頂きたいと思います。
Linus環境でしたら「execute.php param1 param2」というのはわかりますが、Windows環境ではどのように指定するのでしょうか?

お手数ですがどうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

exec("/usr/local/bin/php /path/to/exec.php > /dev/null &");
の様に、phpファイルの前に/usr/local/bin/php など、環境に応じたphp本体へのパスを指定しなければなりません。
Windowsの場合は C:\xampp\php\php でしょうか。

ローカルの開発環境と、デプロイ先の環境とで異なってきますので、自動切り替えの仕組みも含めて設定します。
いずれもコマンドラインで実行できる形式で渡さなければなりません。

投稿2015/08/01 02:23

編集2015/08/01 02:42
rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/01 12:49

ありがとうございます。 exec("C:/xampp/php/php execute.php param1 param2", $output, $status); これでいけました! Windowsには「/dev/null &」がないので非同期に実行されているのかは不安ですが…。
rik

2015/08/01 13:22

windowsでは非同期にならないようですので popen を使うと書いてありました。 すみませんが詳しくは検索して下さい。
退会済みユーザー

退会済みユーザー

2015/08/01 15:17

ありがとうございます。 popenで実行してみようと思います。 後ほど実行してみた結果についてご報告させて頂きたいと思います。
guest

0

何かシステムとしての設計の筋が悪いように見受けられます。

「phpで他のphpを複数同時に実行したい」という『実現手段』ではなく、
(具体的にこういう問題があるので、それを解決するために)
何をしたいかということを書くと、より適切な助言が得られるかもしれません。

単に「練習や技術習得のため」ということであれば失礼しました。
開発はWindows、本番はLinuxということであれば、テスト環境は
VirtualBox 等で Windows 上に Linux 環境を作れば済むような。

投稿2015/08/01 15:04

hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/01 15:16

ありがとうございます。 >何をしたいかということを書くと、より適切な助言が得られるかもしれません。 そうですね。失礼しました。 具体的に言いますと、phpで処理した結果のデータをMySQLにINSERTしたりUPDATEしたりします。 cronで1秒毎にこのphpを実行すれば、1秒毎に処理を実行できるのですがデータ数がかなり多いため1秒毎では間に合いません。 そのため複数プロセスをほぼ同時に立ち上げられるように、exec関数で呼び出せばいいのではないか?と考えました。 それとLinux環境の件ですが、すでにWindows環境で開発を進めてしまっているのと、残り期間が短いため今回はWindows環境で作業するしかない状況なのです。 将来的にVirtualBox等の導入は考えたいと思っています。 アドバイスありがとうございました。
hotta

2015/08/02 09:09

ひっきりなしに発生する大量のデータをデータベースに反映したい、 ということでしょうか? そういうことでしたら、「cronで定周期に実行する」というアプローチ ではなく、バッチ(CLI)処理内でループしながらデータ処理をすれば いいです。以下のような感じで。 #!/usr/bin/php <?php while (1) { xxxx(); // データを取り出す yyyy(); // データを保存する sleep(1); // 1秒スリープ(1秒も待てないなら usleep(us単位)) } これならデータ発生時にすぐ処理できるので、データを取りこぼすことはまずありません。 注意するべきところといえば、いわゆる画面出力は使えない(*1) ので、メッセージ等は syslog などを経由してファイルに保存する べきことくらいです。 (*1) 物理的にできなくはありませんが、その場合プログラムが終わるまで その実行している(仮想)端末を閉じることができなくなるので、現実的 ではありません。
guest

0

拡張子.phpが、エディタに関連付いているのではないでしょうか。PHP.exeに関連づけ直せば実行出来ると思います。ただ、Windowsには、/dev/nullは無いし、&もLinuxとは意味が違います。

そもそも、execのようなOS環境依存の機能を使うのに、開発環境と実行環境のOSが異なるというのはまずいと思います。

投稿2015/08/01 02:25

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/01 12:47

アドバイスありがとうございます。 そうですね、開発と実行で環境が違うのはマズイですよね…。 しかし今までずっと開発をWindows、実行をLinuxでやてきたので開発環境を変更ができないのです…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問