2012-04-19 27 views
2

背景情報: 私は自分のサーバー(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」。すべての私の問題を修正しました、神に感謝

答えて

2

を試してみてください。すべてのPHPフレームワークと同様に、サーバのルートが正確にどこにあるかを示す変数を定義し、それを使ってファイルへの絶対パスを構築することができます。

define('DOCROOT', realpath(dirname(__FILE__)).'/'); 

その後、それはすべてあなたのrequire文を経由して最初のDOCROOTを追加するだけです:

あなたはあなたにルートindex.phpファイルを、これを追加することによってそれを行うことができます

require_once('fb/login.php'); 

次のようになります。

require_once(DOCROOT . 'fb/login.php'); 

グローバル検索と代替eを置き換えてrequire_once('require_once(DOCROOT . '

+0

さて、これはとても奇妙です。 ROOTをdirname(_FILE_)に設定し、ROOTが必要な場合"fb/login.php";それは動作しませんが、もし私が最初にROOTをエコーし​​たら。 "fb/login.php";それを必要とする、それは正常に動作します。どうしたの? – Kevinatclutr

+0

これは本当に非常に奇妙です。それがうまくいかないと言うと、何もしないという意味ですか、何かエラーメッセージが表示されていますか?エラーメッセージが表示されない場合は、error_reporting(E_ALL | E_STRICT)を使用してレポートレベルを変更してみてください。 –

+0

さて、私はたくさんの研究を行い、$ _SERVER ['DOCUMENT_ROOT']、 'fb/login.php'を私の必要とするすべてのもののためのパスとして使い終わった。私のすべての問題を修正しました、神に感謝します。 – Kevinatclutr

0

php.iniファイルを変更する代わりにrequire_once('../fb/login.php');を試してみませんか?

か、単にrequire_once('/fb/login.php');

1
私はそれを解決する方法を知っているが、ここで私は、ディレクトリの問題で数回やったことであると言うことはできません

最初のものは、ファイルにgetcwd()を呼び出すことですあなたrequire_onceを使用して、あなたが本当にあなたがどこにいると思いますかを確認してください。

第二に、私はあなたが今通過している問題の種類を回避するために、長い時間前に相対パスを使用して停止した./fb/の代わりfb/

+0

何か非常に奇妙なことが起こった。私は私のインデックスの先頭にecho getcwd()を追加しました。PHPはすべてうまくロードしましたが、www.example.com/login.phpが見つからないというエラーを投げました。非常に非常に奇妙です。 getcwd()を追加するだけではうまくいきません。 – Kevinatclutr

+0

さて、これはとても奇妙です。 ROOTが必要な場合。 "fb/login.php";それは動作しませんが、もし私が最初にROOTをエコーし​​たら。 "fb/login.php";それを必要とする、それは正常に動作します。どうしたの? – Kevinatclutr

関連する問題