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

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

ただいまの
回答率

89.55%

ec2でphpをデプロイしているが$_ENVで取得できない。。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 242

keisei-001

score 4

現在phpをec2に入れて本番環境を構築したのですが
Notice: Undefined index: とのエラーが出ております。
config.phpにはデータベースへ接続するための情報を置いており、そこで
var_dumpをし環境変数を確認しましたら0件で取得ができていないようでした。
環境変数をec2の中の.bash_profileに記述しておりecho $DSN 等をし存在を確認できるのですがなぜかうまくいかない状態です。
ちなみに最初デプロイをしたときはec2再起動で一旦画面の表示がされていたんですが、ローカル上で修正をし、再度デプロイした時にはエラーがでているという状態です。
最初のデプロイの時には表示されていたのに2度目でダメになる理由が分からないです。
何かこれじゃない的なことが分かったら助かりますです。。
よろしくお願いします。

エラーメッセージ

Notice: Undefined index: DSN in /var/www/html/config/config.php on line 9

### 該当のソースコード
<?php
ini_set("display_errors", 1);
if ($_SERVER["SERVER_NAME"] === "localhost"){
define("PDO_DSN", "mysql:dbname=cooking_app;host=localhost;charset=utf8;unix_socket=/tmp/mysql.sock");
define("DB_USERNAME", "cooking_user");
define("DB_PASSWORD", "gonta1026");
} else {
define("PDO_DSN", $_ENV["DSN"]);
define("DB_USERNAME", $_ENV["DB_USER"]);
define("DB_PASSWORD", $_ENV["DB_PASSWORD"]);
}
define("SITE_URL", "http://" . $_SERVER["HTTP_HOST"]);
$dbh = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
require_once(__DIR__ . "/../lib/functions.php");
?>

下記.bash_profileの内容です。個人情報は******で隠しています。
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export DSN="mysql:dbname=cooking_app;host=**********************************;charset=utf8;unix_socket=/tmp/mysql.sock"
export DB_USER="**********"
export DB_PASSWORD="********"

~                                                                               

ソースコード

試したこと

色々と調べてみるとec2の再起動をすることで環境変数を読み込めるという記事があったこちらはやりましたがダメでした。
.htaccessやhttpd.confで環境変数を設定できるとあったのですがこちらは調べてるんですがまだ理解できておらずできておりません。

補足情報(FW/ツールのバージョンなど)

webサーバーはApache
dbサーバーはmysql8.0
php7.2.21

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/10/01 09:47

    誤字が目立つので調整願います。(下記は一例)
    htacccess →.htaccess
    appache → Apache

    キャンセル

  • keisei-001

    2019/10/01 09:53

    申し訳ありません。誤字修正しました。

    キャンセル

  • m.ts10806

    2019/10/01 09:56

    たまに更新反映されないteratail側のバグがあるので、画面再アクセスして反映確認してください

    キャンセル

  • keisei-001

    2019/10/01 10:01

    再度修正をし確認しました。

    キャンセル

回答 2

+4

質問に記載された .bash_profile の内容は、Webサーバーの起動ユーザーの .bash_profile に設定しているのでしょうか?

apache で、あれば、httpd.conf に SetEnv ディレクティブを使用することで環境変数を設定可能です。

Apache モジュール mod_env 参照

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/01 07:06

    コメントとしてぶら下げますが、nginx だとちょっと厄介なんですよねぇ。。。w
    ここから調査を始めると良いと思います。
    https://stackoverflow.com/questions/8098927/nginx-variables-similar-to-setenv-in-apache

    キャンセル

  • 2019/10/01 07:35 編集

    webサーバーにはapacheをいれています!ユーザーは@ec2ユーザーです!
    httpd.confに設定できるかやってみます!

    キャンセル

  • 2019/10/01 07:43

    あー環境見てませんでした。

    キャンセル

  • 2019/10/01 09:18

    今httpd.confの場所を確認しているのですが
    httpd -v で調べると

    -D SERVER_CONFIG_FILE="conf/httpd.conf"

    表示されまして、ec2内のルートディレクトリーの直下にはconfというフォルダが見当たりません。。

    which confと入力をすると、
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
    上記のような表示になり、httpd.confにたどり着けない状態です。。
    初歩的なことかもしれませんがご教授いただけたら助かります。
    よろしくお願いいたします。

    キャンセル

checkベストアンサー

+2

.bash_profileを設定したのがどのユーザか書いてありませんが、恐らくec2-userかと思います。
通常であればApacheの実行ユーザとサーバログインに使うユーザは異なります。

そもそもの話として.bash_profileは、.bash_profileを設定したユーザがログインシェルとしてbashを起動したときに読み込まれるファイルなので、シェルを起動しないWEBサーバの実行ユーザでもし設定したとしてもあまり意味はないと思います。(恐らくhttpdの実行ユーザはデフォルトならnologinになっているはず)

ちなみにwhichコマンドは実行可能なコマンドの配置パスを探すコマンドなので通常のファイルを探したいならfindを使いましょう。
サーバはAmazon Linuxでしょうか?
デフォルトであれば一般的にApacheの設定ファイルは/etc/httpd/下にあります。

自分はPHPで扱うWEBサーバについてはそれほど詳しくないので作法的な部分まではわかりませんが、
Apacheの設定でセットした環境変数は
getenv$_SERVERで取得するようです。
参考
https://joppot.info/2017/01/16/3334
$_ENVはPHPのグローバル変数のようなのでもしかしたらPHP側でセットした環境変数の取得に使うのかもしれません(このあたりは詳しい人の解説を聞きたいです。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/01 15:47

    ご回答ありがとうございます。
    ユーザーはec2-userです。ユーザーを別で設定ができるのですね。。
    サーバーはAmazon Linuxです。

    bashについて等も理解が追いついていないですが後ほど再トライしたいとおもいます!

    キャンセル

  • 2019/10/02 00:33

    環境変数の設定できました。
    ファイル自体はここにありました!
    /etc/httpd/conf.d/httpd.conf
    ありがとうございました!

    キャンセル

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

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る