2009-07-31 5 views
0

いくつかの古いPHPスクリプトをクリーンアップしながら、私は変数を使用しようとするとrequire/include文で奇妙な振る舞いに気がつきました。XAMPPでrequireまたはinclude文で変数を使用できないのはなぜですか?

ライブサーバー上で

、次のコードは正常に動作します。..

私のXAMPPのインストール((基本パッケージ)バージョン1.6.7)に..but
<?php 
$test = "http://localhost/elearning/trunk/mypage.php"; 
require "$test"; 
?> 

私は次のエラーが表示されます

警告:require()[function.require]:C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ testのサーバー設定でURLファイルアクセスが無効になっています。 .php on line 22

警告:必要(http://localhost/elearning/trunk/mypage.php)[function.require]:f C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php 22行目の適切なラッパーはありません。

Fatalエラー: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¥') 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が読み込まれます。これは私の設定や私のアプローチでは間違っていますか?

+1

マイクロ最適化のノート: '「$テスト」'と 'まったく同じ結果に$ test'量単に変数をそのまま使うのではなく、PHPが文字列を解析しなければならないので、前者だけが無駄になります。そして本当に良い理由がなければ、最初にそのような中間変数を使う必要はありません。 – deceze

+0

"$ test"と$ testのヒントをありがとう! 私の防衛では、中間変数は例のためだけです(ただし、それほど少なくすることはできません)。現実の世界では、$ CFG-> wwwroot(またはそのようなもの)を設定ファイルから取り出そうとしています。 – Zoe

答えて

3

は、HTTPで始まるパスを使用することはできません://なぜなら、セキュリティのいくつかのサーバーで。あなたが代わりに使用したいのはディレクトリパスです。

あなたは、サーバーのルートフォルダからあなたのディレクトリ・パスを提供します
echo $_SERVER['DOCUMENT_ROOT'];

のようなものを実行して、現在のディレクトリパスを取得することができます。それはあなたが物を含む/必要とするために使用したいパスです。


これをよく理解していない場合は、これを試してください。

ワールド・ワイド・ウェブのパス:
http://example.com/directory/file.php

Serverのディレクトリパス:

はパスの2種類があります
/ホームは/ usr/www /のサイト/ HTML/

サーバーのディレクトリパスは、ファイルがサーバーのハードドライブにある場所です。あなたのコンピュータのハードドライブによく似ていますが、ファイルを移動しない限り変更されることはありません。一方、World Wide Web Path(誰でもあなたのウェブサイトにアクセスするために使用する)は、使用しているドメイン、ドキュメントルートが指しているMod Rewritesなどに基づいて変更できます。

注:ドキュメントルートは、サーバーがファイルを提供する最上位のディレクトリです。したがって、ドキュメントルートにindex.phpがある場合は、Web上に次のように表示されます。 http://example.com/index.php

PHPがファイルを検索するときに、サーバー上で実行されているため、サーバーディレクトリパスが使用されます。ユーザーのコンピュータから実行されるJavascriptがファイルを探したい場合、サーバーからアクセスしていないため、World Wide Webパスを使用してアクセスします。

私は本当にそこのどこかで何かが意味をなされることを願っています。

+0

ああ、完璧な感覚です(そして、私の次の質問だったでしょう)。おそらく、このホーキーなサーバーが同じように扱われているように見えるからです。ありがとう! – Zoe

+0

一部のサーバでは、DOCUMENT_ROOTディレクトリの後ろにファイルを置くことしかできません。つまり、あなたが行くことができる最高のフォルダはexample.com/と同じです。 –

1

は「./mypage.php」 全体ではなく、正確なディレクトリ

0

そのようにパスを使用しないでください...相対パスまたは絶対パスを使用する必要がありますしてみてください。

require 'mypage.php' 
1

PHPは、そのようなURL表記を使用しているときに同じサーバーからインクルードしていることを知るには十分スマートではないため、別のサーバーからファイルを取得していると思います(危険です)。

サーバ設定では、これらの外部ファイルの読み込みが禁止されています(「サーバ設定でURLファイルアクセスが無効になっています」というエラーメッセージが表示されます)。

同じサーバーにしているので、あなたは、単にのように、相対パスを使用することができます。

require_once 'mypage.php' 
関連する問題