ルート フォルダーにアクセスするためのリンクの先頭にある / は、php インクルードでは機能しません。
たとえば、「/example/example.php」
解決策は何ですか?
ルート フォルダーとは、ファイル システムのルートではなく、Web ドキュメントのルートを意味すると想定しています。
そのために、次のいずれかを行うことができます
include('example/example.php')
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
私もこの問題を抱えていました。ポール・ディクソンの答えは正しいですが、これは理由を理解するのに役立つかもしれません:
ここでの問題は、PHP がサーバー側の言語であることです。純粋な HTML ドキュメントは、サーバー上で設定したルート URL に基づいてファイルにアクセスできます (つまり/images/example.jpg
、最上位のディレクトリから下に移動するために使用する任意のサブディレクトリから画像にアクセスする場合)、PHP は実際に使用時のサーバールートinclude (/images/example.jpg)
設定したサイト構造は、実際には Apache サーバーのファイル システム内にあります。私のサイトルートは、サーバールートから始まり、下に向かって、次のようになります。
/home2/siteuserftp/public_html/test/
「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」が文字通りそこにあることを確認してください)
編集:
DOCUMENT_ROOT およびその他の PHP SERVER 変数の詳細については、こちらを参照してください。
include() (および require()、fopen() などの他の多くの関数) はすべて、Web ルートではなく、ローカル ファイルシステムで動作します。
だから、あなたがこのようなことをするとき
include( "/example/example.php" );
*nix マシンのルートからインクルードしようとしています。
あなたがやっていることへのアプローチ方法はたくさんありますが、Paul Dixon の提案はおそらく最善の策です。
WindowsとIISを実行しているマシンでこれを解決しました:
<?php
$docroot = 'http://www.example.com/';
include ($docroot.'inc-header.php');
?>
ローカルの開発マシンを使用している場合は、C:\Windows\System32\drivers\etc\hosts に以下を追加することで、ドメインが localhost を指すように強制できます。
127.0.0.1 www.example.com
また、php.ini で allow_url_include を有効にする必要があります。
allow_url_include = On
私にとっては、次のトリックが機能しました。Windows と IIS を使用しているため、DOCROOT は C:\Inetpub\wwwroot です。
subst W: C:\Inetpub\wwwroot
include_path = ".;c:\php\active\includes;W:\" doc_root = W:\
現在、両方のバージョンが許可されています。
'/common/common.inc' を含めます。// マッピングされた W: root へのアクセス 'common/common.inc' を含めます。// W: へのアクセス: include_path 内