🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Q&A

解決済

1回答

1488閲覧

apacheサーバーにてNode.JS, PHP7.4の併用と両デバッガー設定が可能かどうか

F.Drake

総合スコア4

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

0グッド

0クリップ

投稿2020/12/19 17:22

編集2020/12/19 17:33

よろしくお願いいたします。

mac OS: Catarina 10.15.4
IDE:VSCODE
PHP 7.4.13
Node.js v15.4.0.

【目的】 VSCODEでapacheサーバーを利用してJS,PHPの学習環境と 各デバッガーを実装させたい

先日、JS,PHPの学習用にbrewで落としたapacheサーバーと学習用ディレクトの紐付けを行い、phpinfo()の動作を確認できたところまで完了したのですが、今後適応させたい処理としてはPHPデバッグ用にXdebugを使えるようにしたいと思っております。

また、JSに関しても可能であれば同一のディレクトリファイルにて確認していきたいと思っているのですが、そもそもNode.JSは同一ディレクトリ(apacheのルートディレクトリに指定した)で動く環境が作れるものなのでしょうか。

また、Node.JSに関してもphpXdebugと同じようなデバッガーを実装したいと思っておりますが、同じような環境を作り、VSCODE内でそれぞれのデバッガーを動かしながら学習を進めていく環境を作れるのでしょうか。

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

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

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

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

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

hentaiman

2020/12/19 18:17

出来るよって言われて終わりだと思う
F.Drake

2020/12/19 18:25

なるほどです。 可能であるなら色々調べてみようと思います。 ご回答ありがとうございました。
hentaiman

2020/12/19 18:30

本気か nodejsとphpは別物で考えた方が良いよ まずはphpとapacheだけで作業してapacheの使い方をそれなりに理解した時点でnodejsを追加した方が良い 言ってる事の意味分からんと思うけど、やれば(理解が進めば)分かる
F.Drake

2020/12/19 18:32

理解が乏しいので仰るとおりもう少し勉強してみます。 助言通りphpとapache環境を整理してからnodeの方を考えてみます。 ありがとうございました。
hentaiman

2020/12/19 18:40

ちなみにphpはどのように動かしてますか?mod_php?
hentaiman

2020/12/19 18:44

まあいいや phpの場合はmod_phpを使う事で簡単にapacheとphpの連携が出来るけど、nodejsにはそれはありません php-fpmで動かしているのなら同じ要領でnodejsも動かせるので頑張ってください
F.Drake

2020/12/19 18:46

えっと、mod_phpを理解していないのですが、 brewでインストしたphp@7.4をapacheのhttps.confでLoadmodule php7_module(これがmod_phpでしょうか?)で指定していますー
F.Drake

2020/12/19 18:51

そうなのですね。 apacheだからLoadModuleの表記で動かせるのですか. ということはnodeと簡単紐付け用のmodule指定ができない場合はapacheで実装できないのか、別の方法を取るのか....むむむ。という感じですね 調べてみますね。ありがとうございました。
guest

回答1

0

ベストアンサー

Webサーバ、Apache、PHP、Node.jsの関係性をちゃんと理解しましょう。

Webサーバは、OSのTCP80番ポートでHTTPリクエストを待ち受け、
HTTPリクエストが来たらHTTPレスポンスを返すものを指します。


ApacheとWebサーバの関係を解説します。

ApacheはWebサーバを手軽に実現する為の一つのアプリケーションです。
URLのパス部とパソコンの特定のディレクトリを=で紐付けて
http://localhost/index.htmlを要求されたら、/var/www/html/index.htmlを探してあればそれを返す仕組みになっています。
(この/var/www/html/index.htmlというパスはApacheの設定を弄る事で柔軟に変更出来ます)

Apacheはそういうソフトなので、
http://localhost/index.phpを要求されたら、
/var/www/html/index.phpファイルの中身をただ投げ返すだけです。
PHPの場合はそれを実行して、動的なHTMLを作ってほしいのでそういう挙動をされては困ります。


PHPとApacheの関係を解説します。

多くの言語(Node.js、Ruby、Python等)はWebサーバを自前で構築して配信する形ですが、
PHPはApacheのモジュールとして組み込んでWebサーバを実現するという方針になっています。
ビルトインウェブサーバー - PHPマニュアル

まぁ、ApacheだけがPHPの全てではなく、IISやFastCGIなんかもその対象ですけど。
サーバー固有のモジュール - PHPマニュアル

Apacheに組み込むmod_phpがPHP側から提供されており、
それを組み込んだ上でApacheを立ち上げると
裏でPHPのプロセスを4個程同時並行で起動させてスタンバイさせます。
HTTPリクエストで.phpの拡張子のファイルが呼ばれた場合、このPHPプロセスを中継して動的なHTMLファイルを生成してHTTPレスポンスとして宛てがいます。

(この辺は単にApacheとmod_phpの設定次第なので、特定のディレクトリだけに適用したり、html拡張子のファイル等でもPHPプロセスを中継させる事が可能です。)


さて、最後にApacheとNode.jsの関係について解説します。

基本的にNode.jsは自前のWebサーバを構築して運用することを想定している為、
PHPのmod_phpのようなモジュールは存在しません。
なのでApacheを起動させるだけでよしなにやってくれるような事はありません。

なのでNode.jsで出来る事を知り、
その上でどうやってApache+PHPと関わっていくのかを決めなければなりません。

例えば、ブラウザはHTML、CSS、JSファイルしか認識出来ませんが、
Node.jsにはPugSassTypeScriptからこれらのコードを生成することも可能です。
生成して吐き出す先のディレクトリを/var/www/html/配下のディレクトリに設定してApacheの静的ファイル配信Webサーバを使って閲覧して動作検証するとか。

LaravelなんかのWebフレームワークでは、
フロントエンド用のファイルをNode.jsで生成するという連携をする設計で作られているようです。

投稿2020/12/21 02:32

miyabi-sun

総合スコア21203

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

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

F.Drake

2020/12/21 06:02

ご丁寧に解説まで頂ききまして、 ご回答のほどありがとうございます???? 帰宅しましたら、しっかり読ませて頂きます。 本当にご貴重な意見ありがとうございました。
F.Drake

2020/12/24 14:12

ご回答読ませていただきました。かなりわかりやすいです。 恐縮ですがいくつかご質問させていただけますと幸いです。 1.TCP80番ポートによる GETメソッドの受付ですが、こちらはCGIもしくはapacheのようなwebサーバーで受け付けたい場合は80ポート限定なのでしょうか。ポートをずらして運用するというのはできるものなのでしょうか。 2.記載いただいたモジュールでのapacheの仕組みについてですが、/var/www/html/index.htmlとはこちらで設定したapacheのListenポート(およびlocalhost)にアクセスした際に手元のwebサーバー経由で表示したいディレクトリ ルートを指している認識で間違いな方でしょうか。 localhostにアクセスすると/var/www/html/index.html通るという認識でした。 また、apacheの動きは単にそのファイル(ここではindex.html)を返すだけとのことですが、その際の動的なhtmlの作成とはまだ作られていない、ファイルをindex.htmlにアクセスすることで新たに作成するような動きが困難だということなのでしょうか。。。 3.認識が甘そうなのですが、CGIとapacheの仕組みについてですが webサーバーはapacheなどを除けば通常は中継処理をしているようなものなのでしょうか。 apacheのモジュール(mod_php)とは本来phpコンパイル処理などを司っていないwebサーバー(CGIなど)とは違ってサーバーがphp処理までになっているように作られており、apacheの場合はmod_phpとしてそういう機能を提供しているという印象を受けました。 それとは別にnginxやcgiにおいては単に中継処理をする為にアクセスを受け付けたサーバーはphp-fpmなどに処理をパスする中継処理を行う。またそのような設定をapacheのように提供していない為に自前で作っていくということなのでしょうか。 すみません....かなり質問長くなってしまいました。お忙しいと思いますので、もしも時間あれば回答などいただけますと幸いに存じます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問