21025


試すと「別ファイルをincludeしている部分」だけが読み込めない(include結果を表示できない)のですが、どうすれば良いでしょうか？


CC BY-SA 3.0
2016-01-17T14:26:19.560
21009
2016-01-18T13:36:03.383
2016-01-18T13:36:03.383
7886
7886
question
php
「別ファイルをincludeしているphp込みのHTMLファイル」を、file_get_contents で読み込むことは可能？


PHPとして評価されていない実行されないテキストファイルがそのまま表示されるかと思います。  
file_get_contentsは`ファイルを単純に読み込み、PHPファイルを読み込んだ場合でもPHPコードは特に実行しない`という動作を行うからです。  
<http://php.net/manual/ja/function.file-get-contents.php>

どうしてもPHPとして評価して欲しいという場合でしたら、  
`file_get_contents('http://localhost/xxxxx.php');`等として`http`プロトコルを使ってファイルの拾得をするようにしておけば、  
Webサーバーの機能（Apache+PHP）でご希望の動作が出来るようになるかと思います。


CC BY-SA 3.0
2016-01-17T23:26:20.153
21012
2016-01-17T23:26:20.153
13999
21009
answer


PHPファイルを実行して読み込む方法の一つに、出力バッファリングを組み合わせるものがあります。例えば `template.php`
を読み込みたいとすると、以下のように書けます。

[code]

    $template = load_template();
    
    function load_template() {
        // 出力バッファリングを開始
        ob_start();
    
        // ここで読み込むと通常は画面に表示されるが
        // ob_startしているので画面出力の代わりにバッファされている
        include 'template.php';
    
        // バッファの中身を文字列として取り出し、バッファを破棄する
        return ob_get_clean();
    }
    
[/code]

include で読み込まれたファイルは include した変数スコープで評価されます。include 前に定義した変数は `template.php`
から参照できますし、 `template.php` 内で定義した変数は include
した側に戻っても参照できます。そのため上記のように関数内で実行することで、互いの変数に必要以上の影響を与えないようにすることが多いかと思います。

また、`$_GET` `$_POST` `$_SERVER` などのスーパーグローバルや、カレントディレクトリは当然ながら include
した時点のものを参照することになります。

これらの挙動はビューテンプレートなどには便利ですが、「ブラウザで表示する時と全く同じように」実行したいなら、miyabiさんが書かれているようにWebサーバーを経由する必要があるかもしれません。


CC BY-SA 3.0
2016-01-18T05:39:09.620
21025
2016-01-18T05:39:09.620
8000
21009
answer