web-dev-qa-db-ja.com

PHPトップディレクトリからのファイルが必要

ルートサイトの上の独自のディレクトリにいくつかのサブドメインがあり、ルートディレクトリにアセットフォルダがあります。例えば:

/
/assets/
/forums/
/blog/

ルートディレクトリとサブディレクトリの両方のphpページでrequire()ファイルを作成しようとしています。たとえば、assets/include/form.phpは、ルートディレクトリのindex.phpとindex.phpの両方にrequired()です。フォーラムのディレクトリ。ただし、form.php内には、includeディレクトリに含まれる別のファイルを取得しようとする別の要件があります。

このform.php内に、ルートディレクトリのindex.phpとフォーラムディレクトリのindex.phpの両方で機能するファイルを要求する方法を見つけられないようです。

ルートディレクトリから始まるファイルを明示的に要求できる方法はありますか?

19
Lucas Penney

これを実現するにはいくつかの方法があります。

_form.php_からの相対パスを使用

_require_once __DIR__ . '/otherfile.php';
_

PHP 5.2以前のバージョンを使用している場合は、___DIR___の代わりにdirname(__FILE__)を使用できます。マジック定数の詳細については こちら をご覧ください。 。

_$_SERVER['DOCUMENT_ROOT']_変数を使用する

これはドキュメントルートへの絶対パスです:Windowsでは_/var/www/example.org/_または_C:\wamp\www\_。

ドキュメントルートは、ルートレベルのファイルがあるフォルダーです。 http://example.org/index.php は_$_SERVER['DOCUMENT_ROOT'] . '/index.php'_にあります

使用法:_require_once $_SERVER['DOCUMENT_ROOT'] . '/include/otherfile.php';_

オートローダーを使用する

これは、非常に単純なものであれば、おそらくアプリケーションにとって少しやり過ぎになるでしょう。

PHPのインクルードパスを設定する

PHPがrequire()またはinclude()を使用するときにファイルを検索するディレクトリを設定することもできます。チェックアウトset_include_path()ここ

使用法:_require_once 'otherfile.php';_


注:

require()内のURLの使用を提案する回答がいくつかあります。 PHPファイルはインクルードされる前に解析されるため、これはお勧めしません。HTMLファイルまたはPHPスクリプトがHTMLを出力する場合、これは問題ありませんが、そこにクラス定義しかない場合、空の結果が得られます。

49
CheeseSucker

1レベル上の使用の場合:

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

2レベル上の場合:

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

詳細については、次のURLをご覧ください。 http://forums.htmlhelp.com/index.php?showtopic=2922

1
Jithu Wilson C

たぶん、これは正しいトピックではなく、正しい使い方ではないかもしれませんが、誰かを助けるかもしれません。絶対パスからメニューにリンクを作成したかったのですが、ディレクトリからディレクトリにジャンプしていて、パスがノンストップで変化していたため、ベースディレクトリに修正したかったのです。

したがって、サブフォルダに移動するために「../」を使用する代わりに(私は../../../に移動する必要がある多くを知らなかったので)、リンクを_<a href='/first_dir/second_dir/third_dir//..'>_と書きました。 _<img src='/first_dir/second_dir//../logo.svg'>_でも機能します。残念ながら、これはrequire_once()では機能しません。 PHP 7

0
Ecko
  • www.domain.com/dir1/dir2/dir3/pgm1.phpにpgm1.phpがあり、 'dirA/inc/Xpto.php'が含まれている、または必要であるとします。
  • また、www.domain.com/dirZ1/dirZ2/pgm2.phpにある別のpgm2.phpには、同じ「dirA/inc/Xpto.php」が含まれているか、または必要です。
  • そしてあなたのホスト設定はrequire/include ' http://www.domain.com/ ......'を許可しません
  • だから... pgm1.phpとpgm1.phpの両方でこれを使うことができます。
    INCLUDEが機能します!

    function rURI($p){
       for($w='',$i=1;$i<(count(explode('/',$_SERVER['PHP_SELF']))-1);$i++,$w.='../');return
       $w.$p; }
    

    rURI( 'dirA/inc/Xpto.php');が必要//ルートからのパス

0
jorge soares

2つのソリューションがあります。完全なURLを使用することもできます。たとえば、ファイルが「lib」ディレクトリにある場合は、次のように使用できます。require_once( ' http://www.example.com/lib/myfile.php ')

または

$_SERVER['DOCUMENT_ROOT'] PHPの関数ですが、これは常にばかげているわけではありません。

0
xXPhenom22Xx