質問: 現在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 ``` ### 該当のソースコード 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
回答: `.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側でセットした環境変数の取得に使うのかもしれません(このあたりは詳しい人の解説を聞きたいです。)