
いつもお世話になっております。(環境: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パターンを書いて試した場合には、問題なくうまくいったのです。
言い換えれば、
メインファイルだけで完結している場合には、
どうも問題は起こらないようで、
クラスなどで引っ張ってくると、問題が起こるようなのです。
(私の勘違いの可能性もありますが…。)
以上、まとりのない文章で、申し訳ありません。
自分でも、なにがなにやら、よく分かっていないため、
多くの情報を提供することで、なんとかアドバイスを頂けないかと思い、
ひとまず、使えそうな情報を並べてみました。
チェック項目など、提示いただければ、
適宜、それに従って対応致しますので、
どうかご助言をよろしくお願い致します。
No.2
- 回答日時:
永久ループに陥りそうな処理ですね。
## file.php
<?php echo 'hoge'; ?>
とすると
(1) $url= 'http://host/file.php;'
=> hoge
(2) $url= /path/to/file.php;
=> <?php echo 'hoge'; ?>
と取得できるデータはまったく異なりますが、
この辺はおわかりでしょうか。
補足をありがとうございます。
(1)の「」については空白(?)、
つまり、 $url='http://host/file.php'; と理解するとして、
この場合のfile_get_contents()の結果は、
PHPで出力した結果のhtmlソースを読み込んでくるわけですね。
で、一方の(2)では、
PHPスクリプトファイルのソースコードを読み込んでくる、と。
ふむ…、そうなるのですか…。
>この辺はおわかりでしょうか。
いや、おわかりじゃないです。^^;
すみません、どうしてこのように結果が異なるのでしょう?
もしよろしければ、教えて下さい。
よろしくお願い致します。
No.1
- 回答日時:
焦点がよくわかりませんが。
クラスを書いたりした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スクリプトファイルのダウンロードが始まること
とが、どうも関係しているような気がするのですよね…。
気のせいかしら…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヒアドキュメントの中で別ファ...
-
OpenX2.8.5をさくら専用サーバ...
-
PHPからHTMLファイルを書き出し
-
PHP 正規表現について教えて下さい
-
file_get_contentsでcss読み込み
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
PHPのif文でその処理を途中で抜...
-
mysql複数レコードをまとめて削...
-
【file_exists】ファイルが存在...
-
$_SESSION 有効期限をブラウザ...
-
phpのクラスにて別ファイルの変...
-
phpのftp_get()でエラーが出ます。
-
「クラス関数」「メンバ関数」...
-
「クラウドにアップロード」」...
-
ftpでアップロードが出来ない
-
PHP4、PHP5 1ファイル複数クラ...
-
違法アップロードについて
-
.phpと.incファイルの違いはな...
-
PHP table内、<a href使って su...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HPを開くとダウンロードページ...
-
file_get_contentsでcss読み込み
-
社内イントラネットのHPにアク...
-
file_get_contents()の動きが読...
-
そろそろお願いします
-
a.htmlへのアクセスをa.phpで処...
-
かなり重い処理をする方法
-
ヒアドキュメントの中で別ファ...
-
phpのheader関数でページ移動さ...
-
ワードプレスのhtmlファイル名...
-
PHPでのindex.htmlの生成ができ...
-
PHPのSEO
-
サーバーに送られたデータを計...
-
PHPファイル内でCSSが反映されない
-
文系でHTMLしかわからない者です。
-
VScode文字の色の変更について
-
phpコードの戻り値をhtmlファイ...
-
Smartyの検索エンジンとの相性は?
-
jsファイルがうまく読み込めない
-
プログラムの記述のあるPHPファ...
おすすめ情報