2016-12-23 8 views
0

Apache 2.2上で動作する古いイントラネットサイトをローカルマシン上のWAMP設定(最新バージョン)に移動しようとしています。PHPのインクルードの診断を支援する、ストリームのオープンに失敗しました

私が現在持っている問題の1つは、require_onceパスが開くことができず、原因が何であるかを特定できません。

私はWAMPをにインストールされている:私は

C:\Wamp\www\Intranet 

このフォルダに

C:\Wamp\www 

からドキュメントルートを変更するのhttp.confとvhosts.confを変更した

C:\Wamp 

index.phpが含まれています。ローカルホストを参照するときに正しく読み込まれることがわかります。

のindex.phpが

/site/welcome.php 

からwelcome.phpをロードiFrameを有するこれは、iFrameの負荷として機能するが、500エラーをスロー。

PHPエラーを有効にすると、iFrameのwelcome.phpページにrequire_onceというエラーが表示されます。 require_onceは次のとおりです。

/site/login/config.php. 

あなたが見ることができるように、私はここに絶対パスを使用していますので、index.phpのは/site/welcome.phpをロードできるという事実は、それから、正しいファイルをロードしている私に語った:

C:\Wamp\www\Intranet\site\welcome.php 

私はその後、絶対パスで私のrequire_onceをロードすることを期待する:有効なファイルパスです

C:\Wamp\www\Intranet\site\login\config.php 

私が混乱しているのは、私が使っている最初の絶対パスは、物理ディレクトリルートではなくドキュメントルートから始まっているようです。

私が使用している2番目の絶対パスは、ドキュメントルートから始まっていないようです。

さらに興味深いことに、私はからrequire_onceを変更した場合:

/login/config.php 

/site/login/config.php 

それは動作します!私が指定している絶対的な道筋を示唆しているように、それは実際には相対的な経路であると私は期待していませんか?私は私のほとんどを解決する傾向がどのように

+0

http://stackoverflow.com/questions/19256735/iframe-relative-paths-challenge – JustOnUnderMillions

答えて

1

を使用するようになります。

ファイルパス全体をハードコーディングするよりも、実行時に決定する方がよい。

例: welcome.phpその後、あなたの設定ファイルを含む

define('ROOT_DIR', realpath(dirname(__FILE__))); 
// because *nix and Windows path separators aren't the same (/ vs \) 
define('DS', DIRECTORY_SEPARATOR); 
// just for convenience sake, you could use DIRECTORY_SEPARATOR on its own. 

からは次のようになります。

require_once(ROOT_DIR . DS . 'login' . DS . 'config.php'); 

私はほかに、あなたがiframe内に使用するパスを混乱していると思います宣言(これはURLパスです)をrequire(ファイルシステムのパスです)で使用するパスと置き換えます。

+0

古いマシンでは、これは、すべてのサイトコンテンツとドキュメントルートがセカンダリボリュームのルートに格納されていたときに使用されていました。 E:\。私はそれがE:\のルートから始まり、そこから正しいフォルダ構造を見つけるので、インクルードパスがそのインスタンスで動作すると思われますか?はい、私は2つのパスの種類が混乱している可能性があります。 – Eds

+0

以前は何をしていましたか?あなたの質問に投稿したコードは?ハードコーディングの問題点はまったく同じです。異なるマシンや異なるアーキテクチャにデプロイするとあなたが苦しんでしまうので、このようなソリューションはよりクリーンで移植性に優れています。 – yivi

+0

このコードを試しましたか? – yivi

1

は/必要誤差を含ん変数パスを設定することである:

$path = dirname(__FILE__); 
include($path.'/file.php'); 

これは、この場合、異なる環境は、WindowsとLinuxであることに問題があるからあなたを防ぐことができます。

あるいはさらに良い

define('ROOTPATH', realpath(dirname(__FILE__) . '/')); 
require ROOTPATH.'login/config.php'; 

もう一つは、おそらくあなたの問題を引き起こしますが、良い練習されていないがDIRECTORY_SEPaRATORを設定することです。

define('DS', DIRECTORY_SEPARATOR); 

include(DS.'home'.DS.'www'.DS); 

これは、PHPは、私はこのパスが(/site/login/config.php)Windowsマシン上で理にかなっているとは思わない正しいスラッシュ(/または\のいずれか)

+0

ありがとう、このメソッドを提案しているので、いくつかの人々を見てきました。このサイトは従来のものであり、SharePointサイトに置き換えられているので、私は単純な持ち上げとシフトを望んでいました。可能であれば大きな書き換えを行わないことを願っていました:) – Eds

関連する問題