こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

別のドメインのファイルをrequire

phpで別のドメイン下のファイルをrequireしようとしていますがうまくいきません。

サーバーの環境は【Windows Server 2008 + IIS6.0 + php5.2】で、
php.iniのallow_url_includeはonに設定済みです。

ファイルA http://xxx.com/aaa.php
  <html>
  <head>
  </head>
  <body>
  <?php
  require_once("http://localhost/test.inc");
  echo $remember;
  ?>
  </body>
  </html>

ファイルB http://yyy.com/bbb.php
  <?php
  $remember=5577;
  ?>

仮にファイルAに「require_once("http://yyy.com/bbb.php");」と書いて実行すると、空白のページが出力され、ページのソースは
  <html>
  <head>
  </head>
  <body>
となっていました。
phpコードを実行するところで処理が中断されたようです。
空白ページのタイトルは「500-内部サーバーエラー」です。

同じサーバーの違うドメインで試しても、物理的に別のサーバーで試しても結果は同じでした。

ネットで調べた限りでは結構みんなすんなりとできたみたいなので、なおさら不思議で仕方がないです。

何が考えられるか、教えていただければと思います。

投稿日時 - 2011-12-14 17:26:18

QNo.7189673

すぐに回答ほしいです

質問者が選んだベストアンサー

ANo.1でも書かれていますが、リモートファイルのincludeは、相手先のwebサーバが返す内容をincludeします。つまりbbb.phpは

<?php
print '<?php' . PHP_EOL;
print '$remember=5577;' . PHP_EOL;
print '?>' . PHP_EOL;
?>

と書いておかなければ、質問者さんが期待されている動作にはなりません。同一サーバ内でもファイル名をhttpから記述すれば同じことです(localhostの80番ポートへアクセスするというだけです)。

相手先サーバがファイル内容をそのまま返す拡張子(.txtなど)にするという方法もありますが、いずれにしても生のphpソースを外部公開するに等しいので、あまりお勧め出来る手法ではありません。キチンと(bbb.php側で)アクセス元のIPアドレスなどを制限してください。


(蛇足)
なお同一サーバに対してのリモートアクセスは無駄なトラフィックになるので避けるべきです。サーバパスで記述すれば済むことですので。

投稿日時 - 2011-12-15 09:34:40

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

とりあえず、該当のサーバーは物理的に近付ける場所にありますか?
それなら確認が楽なんですけど。

サーバ上で、ブラウザを立ち上げて呼び出したいPHPファイル(http://yyy.com/bbb.php)にアクセスするとどうなりますか?
サーバ上のブラウザから正しく呼び出せたとして、サーバ上のPHPエンジンが外部にアクセスできないようにファイアウォールでブロックしている可能性は?
まずはその辺りから調べる必要がありますかね。

投稿日時 - 2011-12-14 18:21:12

ANo.1

その http://yyy.com/bbb.php をブラウザで表示すると、何も表示されませんよね?
そのyyy.com がPHPを実行可能な場合、拡張子が php ですから、画面には何も出ないのではないかと思います。

で、その結果をファイルAでは require 仕様としていますから、対象が何も無いので 500 エラーとなっているのではないでしょうか?

あまりそのような、管理が面倒な手段はとったことがないのですが、 拡張子が .inc ならできるのかもしれません。

投稿日時 - 2011-12-14 18:17:44

あなたにオススメの質問