2012-05-27

PHPで外部サーバーにあるファイルをincludeする

別サーバーにあるPHPソースをinclude()したときに調査した結果を書いておく。

話を簡単にしたいので、ソースはあくまでサンプルで。


呼び出し元
http://www.example.dom/test.php

別サーバー
http://lib.example.dom/

includeしたいファイル
http://lib.example.dom/hoge.php
<?
class person() {
    public $name;
    public $addr;
    public $age;

    function __construct() {
        $this->name = "";
        $this->addr = "";
        $this->age  = "";
    }
}

$o_person = new person();
$o_person->name = "hogehoge"; 
?>

呼び出し元のソース
<?
include 'http://lib.example.dom/hoge.php';
echo "o_person = ";
var_export($o_person);
?>

で、結果はこうなる。



o_person = NULL





外部ファイルを拡張子「.php」のままincludeすると、外部ファイルでphpが「実行」されその「結果」が返される。

そのため、変数$o_personは別サーバー上にしか存在しえない。

PHPのソースとしてincludeしたいため、「結果」として「ソース」が返ってくればよい。

ということで、外部ファイルの拡張子を「.php」から「.inc」に変えたら、見事成功!


呼び出し元のソース
<?
include 'http://lib.example.dom/hoge.inc';  // hoge.php を hoge.inc に変更。これで、呼び出し先の外部サーバーでPHPとして実行されなくなる。
echo "o_person = ";
var_export($o_person);
?>
o_person = person::__set_state(array(
   'name' => 'hogehoge',
   'addr' => '',
   'age' => '',
))


ただし、呼び出し先でさらにincludeしていると、期待した結果にならないので注意。

0 件のコメント:

コメントを投稿

綺麗に見せることに全振りした操法大会の訓練を50日間するよりも、月1回でいいから基本的な操作方法の訓練を実施すべきだと思うのは俺だけか

 7月に県の消防操法大会がある。 市内分団の持ち回り制で、今年はうちの分団が出場する。 俺も前回回ってきたときに、選手として出た。 訓練が5月から始まっている。 週5日。 訓練時間は2時間だけど、その前に準備する時間もあり、訓練後の撤収時間も必要だから、拘束時間は約3時間。 俺が...