• ベストアンサー

phpのプロセスについて

例えばperlだとhoge.cgiとhuga.cgiが動くと2つプロセスが立ち上がりますがphpだと1つで済むのですか? 例えばhoge.phpとhuga.phpが動いても1つのプロセスで済むのですか?

  • flash0
  • お礼率97% (297/306)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5085/13292)
回答No.2

> ApacheのモジュールとしてPHPがインストールされた環境で実行します であれば、PHPのプログラムはApacheの子プロセスの一部として実行されます。 Apacheは親プロセスはブラウザーからのアクセスを受付けるだけで、受付た後の処理は子プロセスに引継ぎ子プロセスとブラウザーの間で通信が行われます。 > requireで読み込むと子プロセスも1つになるのですか? PHP自体の実行としては、ファイルが別々でもincludeやrequireで読み込んだプログラムは一つのプログラムとして実行されます。 実際には最初に呼ばれたファイルを開き、includeやrequireされたファイルを開きながら一つのプログラムとしてメモリ上に展開します。 メモリ上に展開したPHPプログラムをPHPの言語エンジンで実行するためのプログラムとしてコンパイルを行い、コンパイル結果を言語エンジンで実行します。 従って1つ1つのファイル毎に実行される訳ではありませんので、ブラウザからの1回のリクエストは1つのプロセスで処理することになります。 但し、PHPのアクセラレータを使用すると若干動作が変わります。 > 子プロセスとゆうのはオーバヘッドにはあまり関係ないですか? 何のオーバーヘッドでしょうか。 Apacheの子プロセス自体は、親プロセスがApacheの設定情報に基づき必要数を予め作成してリザーブしていますので、ブラウザーからアクセスがあってから子プロセスに処理が引き継がれるまでのオーバーヘッドは気にするほどでは無いと思います。 よほど突発的にアクセスが急増するような状況で無い限り、アクセスが来てから子プロセスを作成するような動作にはならないと思います。

flash0
質問者

お礼

丁寧な回答ありがとうございました(_ _ phpが優れている理由がわかった気がします

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5085/13292)
回答No.1

PHPのプログラムをどうやって実行するか次第です。 コマンドラインから別々に実行すれば、それぞれは別プロセスです。 ApacheのモジュールとしてPHPがインストールされた環境で実行したら、Apacheの子プロセスの一つで実行されるので、子プロセスとしてみれば別々だけど親プロセスは一つです。 また、hoge.phpがhuga.phpにincludeされて実行されるのであれば、どのような実行方法でも一つのプロセスとして実行されます。

flash0
質問者

お礼

お答え頂きありがとうございます ApacheのモジュールとしてPHPがインストールされた環境で実行します requireで読み込むと子プロセスも1つになるのですか? 子プロセスとゆうのはオーバヘッドにはあまり関係ないですか?

関連するQ&A

  • PHPがCGIより負荷が小さい理由はなんですか

    PHPがCGI/Perlより負荷が小さくなる理由はなんですか? アクセス数が増えたときCGI/Perlではプロセスがたくさん起動 するためだときいたのですが、なぜPHPではひとつのプロセスで すむのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでプロセスとCGI

    Linuxサーバーで、PHPを使ってWWWページが見れるようになったのですが、 これをApacheのプロセスで動作させる方法と、CGIで動作させる方法の仕方が知りたいです。 また、現在どちら(Apacheのプロセス/CGI)で動いているかもわかりませんので、それを区別する方法はあるのでしょうか? がCGIでなくてApacheのプロセスで動いている

    • ベストアンサー
    • PHP
  • PHPの不等式に変数を使う

    いつもお世話になります PHPの不等式に変数を使うことは出来ますでしょうか? 例えば $a = 'huga'; $b = 'huga'; if($a == $b){ echo 'hoge'; } 結果 hoge 右辺と左辺の間、不等式を変数にしたいです $a = 'huga'; $b = 'huga'; $c = '==' if($a $c $b){ echo 'hoge'; } 期待する結果 hoge 上のソースはもちろんパースエラーとなり成り立ちません 型変換や考えられるキーワードで検索したのですが、出てきませんでした 下のように strpos()、strstr()等で$cの内容を解析して、条件分岐すれば期待の結果が出せるのは分かります if( strpos($c,'==') !== false && $a == $b){ echo 'hoge'; } (上記で成り立つのは分かります) 教えていただきたい内容は、「不等式を変数で成り立たせる方法」です $c= '=='; PHPに詳しい方お教えいただけると嬉しいです

    • ベストアンサー
    • PHP
  • perlとphpの共用?

    phpで定義した関数をperlから読み込む、又はその逆をしたいのですが 可能なのでしょうか? たとえばphpの関数をperlが読む場合? phpスクリプト <? $hoge = 'hoge1'; ?> となっていた場合にperlで読む場合にはどうすればいいでしょうか? 又上記の場合が可能である場合に $hoge を const HOGE = 'hode1'; とした場合でも可能なのでしょうか?

    • ベストアンサー
    • PHP
  • PHP コードを文字列として出力する方法

    お世話になります ダブルクォーテーションで囲っても 「PHP コード」を「文字列」として出力する方法 つまり、evalの逆の関数のようなものはありますでしょうか $a['huga'] = 2; $b['hoge'] = 3; //式 $c = $a['huga'] * $b['hoge'] ; abc($c = $a['huga'] * $b['hoge'] ); function abc($str){ //ここでなんちゃらほんちゃら //もしくはfunctionの外側でなんちゃらもでも可 echo $str; } 期待する出力結果 $c = $a['huga'] * $b['hoge'] ; 実際の結果 6 $の前に¥を入れてダブルクォーテーションで囲めば、 または、シングルクォーテーションの前に¥を入れてシングルクォーテーションで囲めば 文字列になるのはわかりますが 式の文字列には直接、手を加えず関数等で実現するやり方が知りたいです ※連想配列のキーの囲み文字はシングルクォーテーションです、ダブルに出来ない条件でお願いします。 お忙しい中恐縮ですが熟練者の方でわかる方がいましたら お教え下さいませ

    • ベストアンサー
    • PHP
  • PHPがあればCGIは使わない

    掲示板を作ってみたいです。 とりあえず仕事に使うわけでもないし、あくまで趣味の範囲なので覚えやすいと言われるPHPを勉強してみようと思いました。 昔から掲示板作りにはCGIというものが必要というイメージがあり、CGIを勉強できる本を探したところ、Perlとセットのタイトルを持つ本ばかりで「CGI/PHP入門」みたいなのはありませんでした。 もしかしてPerlで掲示板を作るにはCGIが必要と言うだけで、PHPなら単独で掲示板が作れるのでCGIは必要ないということなんでしょうか?

    • ベストアンサー
    • PHP
  • CGI版PHPについて

    一般的なPerlのCGIが実行可能な状態のApache(Linux上)にCGI版のPHPを追加インストールした場合、ApacheはスクリプトがPerlであるかPHPであるかの違いをどう認識するのでしょうか? 方法1 スクリプトはどちらも*.cgiとして作成し、スクリプト内先頭行のperlやphpへのパスの記述で認識する 方法2 perl→*.cgi php→*.php のようにhttpd.confや.htaccessで設定する 初心者のためこの二つくらいしか思い浮かばないのですが、どちらかが正解だったりしますか??

    • ベストアンサー
    • PHP
  • 指定プログラムのプロセスを監視・killするには?

    CGIが不正終了(もしくは無限ループ)して、CPUに負担をかけ続けることで悩んでいます。 topコマンドで負担をかけているプロセスを発見してkillすることは可能ですが、これを自動で実行するようなことはできないでしょうか。 cronを使って1分間に1度チェックし、3分以上同じプロセスが動いている場合にkillしたり、もしくは不具合の起こる特定のプログラム(hoge.cgi等)を監視してkillするということができるようにしたいのです。 自分で考えたのは「top -n 1」で出力して、3分間同じプロセスがCPUに負担をかけ続けている場合にkillできるようにphpなどでプログラミングすることでしたが、もっと簡単にできるような方法がありますでしょうか。

  • UserDirでCGI版PHPを動作させたい

    お世話になります。 最終的にはsuexecでの動作を目指しておりますが、その前段として UserDirでのCGI版PHPの動作をさせようとしています。 DocumentRoot配下でのCGI版PHPの動作には以下のような設定で成功しました。 [httpd.conf] Action php56-cgi /cgi-bin/php-5.6.27 <Directory "/usr/local/apache2/htdocs/php5test"> Options FollowSymLinks Includes ExecCGI AddHandler php56-cgi .php .html Require all granted </Directory> <IfModule alias_module> : ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" : </IfModule> # ls -l /usr/local/apache2/cgi-bin/php-5.6.27 lrwxrwxrwx 1 root root 22 11月 8 14:58 php-5.6.27 -> /usr/local/bin/php-cgi* /usr/local/apache2/htdocs/php5test/に置いた whoami.php の内容 <?php echo 'Current script owner: ' . get_current_user() . "<br><br>\n"; $current_user = trim(shell_exec('whoami')); echo 'Current user: ' . $current_user . "<br><br>\n"; $c_time = date("Y年n月j日(D) Ah:i"); print("Current time: $c_time<br>\n") ?> http://xx.xx.xx.xx/php5test/whoami.php Current script owner: root Current user: apache Current time: 2016年11月10日... と表示されます。 -------------------------------------------------------------------- ここから本題です。 $ mkdir /home/hoge/php56 $ cd /home/hoge/php56 $ ln -s /usr/local/bin/php-cgi php-5.6.27 $ ls -l lrwxrwxrwx 1 hoge hoge 22 11月 10 11:47 php-5.6.27 -> /usr/local/bin/php-cgi* $ ls -l /home drwxrwxr-x 30 hoge hoge 4096 11月 10 11:43 hoge/ $ ls -l /home/hoge drwxr-xr-x 2 hoge hoge 4096 11月 10 11:47 php56/ drwxr-xr-x 2 hoge hoge 4096 11月 10 10:41 public_html/ $ ls -l /home/hoge/public_html -rw-r--r-- 1 hoge hoge 331 11月 10 10:41 whoami.php [httpd.conf] <IfModule alias_module>内に ScriptAlias /hoge-php/ "/home/hoge/php56" を追加しました。 UserDir public_html Action hoge-php56 /hoge-php/php-5.6.27 <Directory "/home/hoge/public_html"> Options Indexes FollowSymLinks ExecCGI AddHandler hoge-php56 .php .html Require all granted </Directory> ブラウザで閲覧すると http://xx.xx.xx.xx/~hoge/whoami.php forbidden You don't have permision to access /hoge-php/php-5.6.27/~hoge/whoami.php となります。 ScriptAlias, Action がよく理解できていませんので ご指導よろしくお願いします。

    • 締切済み
    • PHP
  • PHP 未経験者

    PHP未経験者の無知な疑問です。サーバ環境さえあれば perl-CGIの中の一部をPHPで書いても大丈夫でしょうか?。 動くのであればperlで全部つくるより 変更できる部分はPHPを混ぜた方が動作的に良いのでしょうか?。

    • ベストアンサー
    • PHP