dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。(環境:PHP5.2.5)

file_get_contents()を外部ファイル(クラス)の中で使ってデータを取得し、
そのクラスをメインファイルで読み込み、
メインの方で、その得たデータを使おうとしています。
(仮に、メインファイルの名前をmain.phpとしておきます。)

その際、クラスの中に書くコードについてですが、
下記のように、2通りの書き方が浮かびました。
(仮に、このクラスファイルの名前をclass.phpとしておきます。)

//------------------------------------------------------------
$url= 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
$html = file_get_contents($url);
//------------------------------------------------------------
$url= $_SERVER['SCRIPT_FILENAME'];
$html = file_get_contents($url);
//------------------------------------------------------------

で、パターン2の方は、うまく行くのですが、
パターン1の方の処理だと、なぜか、
その処理を行おうとしているファイル(main.php)のダウンロードを開始しようとするのです!

ブラウザに「ダウンロードウィンドウが立ち上がる…」という状況です。

パターン1では、
$url_1 = "http://example.com";
のような、「http://」で始まる書式のURLを
file_get_contents()の引数に入れることになりますが、
これ自体は問題ないと思っています。

実際、クラスで読み込む方法ではなく、file_get_contents()を使う方法では、
問題なく動いたからです。

つまり、
メインファイルに、
上記の2パターンを書いて試した場合には、問題なくうまくいったのです。

言い換えれば、
メインファイルだけで完結している場合には、
どうも問題は起こらないようで、
クラスなどで引っ張ってくると、問題が起こるようなのです。
(私の勘違いの可能性もありますが…。)

以上、まとりのない文章で、申し訳ありません。

自分でも、なにがなにやら、よく分かっていないため、
多くの情報を提供することで、なんとかアドバイスを頂けないかと思い、
ひとまず、使えそうな情報を並べてみました。

チェック項目など、提示いただければ、
適宜、それに従って対応致しますので、
どうかご助言をよろしくお願い致します。

A 回答 (12件中11~12件)

永久ループに陥りそうな処理ですね。



## file.php
<?php echo 'hoge'; ?>

とすると
(1) $url= '​http://host/file.php;'
  => hoge
(2) $url= /path/to/file.php;
  => <?php echo 'hoge'; ?>

と取得できるデータはまったく異なりますが、
この辺はおわかりでしょうか。
    • good
    • 0
この回答へのお礼

補足をありがとうございます。

(1)の「​」については空白(?)、
つまり、 $url='http://host/file.php'; と理解するとして、
この場合のfile_get_contents()の結果は、
PHPで出力した結果のhtmlソースを読み込んでくるわけですね。

で、一方の(2)では、
PHPスクリプトファイルのソースコードを読み込んでくる、と。

ふむ…、そうなるのですか…。

>この辺はおわかりでしょうか。

いや、おわかりじゃないです。^^;
すみません、どうしてこのように結果が異なるのでしょう?
もしよろしければ、教えて下さい。
よろしくお願い致します。

お礼日時:2009/09/10 20:54

焦点がよくわかりませんが。


クラスを書いたりしたPHPのコードを取り込みたいなら
include、include_once、require、require_onceを使います。

また http:// 経由でPHPファイルを読み込む場合は
PHPとして処理・出力した結果を取り込むことに注意してください。

実際のソースがわからないのでよくわかりませんすいません。
あと $url= 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
は、ちゃんとした値になってますか?

この回答への補足

アドバイスをどうもありがとうございます。

質問文をさらに補足しますと、

まず、classを作成します。

そのclassの機能は、
・今まで居たページのhtmlソースを取得
・今、まさにやって来ているページのhtmlソースを取得

で、それを実現するために、
file_get_contents()を使っているわけですが、

今、まさにやって来ているページのパス($url)を
file_get_contents()の引数に与える際に、

(1)
$url= 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
-----------------
(2)
$url= $_SERVER['SCRIPT_FILENAME'];

(1)、(2)の両方を考えました。

しかし、実際には、(1)の形式では、質問文の通り、ダメでした。


>ちゃんとした値になってますか?

はい、なっております。
この、(1)の書式をそのまま、main.phpで使うと正常に動きますので、
問題なのはclass.phpで、この、(1)の書式を使う点にあるようです。

/***(class.php)***/
<?php
class MyClass{
public function GetPageHtml(){
$url= 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
$html = file_get_contents($url);
echo $html;
}//end*GetPageHtml
}//end*MyClass
?>
//-------------------

/***(main.php)***/
<?php
require_once '(~~~/class.php)';
$obj = new MyClass;
$obj->GetPageHtml();
?>
//-------------------

ソースをざっくり書けば、こんな感じです。
ページ遷移の例として、

before_main.php

main.php

after_main.php

のような感じを想定しております。
beforeも、afterも、ソースコード自体は、mainとほぼ同じで、
どれも、MyClassを呼び出して使っています。
ページ遷移の状況を得る事が目的ですから、当然と言えば当然ですが。

複数のphpファイル間を遷移させる様な構成となっているため、
「phpで」出力したHTMLをfile_get_contents()してくることになるわけですが、
このことと、おかしな結果
つまり、main.phpスクリプトファイルのダウンロードが始まること
とが、どうも関係しているような気がするのですよね…。
気のせいかしら…。

補足日時:2009/09/10 07:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!