![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になっております。(環境: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で質問しましょう!
似たような質問が見つかりました
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- その他(コンピューター・テクノロジー) <a href="file:///フォルダ名/ファイル名">リンクテキスト</a>について 1 2023/04/06 22:40
- PHP a href リンクタグでだけで 送信が できちゃっています。 1 2022/04/18 04:25
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HPを開くとダウンロードページ...
-
社内イントラネットのHPにアク...
-
訪問回数ごとに違うページを表...
-
階層の少ないページ作り
-
すごく初歩的な質問です
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
Subversionのリポジトリの削除
-
拡張子php画像をjpg画像等に変...
-
PHPのif文でその処理を途中で抜...
-
バッチを用いたフォルダの自動移動
-
別ファイルの変数を呼び出した...
-
FTPコマンドでディレクトリごと...
-
form actionで二つ送信先を指定...
-
さくらレンタルサーバーでPHPが...
-
ftpでアップロードが出来ない
-
.phpと.incファイルの違いはな...
-
TSVファイルをCSV形式に変換したい
-
【file_exists】ファイルが存在...
-
別PHPファイルに変数を渡す
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HPを開くとダウンロードページ...
-
index.phpって何ですか? 具体...
-
社内イントラネットのHPにアク...
-
phpで大量のhtmlを任意の順番で...
-
PHPでの複数ファイル出力
-
CGIでHTMLファイルのPHP部分を...
-
phpコードの戻り値をhtmlファイ...
-
ヒアドキュメントの中で別ファ...
-
HTMのファイルをPHPに変換す...
-
VScode文字の色の変更について
-
php excelダウンロード
-
public_htmlと同じ階層にあるフ...
-
拡張子をhtmlにすることのメリ...
-
PHPの結果をhtmlで保存する方法
-
トップページURLのみで下層ペー...
-
phpのheader関数でページ移動さ...
-
PHP プルダウンからの選択 ペ...
-
file_get_contentsでcss読み込み
-
file_get_contents()の動きが読...
-
includeで読み込んだ内容を変数...
おすすめ情報