1

PHP ファイルがさまざまなディレクトリに分散されている Web アプリを構築しているため、通常のファイルには複数のインクルードが含まれる場合があります。これらすべてのファイルはどこにでもあります。

php ファイルは次のようになります。

include('../../some.php');
require('../../some.php');

別のファイルには、次のようなものがある場合があります。

 include('../../../../some.php');
require('../../../../some.php');

ポイントは、これは少し手に負えなくなり、追跡するのがやや難しいということです。いつも必要ないように、これを行う方法はあり../../..ますか?

私はこれをやってみました:

include('http://www.mywebsite.com/some.php');
require('http://www.mywebsite.com/some.php');

しかし、うまくいかないようですが、おもしろいのは、require を使用しても PHP エラーが発生せず、 call to function x() error, function or object doesn't exist型エラーのみが発生することです。ファイルが存在しないことについては何も言われませんでした。前もって感謝します。

4

4 に答える 4

4

$_SERVER変数を信頼しないでください。一部の環境では、リクエストを行うユーザーが設定/変更できます。インデックス/ブートストラップ ファイルでベース パスを手動で定義し、必要に応じて使用する方がはるかに優れています。

define('SYSTEM_PATH', __DIR__ . '/');

または5.3より前のPHPのバージョンでは、これを行うことができます

define('SYSTEM_PATH', dirname(__FILE__) . '/');

これで、いつでもファイルへのパスを知ることができます。

require(SYSTEM_PATH . 'lib/class.php');

__DIR____FILE__はどちらもPHP によって設定される安全な定数であり、信頼できます。

次のようにクラスを自動ロードできます。

function __autoload($class_name)
{
    require SYSTEM_PATH . strtolower($class_name) . '.php';
}

他のニュースとしては、 の適切な使用法が思い浮かびませんinclude()。インクルードを使用する必要がある場合は、何か間違ったことをしています。

于 2012-04-24T23:53:00.573 に答える
1

これが、インクルードパスが発明されたものです。頻繁に使用するパブリック フォルダーの外部にフォルダーがある場合は、そのフォルダーへのインクルード パスを作成します。このようにして、他のすべてのものと同じフォルダーにあるかのように扱うことができます。

http://php.net/manual/en/function.set-include-path.php

ただし、それよりも優れているのは、クラス オートローダーを作成することです...

http://php.net/manual/en/language.oop5.autoload.php

于 2012-04-24T23:50:36.410 に答える
0

これを使って:

include($_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php');

これにより、ドキュメントのルートに移動し、そこから残りを構築します...

于 2012-04-24T23:31:40.267 に答える
0

php.ini でインクルード パスを設定するか、.ini で作業ディレクトリを変更できますchdir。私は安全のために両方を好みますが、これは問題なく機能します。

chdir($_SERVER['DOCUMENT_ROOT']);

これで、現在のファイルがルート フォルダーにあるかのようにファイルを含めることができます。

于 2012-04-24T23:32:21.750 に答える