ローカル開発環境とサーバ環境

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,254

ryohasegawa

score 120

PHPでプログラムを書いていて、

//  config.php
<?php

//  エラー表示
ini_set('display_errors', 1);
//  データベース接続設定
define('DSN', 'mysql:host=**************;dbname=********');
define('DB_USERNAME', '******');
define('DB_PASSWORD', '************');


define('SITE_URL', 'http://' . $_SERVER['HTTP_HOST']);
define('SITE_NAME'," | alpha");
define('HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/');
define('LOGIN', 'http://' . $_SERVER['HTTP_HOST'] . '/login.php');
define('SIGNUP','http://' . $_SERVER['HTTP_HOST'] . '/signup.php');
define('MUSIC_HOME_URL', 'http://' . $_SERVER['HTTP_HOST']."/music");

//  ファイル読み込み
require_once(__DIR__ . '/../lib/functions.php');
require_once(__DIR__ . '/autoload.php');

session_start();
<?php
//  test.php

require_once($_SERVER['DOCUMENT_ROOT'] . '/../config/config.php');
?>
<a href="<?= HOME ?>"><p>リンク</p></a>


リンクなどに使うと、ローカル開発環境ではきちんとページを飛ばしてくれるんですが、サーバーにアップして実行すると下のようなエラーが表示し、URLのところに/<br~からがはいります。

Not Found

The requested URL /<br /><b>Notice</b>: Use of undefined constant HOME - assumed 'HOME' in <b>/home/ryo/www/public/test.php</b> on line <b>6</b><br />HOME was not found on this server.

環境

ローカル開発環境はMacで、PHPは7です。
サーバ環境はCentOS7でPHPは7です。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • 退会済みユーザー

    退会済みユーザー

    2017/05/22 00:23

    もしそうでなかったらごめんなさい><

    キャンセル

  • ryohasegawa

    2017/05/22 00:39

    呼び出してます。そこらあたりだけを追記します。

    キャンセル

  • ryohasegawa

    2017/05/22 00:43

    require_once($_SERVER['DOCUMENT_ROOT'] . '/../config/config.php'); で呼んでますが、ローカル開発環境ではうまく動いているので、パスがズレてるということは考えてませんでした。実際そういう事ってありますか?

    キャンセル

回答 4

+3

そのエラーで検索すると理由がわかると思いますよ。

<a href="<?= HOME ?><p>リンク</p></a>

の部分にエラーの原因がありますので、よくみてデバッグしてみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/22 23:05

    ありがとうございます。
    <a href="<?= HOME ?>"><p>リンク</p></a>
    ですね。
    これは、こちらのサイトに書き込んだ時の入力ミスでした。
    実際コードはきちんと閉じられてました。
    指摘ありがとうございます。

    キャンセル

  • 2017/05/23 09:31

    検索しなくても、機械翻訳するだけで分かる気がする。

    キャンセル

  • 2017/05/23 22:36

    HOME was not found on this server. と言われているんですが、config.phpで定義してあるように、HOMEに飛ぶと思うんです・・・
    ローカルでも動きますし・・・

    キャンセル

checkベストアンサー

+1

現象をまとめます。

エラーメッセージ
質問にある通り、test.php(現象再現用のスクリプト),config.phpの利用で、

Use of undefined constant HOME


のエラーが発生

変数の正常性の確認
test.phpの中で、var_dump(HOME)を実行すると、意図した内容http://hogehoge/が表示される。

スクリプトの正常性の確認
ローカル環境では、<a href="<?= HOME ?>"><p>リンク</p></a>=><a href="http://hogehoge/"><p>リンク</p></a>と正常に記述される。


上記の変数の正常性の記述が曖昧ですが、私の解釈が正しいとすると、エラーメッセージと内容が合致しません。
現象は上記で正しいでしょうか?

変数の正常性の確認方法が、config.phpでの確認であったのであれば、config.phpが読み込めていないという単純なエラーなんですけどね。。。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/25 00:00

    Apacheの再起動+ファイルの再アップをしたら読み込まれて実行されました・・・
    なぜでしょう?

    キャンセル

  • 2017/05/25 00:08

    直ってしまったのであれば、こちらでは何とも。。。
    履歴管理していれば、差分が見れると思いますが、分からないでしょうね。
    事例として興味があったんですが、原因不明のままとか残念です。

    キャンセル

  • 2017/05/25 00:12

    解決?できて良かったです。
    ありがとうございました。

    キャンセル

0

<?php
echo realpath($_SERVER['DOCUMENT_ROOT'] . '/../config/config.php');
?>

とやって、出たパスにちゃんとconfig.phpが存在するか確認してみましょう。
あるとすると、その中で、HOMEという定数が定義されているか確認しましょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/22 23:56 編集

    それと、<?php var_dump(HOME); ?> を実行してみたら、きちんと、string(24) "http://192.168.12.9:9090" データは受け取ってます。(ローカル内では動くのでそうでしょうけど)

    キャンセル

  • 2017/05/23 00:27

    ん?HOMEは定義されていたんですか?

    キャンセル

  • 2017/05/23 22:33

    config.phpで定義してあり、それを読み込んでいるので定義はされているはずです。
    実際、var_dumpで見てデータも表示されるので・・・

    キャンセル

0

1つ目のPHPがconfig.phpで2つ目のphpがheader.phpでいいんですかね?
違ってたらいけないのでファイル名も記述お願いします。

上記前提ですが、Notice出てるのがheader.phpのline 10なんですよね。提示のコードだと4行目に見えますが、前後省略されてますか?
なるべく省略されない方がいいですよ。今回は違うかもしれませんが、実は省略した部分に原因が潜んでいたってこともありますので。
「データベース関連の事もかいてあるので厳しいです。」とありますが、Noticeエラーメッセージのパスをそのまま書いてしまってるところとかちょっと危ないかなとも思いますし・・・
データベース関係のところはXXXXXとか伏字にすればいいのかなと思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/23 09:19 編集

    ちょっと下記お試しください。
    ・define('HOME', 'http://&#039; . $_SERVER['HTTP_HOST'] . '/');をheader.phpに書く(configをrequireしてる前と後で1パターンずつ)
     Constant HOME already definedと出ればdefineが通ってることになります(二重定義となるので)
    ・config.phpのdefine直後に echo HOMEをしてみる。(実行するのはconfig.php、header.phpそれぞれ)

    キャンセル

  • 2017/05/23 22:32

    解答に対するコメントです。
    質問を編集させていただきました。
    それとheader.php のエラーの出る箇所(<a href="<?= HOME ?>"><p>リンク</p></a>)だけを完結に実行するため、test.phpという新たなファイルにししました。
    そのコードとエラーコードを書き換えました。
    これでわかりやすくなったと思います。
    ちなみに、ローカル環境では、リンク先にうまく飛びます。

    キャンセル

  • 2017/05/24 06:43

    CENTOS環境が準備できてないので何とも言えませんが、short_open_tagが有効になってないかも確認してみてください。
    http://www.over-rabbit.com/pc/pc-diary/228
    ↑のようにサーバ(php.ini含めて)環境の設定くらいしか思いつかないですね。
    「HOME」という名前が名前なので予約語的な感じでサーバー上で使えない可能性もありますし。「HOME」以外の名称にしてみても通るか確認してみてください。(多分これ以上のアドバイスが難しいです・・)

    キャンセル

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

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

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