joppot

コピペで絶対動く。説明を妥協しない

サーバ

apache2.4でvirtualhost毎に環境変数を定義しphpで使用する方法

投稿日:2017年1月16日 更新日:

Pocket

setapacheenvhtumb

概要

みなさんこんにちはcandleです。
今回はapache2.4でバーチャルホスト毎に環境変数を定義して、それをphp側で受け取る方法を紹介します。

例えば、wordpressで開発をしていて、
gitの管理下にパスワードやデータベース名を起きたくない時に、
apache側で定義してgetenvで読み込んで使うことができます。


前提

apache2.4
適当なphpが動くプロジェクト
適当なバーチャルホストの設定がある

もしもバーチャルホストの設定ができていない場合はこちらの記事を参考にしてください。
Macのhostsとapache2.4でvirtualhostを使ってプロジェクトごとにsubdomainを設ける

SPONSORED LINK


環境変数の設定

brewで入れたapacheの場合は以下のディレクトリにapacheの設定ファイルがあります。

/usr/local/etc/apache2/2.4/httpd.conf

このファイルを開き、まずはmodが有効になっているか確認します。

LoadModule env_module libexec/mod_env.so

を探してコメントアウトを外します。
commentinmodenv

次に、例えば以下のようなバーチャルホストがあったとします。

alicelocal

このの中に以下のように環境変数を記述すれば、設定できます。
試しにHELLO_WORDという環境変数を定義します。

<VirtualHost *:8080>
  ServerName alice.localhost
  DocumentRoot /Users/candle/apache/alice_blog
  SetEnv HELLO_WORD 'hello'

  <Directory "/Users/candle/apache/alice_blog">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

追記)

環境変数を任意のディレクトリ以下に適応したい場合は、<Directory>を使います。
これを使うと指定したディレクトリ以下に環境変数を適応することができます。
例えば、上の例ではDocumentRootは/Users/candle/apache/alice_blogですが、
これをapacheディレクトリ以下全てに環境変数を使いたい場合は以下のようにかきます。

<Directory "/Users/candle/apache">
  SetEnv GOOD_BYE 'bye'
</Directory>

するとalice.localhsotのバーチャルホストにきた時だけ、GOOD_BYE =’bye’が/Users/candle/apacheに適応されます。

apacheの設定は以上です。

php側で使う

結論から書くとapache側で設定したENVは「getenv」か「$_SERVER」で受け取れます。
上の例では以下のようになります。

getenv('HELLO_WORD');
$_SERVER['HELLO_WORD']

試しに表示してみましょう。

php側に適当なファイルを作って環境変数を受け取ってみます。

上のapacheの設定でしている通り、
ルートディレクトリは「/Users/candle/apache/alice_blog」なのでそこにinfo.phpを作成します。

touch /Users/candle/apache/alice_blog/info.php

中に以下のようなコードを書きます。

<?php
echo "getenv: ".getenv('HELLO_WORD');
echo "<br />";
echo "SERVER: ".$_SERVER['HELLO_WORD'];
echo "<br />";
echo "ENV: ".$_ENV['HELLO_WORD'];
?>

echozaemon

保存してアクセスしてみます。

showenvdata-1

どうでしょう。getenvと$_SERVERで取得できていますね。


まとめ

バーチャルホスト毎に環境変数を定義すれば、同一の環境変数名でもアクセスるサイトによって値を変更できるので便利ですね。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

vagrantで取得したlet’s encryptのssl証明書をec2のnginxで使用する

概要 みなさんこんにちはcandleです。今回は取得したvagrantのubuntuで取得したlet’s encryptを実際に使用してみます。 もしも、まだ取得してない人は前回の記事を確 …

awsのec2上でredmineをnginxで使用する方法

概要 みなさんこんにちはcandleです。今回はredmineをec2上で使用する方法を紹介します。 redmineはrailsで作られたwebアプリケーションです。railsで作られているということ …

td-agent-uiのセットアップとfluent-catで動作確認

English 日本語 概要 みなさんこんにちはcandleです。今回はtd-agent-uiのセットアップと動作確認をしてみたいと思います。 td-agentはfluentdをよりサーバで運用しやす …

fluentdでrails logをtailで直接取得する方法

概要 追記) この記事はだいぶ古くなってしまったので、新しく書き直しました。 こちらの方を参照した方が多分良いことが書いてあります。 https://joppot.info/2017/03/17/35 …

centos6.5にtd-agentサーバを構築する

English 日本語 概要 みなさん、こんにちはcandleです。 今回はcentos6.5にtd-agentサーバを構築してみたいと思います。 td-agentとは要はfluentdの事だと思いま …

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

twitter

スポンサードリンク

アーカイブ