XAMPPのrequireまたはincludeステートメントで変数を使用できないのはなぜですか?
質問
いくつかの古いphpスクリプトをクリーンアップしているときに、変数を使用しようとしたときにrequire / includeステートメントで奇妙な動作がいくつかあることに気付きました。
ライブサーバーでは、次のコードは正常に機能します。
<?php
$test = "http://localhost/elearning/trunk/mypage.php";
require "$test";
?>
..しかし、XAMPPインストール((基本パッケージ)バージョン1.6.7)では、次のエラーが表示されます:
警告:require()[function.require]:C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \のサーバー構成でURLファイルアクセスが無効になっています22行目のtrunk \ test.php
警告:require( http://localhost/elearning/trunk/mypage.php )[function.require]:ストリームのオープンに失敗しました:C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.phpに適切なラッパーが見つかりませんでした22行目
致命的なエラー:require()[function.require]:必要なオープンに失敗しました ' http:// localhost /elearning/trunk/mypage.php '(include_path =' .; C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ php \ pear \ ')in C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php 22行目
http://localhost/elearning/trunk/mypage.php (エラーから直接)ブラウザーにmypage.phpがロードされます。これは私の設定のエラーですか、それとも私のアプローチですか?
解決
セキュリティのため、一部のサーバーではhttp://で始まるパスを使用できません。代わりに使用するのはディレクトリパスです。
次のような操作を行うことで、現在のディレクトリパスを取得できます
echo $ _SERVER ['DOCUMENT_ROOT'];
サーバーのルートフォルダーからのディレクトリパスが表示されます。それが、物を含める/要求するために使用したいパスです。
それをよく理解していない場合は、これを試してください。
2種類のパスがあります:
ワールドワイドウェブパス:
http://example.com/directory/file.php
サーバーディレクトリパス:
/ home / usr / www / site / html /
サーバーのディレクトリパスは、サーバーのハードドライブ上のファイルの場所です。コンピューターのハードドライブと同様に、ファイルを移動しない限り変更されません。一方、World Wide Webパス(誰もがWebサイトにアクセスするために使用するパス)は、使用しているドメイン、ドキュメントルートが指している場所、Mod Rewritesなどに基づいて変更できます。
注:ドキュメントルートは、サーバーがファイルを提供する最上位のディレクトリです。したがって、ドキュメントルートにindex.phpがある場合、Web上で次のように表示されます。 http://example.com/index.php 。
PHPはファイルを検索するときに、サーバー上で実行されているため、サーバーディレクトリパスを使用します。ユーザーコンピューターから実行されるJavascriptがファイルを検索する場合、サーバーからはアクセスしないので、World Wide Webパスを使用してアクセスします。
そこのどこかで、何かが理にかなっていることを本当に願っています。
他のヒント
&quot; ./ mypage.php&quot;が必要です。 正確なディレクトリ全体ではありません
PHPは、そのようなURL表記を使用するときに同じサーバーからインクルードしていることを知るほど賢くないため、別のサーバーからファイルを取得していると考えています(危険な場合があります)。
サーバー設定はこれらの外部ファイルの読み込みを許可しないように設定されているため(エラーメッセージ「サーバー設定でURLファイルへのアクセスが無効になっています」で明らかです)、失敗します。
同じサーバーにいるので、次のように単純に相対パスを使用できます。
require_once 'mypage.php'
そのようなパスを使用しないでください...相対パスまたは絶対パスを使用してください。
例
require 'mypage.php'