2

タイトルがわかりにくいですが、質問は簡単です。

私は持っている:

config.php

include('config_mysql.php');
include('language/english.php');

それから私は持っています:index.php

include('config.php');

そして: /ajax/ajax_vote.php

include('../config.php');

とのindex.php両方が含まれているのに、のみが含まれているのはなぜですか?config_mysql.phplanguage/english.phpajax/ajax_vote.phpconfig_mysql.php

4

3 に答える 3

0

オイゲンが言ったことは本当です。これは、ベースパスが含まれているスクリプトと同じではないためです。

また、私のテストから(同様の問題に遭遇したため)、ファイルを含めるときにphp include()が別の一時的なinclude_pathを保存するようです。これがajax_vote.phpにconfig_mysql.phpを含めることができる理由です。自分自身を納得させるために、config_mysql.php を ajax フォルダーに移動してみてください。これは同じように機能し、config.php はそれを含めることができます (ただし、index.php ではなく、ajax_vote.php を実行する場合のみ!)。この場合、'/ajax/' と '/' の 2 つのインクルード パスがあります。

ただし、パス (インクルードするファイル名だけでなく、文字列でフォルダーも指定する) を使用する場合、インクルード パスは実行中のスクリプトのみに基づきます (例: '/ajax/' のみ)。

次のようにして、この動作を修正できます。

include(dirname(__FILE__).'/language/english.php'); // don't forget the prepended '/'

あるいは単に:

include('/language/english.php'); // here again the prepended '/'

ただし、2 番目の方法が機能する理由をまだ完全には理解していないことを警告します。dirname() で最初の方法を使用する方が安全かもしれません。

/編集: include('/path/to/file') はおそらく Windows OS のバグであることがわかりました: Windows では dirname(__ FILE__ ) と同じですが、UNIX ではルート パスと同じです。したがって、 dirname(__ FILE__ ) は間違いなく信頼性が高くなります。

于 2012-08-23T14:55:10.147 に答える
0

のベース フォルダーinclude()は常に元のスクリプトのベース フォルダーであるため、 d スクリプトinclude()内の sinclude()は直感的ではありません。

ajax/ajax_vote.php含める(しようとする)

ajax/../config.php
  -> ajax/sonfig_mysql.php
     ajax/language/english.php

あなたは見たいかもしれません

$BASEDIR=dirname(__FILE__);
include("$BASEDIR/config_mysql.php");
include("$BASEDIR/language/english.php");

と友達。

于 2012-06-10T15:16:15.763 に答える
0

その理由は、 がlanguage/english.phpと同じディレクトリにないためですconfig.php。また、/ajax/ajax_vote.phpルートフォルダーの外側のどこかにあります。

それでも、PHP はファイルを正しくインクルードすることができます。/ajax/ajax_vote.phpにファイルが含まれていない理由がわかりませんlanguage/english.php。質問を誤解した場合は訂正してください。

于 2012-06-10T17:06:18.433 に答える