- ベストアンサー
phpのrequireに関するエラーの原因と解決方法
- php初心者が複数のrequire文を使用している中で、特定のrequire文が機能しない場合があります。原因として、パス指定の誤りやファイルの存在確認が必要です。
- 変数名の重複によりrequireした関数が実行されない場合がありますが、関数の中であれば別の変数として扱われます。そのため、変数名の重複の原因ではないと考えられます。
- 構文チェックでシンタックスエラーがないことやログにエラーメッセージが表示されないことから、エラーの原因はパス指定の誤りやファイルの存在確認にある可能性が高いです。正しいパス指定と必要なファイルが存在しているかを確認してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お礼に書いてあることがよく分かりません。 分かるところだけ見ると、 <?php echo "1"; require (dirname(__FILE__)."/include/******.inc"); echo "2"; で、2が表示されないと言うことは、requireしているものに間違いがあると言うことです。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
情報が少なすぎます。 現象が発生するコードを省略せずに全部載せてください。 現象の発生に関係ない部分は削除してもかまいませんが。
お礼
notnotさん、すみません。 自分の世界にはいちゃってました、失礼しました。 (親) <?php require (dirname(__FILE__)."/include/******.inc"); require (dirname(__FILE__)."/include/******chk.php"); require (dirname(__FILE__)."/../include/******m.inc"); require (dirname(__FILE__)."/m******.php"); require (dirname(__FILE__)."/m******andom.php"); require (dirname(__FILE__)."/m******time_client.php"); require (dirname(__FILE__)."/error_******.php"); require (dirname(__FILE__)."/log******.php"); global 変数1; (使う変数をglobal) global 変数2; echo "処理start"; ・ ・ ・ ?> のようなソースコードで、動かすと何も表示されないので、1行ずつ echo をいれてみました。 <?php echo "1"; require (dirname(__FILE__)."/include/******.inc"); echo "2"; require (dirname(__FILE__)."/include/******chk.php"); echo "3"; require (dirname(__FILE__)."/../include/******m.inc"); echo "4"; require (dirname(__FILE__)."/m******.php"); echo "5"; require (dirname(__FILE__)."/m******andom.php"); echo "6"; require (dirname(__FILE__)."/m******time_client.php"); echo "7"; require (dirname(__FILE__)."/error_******.php"); echo "8"; require (dirname(__FILE__)."/log******.php"); echo "9"; のように。 そうすると 1 しか表示されなかったんです。 順番を入れ替えたりして 123 まで表示された、、、。でも4が表示されない。 拡張子incは、変数のみの定義です。 requirしているphpファイルも使用するincファイルは同じなので、それぞれ のソース内で requireしています。 それぞれのphpは (呼ばれるほうのphp) function ***() { require (dirname(__FILE__)."/include/******.inc"); ・ global 変数1; global 変数3; (使う変数のみglobal) ・ ・ } と、同じincファイルをrequireしています。 こんな感じです。 呼び元(親)と、呼ばれるほうで同じincファイルの同じ変数を使う場合があります。 呼ばれるほうは 関数内なので影響ないと思っていますが、呼ばれるほうでもglobal としています。 (こういう使い方であっていますか?) すみません、これでわかりますでしょうか? よろしくお願いします。
お礼
notnotさん、ありがとうございます。 ##で、2が表示されないと言うことは、 ##requireしているものに間違いがあると言うことです。 間違いということは構文エラーですか? 単純に変数に値を入れてあるだけですが、もう一度確認してみます。 親でrequireとglobalした変数の書かれている同じファイルを子(呼ばれる方)でもrequireして global xxxx(変数名) と記述しても問題ないですよね? または親でrequireしてglobal 記述している変数は 子ではrequireしないで、ただglobal記述したほうがいいのでしょうか? 親も子も同じ変数を global (親はrequireし、子はrequireしない)で 参照する、、、みたいに。 よろしくお願いします。