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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

5095閲覧

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

keisei-001

総合スコア15

PHP

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2019/09/30 16:42

編集2019/10/01 01:01

現在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

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

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

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

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

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

m.ts10806

2019/10/01 00:47

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

2019/10/01 00:53

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

2019/10/01 00:56

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

2019/10/01 01:01

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

回答2

0

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

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

Apache モジュール mod_env 参照

投稿2019/09/30 21:26

編集2019/09/30 21:30
CHERRY

総合スコア25171

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

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

keisei-001

2019/09/30 22:37 編集

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

退会済みユーザー

2019/09/30 22:43

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

2019/10/01 00: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にたどり着けない状態です。。 初歩的なことかもしれませんがご教授いただけたら助かります。 よろしくお願いいたします。
guest

0

ベストアンサー

.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 02:24

yu_1985

総合スコア7447

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

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

keisei-001

2019/10/01 06:47

ご回答ありがとうございます。 ユーザーはec2-userです。ユーザーを別で設定ができるのですね。。 サーバーはAmazon Linuxです。 bashについて等も理解が追いついていないですが後ほど再トライしたいとおもいます!
keisei-001

2019/10/01 15:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問