2012-05-09 7 views
1

これまでにこの問題に遭遇したことはありませんでしたが、if() PHPとは別のサーバー上の私のHTMLドキュメントから自分自身の関数を処理しているif()文から予期しない結果が発生しました

<?php 

error_reporting(E_ALL); 
ini_set('display_errors','On'); 

function displayIt($phrase = NULL) { 
    if (is_null($phrase)) return false; 
    else return true; 
} 

if ($_SERVER['REMOTE_ADDR'] == '123.456.789.012') { /* my ip address */ 
    echo 'include file is coming in ok...'; 
} 

?> 

抜粋は、ファイルが含まれています。私は別のPHPで以下のいる

は、別のサーバー(いわゆる「myPhpInclude.php」)上にあるファイルが含まれています。

<?php include('http://mydomain.com/includes/myPhpInclude.php'); /* the displayIt() function is contained in this include file */ ?> 

... 

<div id="content"> 
<?php if (displayIt('on')) { /* <-- MY PROBLEM ORIGINATES HERE */?> 
    <p>Some content.</p> 
<? } ?> 
</div> 

ウェブページは、if()文の時点でレンダリングを停止し、エラーを返しません。 PHPエラーのデバッグが有効になっています。

ありがとうございました。

+3

あなたは '持っていますかshort_open_tag'が有効になっていますか? '<?php if(displayIt( 'on)){?>' –

+1

と 'ini_set(' display_errors '、1);'。 –

+0

うん、短いタグは良いです。問題のあるスクリプトの抜粋があります。私はデバッグのエラーがすでにオンになっています。 –

答えて

2

問題は、ファイルがです。あなたが受け取るものは、PHPコードではなく、Webサーバーからの出力で、そのPHPファイルを実行するときです。

PHP 4.3.0より前のバージョンのPHPでは、allow_url_fopenが有効な場合でも、この関数を使用してリモートファイルへのアクセスをサポートしていません。あなたがする必要がどのような

、例えばのように、相対パス(またはファイルシステムへの絶対パス)を使用して、ローカルファイルシステム経由でファイルを含めるです:

include 'includes/myPhpInclude.php'; 
+0

なぜエコーは機能しますが、@ jeroenは機能しませんか? –

+0

@Dr。 DOTそのファイル(この場合は 'echo'文)からの出力が含まれ、元のコード自体は含まれません。 – jeroen

+0

私はそれを地元に射撃させて、私は@jeroenをポストバックします。私が別のサーバにインクルードスクリプトを格納する主な理由は、グローバルなユーティリティを持ち、他の多くのスクリプトのために使用することです - それらのいくつかは別のサーバに存在します。だから私の意図は、この1の関数を書いて、私のアプリケーションのエンタープライズ全体で使用することでした。攻撃の計画がうまくいかないように見えますが、私はすぐに返信します。そのジェロエンを知ってくれてありがとう。 –

1

2番目の変数に "phrase"のスペルが間違っています。

+0

良いキャッチ@JeremyLawson。私の元の質問にそれを修正しました。 –

3

待ち時間がありますが、$ phraseと$ phaseがありますか?私はそれがタイプミスだと思う。そこ

function displayIt($phrase = NULL) { <== phrase 
    if (is_null($phase))    <== phase 

ない場合は、試してみる{}ブロックの中に入れてみてください、echo displayIt('on');を試してみてください、多分それはいくつかの理由でfalseを返します。

編集:代わりにinclude('http://mydomain.com/includes/myPhpInclude.php');のはinclude('./includes/myPhpInclude.php');を試すか、インクルードファイルのファイルシステムのパスで置き換えます。

cross_domain_includeが有効な場合でも、URLからphpファイルを取得しても、PHPコードは得られず、出力(この場合は空になります)が表示されます。

include('http://mydomain.com/includes/myPhpInclude.php'); 

通常のHTTPリクエストを介してサーバhttp://mydomain.comからファイルincludes/myPhpInclude.phpを要求します:

+0

それはタイプミスでした。 @ LukaRamishviliを指摘してくれてありがとう。私は元の質問を修正しました –

関連する問題