2

背景情報: 私は自分のサーバー (localhost) で自己ホスト型の Facebook アプリを開発しており、すべてが機能しています。最近、ファイルを共有ホスティング オンライン サーバー (hostgator) にアップロードしたところ、奇妙なバグが発生しました。

私の require_once() 関数は、hostgator サーバーの相対パスを無視しているようです。たとえば、index.php には、require_once('fb/login.php') があります。これにより、example.com/login.php のファイルが見つからないというエラーがスローされます。require() がパスの fb 部分を無視するのはなぜですか? これは、私のプライベート localhost サーバーでは問題なく動作することを覚えておいてください。私はいくつかのグーグルを行い、php.ini に移動して include_path=".:" を有効にすることで問題の半分を解決しました。これで最初のエラーはなくなりましたが、login.php にも require_once('fb/sdk/Facebook.php') があり、そのファイルを見つけることができません。ネストされたrequireで面倒になることは理解していますが、これは私のローカルホストサーバーで機能します。どちらのサーバーも PHP5 であり、php.ini ファイルが類似していることを確認しました。デフォルトでは、localhost の php.ini には include_path がコメントされています。オンラインの php.ini ファイルをローカルホストのファイルに置き換えることさえしました。それでも、何もありません。絶対パスを使用してみましたが、機能しますが、コード全体に多くのインクルードとリクエストがあり、すべてのパスにコードを渡したくありません。洞察はありますか?これは本当に腹立たしい問題であり、簡単な解決策があることを願っています。

ありがとうございました!


さて、私はたくさんの調査を行い、最終的に $_SERVER['DOCUMENT_ROOT'].'fb/login.php' をすべての必須およびインクルードのパスとして使用しました。私の問題はすべて解決しました、神に感謝します

4

3 に答える 3

2

あなたが今経験しているようなトラブルを避けるために、私はずっと前に相対パスの使用をやめました。すべての PHP フレームワークと同じように行うことを検討してください。サーバーのルートが正確にどこにあるかを示す変数を定義し、それを使用してファイルへの絶対パスを構築できます。

これをルートの index.php ファイルに追加することで、これを行うことができます。

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

次に、すべてのrequireステートメントを調べて、最初に DOCROOT を追加するだけです。

require_once('fb/login.php');

になります:

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

グローバル検索を実行して、置換することで置換することもできrequire_once('ますrequire_once(DOCROOT . '

于 2012-04-19T05:13:10.507 に答える
1

私はそれを解決する方法を知っているとは言えませんが、ディレクトリの問題で何度か行ったことは次のとおりです。

最初getcwd()に、使用しているファイルを呼び出して、require_once自分が本当にどこにいるのかを確認します。

./fb/第二に、代わりに試してくださいfb/

于 2012-04-19T04:53:30.200 に答える
0

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

あるいは単にrequire_once('/fb/login.php');

于 2012-04-19T04:51:21.637 に答える