web-dev-qa-db-ja.com

ルートパスはPHPインクルードでは機能しません

/ルートフォルダーへのリンクの先頭にあるphp includeでは機能しません。

たとえば、「/ example/example.php」

解決策は何ですか?

42
Per Magnusson

ルートフォルダとは、ファイルシステムのルートではなく、Webドキュメントのルートを意味すると想定しています。

そのために、次のいずれかを行うことができます

  • webルートフォルダーを include path およびinclude('example/example.php')に追加します
  • またはinclude($_SERVER['DOCUMENT_ROOT'].'/example/example.php')することができます
57
Paul Dixon

私もこの問題を抱えていました。ポール・ディクソンの答えは正しいですが、おそらくこれはあなたが理由を理解するのに役立つでしょう:

ここでの問題は、PHPがサーバー側の言語であることです。サーバーで設定したルートURLに基​​づいて純粋なHTMLドキュメントがファイルにアクセスできる場所(つまり、現在のサブディレクトリから画像にアクセスするには、_/images/example.jpg_を使用してトップディレクトリから下に移動します) 、PHPは、include (/images/example.jpg)を使用すると、実際にサーバールートにアクセスします

実際に設定したサイト構造は、Apacheサーバーのファイルシステム内にあります。私のサイトのルートは次のようになります。サーバーのルートから始まり、下に向かっていきます。

_/home2/siteuserftp/public_html/test/
_

「テスト」はサイトのルートを表します

PHPインクルードが希望する結果を得られない(それが本来どおりに機能している)理由を質問に答えるのは、PHPコードを試して、ファイルが実際にサイトのHTMLルートにある場合、サーバールートでファイルを見つけます。これは上記のようになります。

ファイルは「test /」のサイトルートに基づいており、次のようになります。

/home2/siteuserftp/public_html/test/about/index.php

ポール・ディクソンが提供した答え:

_include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
_

まさにあなたの問題を解決するものです( 'DOCUMENT_ROOT'を置き換えるドキュメントルートを見つけることを心配する必要はありません。PHPはあなたのためにそれを行います。

編集:

詳細情報DOCUMENT_ROOTおよびその他のPHP SERVER変数 ここにあります

30
Ian

include()(およびrequire()、fopen()などの他の多くの関数)はすべて、Webルートではなくローカルファイルシステムで機能します。

だから、あなたがこのようなことをするとき

include( "/example/example.php" );

* nixマシンのルートからインクルードしようとしています。

そして、あなたがやっていることにアプローチする方法は多数ありますが、Paul Dixonの提案はおそらくあなたの最善策です。

5
Peter Bailey

すべてのWebサーバーにはpublic_htmlフォルダ。通常はファイルなどを保存します。/、あなたはpublic_html、代わりにメイン(アクセス不能)ルートに向けます。そのため、$_SERVER['DOCUMENT_ROOT']."/your/locati.on"代わりに

4
Gameselop

私はWindowsを実行しているマシンでこれを解決し、IISで次のようにしました:

<?php
  $docroot = 'http://www.example.com/';
  include ($docroot.'inc-header.php');
?>

ローカルの開発マシンを使用している場合、C:\ Windows\System32\drivers\etc\hostsに以下を追加することにより、ドメインがローカルホストを指すように強制できます。

127.0.0.1   www.example.com

また、php.iniでallow_url_includeを有効にする必要があります。

allow_url_include = On
2
David

私にとって、次のトリックはうまくいきました。 IISでWindowsを使用しているため、DOCROOTはC:\ Inetpub\wwwrootです。

  1. c:\ Inetpub\wwwrootをドライブに置き換えます。それをW:(WEBコンテンツ)としましょう。
 subst W:C:\ Inetpub\wwwroot 
  1. php.iniを次のように編集します:include_pathにW:\を追加し、doc_rootをW:\に変更します
 
 include_path = "。; c:\ php\active\includes; W:\" 
 doc_root = W:\ 
 
  1. スタートアップフォルダー内のCMDファイルにsubstコマンドを入れて、マッピングを自動的に作成します。

現在、両方のバージョンが許可されています:

 
 include '/common/common.inc'; //マップされたWへのアクセス:root 
 include 'common/common.inc'; // Wへのアクセス:include_path 
 
内
0

PHPのバージョンによっては、ドキュメントルートの最後に区切り文字が含まれる場合もありますが、そうでない場合もあります。

    $r = trim(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT', FILTER_SANITIZE_STRING));
    if (substr($r, 0, 1) == '/')
    {
      define("PATCH_SEPARATOR", "/");  
    }
    else
    {
      define("PATCH_SEPARATOR", "\\");    
    }

    if (substr($r, -1) == PATCH_SEPARATOR)
    {
      include_once ($r . 'example/example.php');
    }
    else
    {
      include_once ($r . PATCH_SEPARATOR . 'example/example.php');
    }
0
user1123382