背景情報: 私は自分のサーバー(localhost)上に自己ホスト型Facebookアプリケーションを開発していて、すべて機能しています。最近、共有ホスティングオンラインサーバー(hostgator)にファイルをアップロードし、奇妙なバグが発生しました。PHPでの相対パスがサーバー上で動作しない
私のrequire_once()関数は、hostgatorサーバー上の相対パスを無視するようです。たとえば、index.phpには、require_once( 'fb/login.php')があります。これにより、example.com/login.phpのファイルが見つからないというエラーが表示されます。なぜrequire()は私のパスのfb部分を無視するのですか?覚えておいて、これは私のプライベートなローカルホストサーバー上で完璧に動作します。 私はいくつかのグーグルを行い、問題の半分をphp.iniに入れ、include_path = ".:"を有効にして解決しました。これは最初のエラーを取り除きましたが、login.phpにrequire_once( 'fb/sdk/Facebook.php')もあり、そのファイルを見つけることができません。私はそれがネストされた要求と乱雑になることを理解しますが、これは私のlocalhostサーバーで動作します。 両方のサーバーがPHP5であり、php.iniファイルが似ていることを確認しました。デフォルトでは、ローカルホストphp.iniにはinclude_pathがコメントされています。オンラインphp.iniファイルを自分のlocalhostファイルに置き換えるまでにさえ遠くに行きました。まだ、何も。 絶対パスを使用しようとしましたが、それらは機能しますが、多くのインクルードとコードを必要とするため、すべての単一パスにコードを渡す必要はありません。どんな洞察?これは本当に怒っている問題です。私は簡単な解決策があることを願っています。
ありがとうございました!
は、まあ、私は研究のトンを行なったし、$ _SERVER [「DOCUMENT_ROOT」]を使用して終了。必要であり、含まれて私のすべてのための私のパスとして「FB/login.php」。すべての私の問題を修正しました、神に感謝
さて、これはとても奇妙です。 ROOTをdirname(_FILE_)に設定し、ROOTが必要な場合"fb/login.php";それは動作しませんが、もし私が最初にROOTをエコーしたら。 "fb/login.php";それを必要とする、それは正常に動作します。どうしたの? – Kevinatclutr
これは本当に非常に奇妙です。それがうまくいかないと言うと、何もしないという意味ですか、何かエラーメッセージが表示されていますか?エラーメッセージが表示されない場合は、error_reporting(E_ALL | E_STRICT)を使用してレポートレベルを変更してみてください。 –
さて、私はたくさんの研究を行い、$ _SERVER ['DOCUMENT_ROOT']、 'fb/login.php'を私の必要とするすべてのもののためのパスとして使い終わった。私のすべての問題を修正しました、神に感謝します。 – Kevinatclutr