1. ホーム
  2. php

[解決済み] PHP Fatal Error 必要なファイルを開くことができません。

2022-02-05 20:18:16

質問

Apacheで以下のエラーが発生します。

[Sat Mar 19 23:10:50 2011] [warn] mod_fcgid: stderr: PHP Fatal error: require_once() [function.require]: /home/viapics1/public_html/common/configs/config.inc.php の行158にある 必須 '/common/configs/config_templates.inc.php' (include_path='.:/usr/share/pear:/usr/share/php') でオープン失敗しました。

私はApacheの専門家ではありませんが、config.inc.php & config_templates.inc.phpは存在します。また、common/configs/に置いたtest.htmlのページに移動してみたので、権利の問題は起こっていないと思います。また、config_templates.inc.phpの権限を設定し、全員に読み取り、書き込み、実行権限を与えています。この時点でどうしたらいいのかわかりません。/usr/share/phpディレクトリがあるかどうか確認したところ、ありませんでしたが、yum install phpをしたところ、最新のものが入っているとのことでした。アイデアはありますか?

解決方法は?

実は、Apacheに関連した質問ではありません。また、PHPに関連するものでもありません。 このエラーを理解するためには、以下のパスを区別する必要があります。 仮想サーバー のパスと ファイルシステム .

require 演算子はファイルに対して機能します。しかし、このようなパスは

                          /common/configs/config_templates.inc.php

は仮想 HTTP サーバー上にのみ存在し、ファイルシステム上にはそのようなパスは存在しません。正しいファイルシステムのパスは

/home/viapics1/public_html/common/configs/config_templates.inc.php

ここで

/home/viapics1/public_html

という部分があります。 ドキュメントルート で、仮想世界と現実世界をつなぐものです。幸運なことに、ウェブサーバーは通常ドキュメントルートを設定変数に格納しており、PHPと共有しています。ですから、コードを次のようなものに変更すればよいのです。

require_once $_SERVER['DOCUMENT_ROOT'].'/common/configs/config_templates.inc.php';

は、どのディレクトリに置かれたどのファイルからでも動作します!

更新:結局、解説記事を書きました。 相対パスと絶対パスの違い ファイルシステムとウェブサーバーにおいて、この問題を詳細に説明し、いくつかの実用的な解決策を含んでいます。例えば、コマンドラインからスクリプトを実行した場合、このような便利な変数は存在しない。この場合、シングル・エントリー・ポイントと呼ばれるテクニックが役に立つ。詳しくは、上記の記事を参照してください。