- ベストアンサー
外部のphpファイルを読み込んで表示させたい
外部からスクリプトを呼び出して実行することはPHPどのようにすればよいのでしょうか? <?php print "Hello World!"; ?> というコードをhello.phpで保存して、サーバAにアップしました。 それで、サーバBからいつでもhello.phpを呼び出して、ページの表示内に組み込みたいのですが、そういうことは可能なのでしょうか? <?php $handle = fopen ("http://<サーバAのアドレス>/hello.php", "r"); print $handle; ?> をサーバBにアップしてブラウザからアクセスしてみましたが、上手くいきませんでした。 ちなみにサーバAのhello.phpのCHMODは755,755どちらに設定すればよいのでしょうか?ファイルが置かれているディレクトリのCHMODも変更するので しょうか?全部やってみましたがうまくいきませんでした。 どうぞよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
$file = file("http://hogehoge"); foreach($file as $line){ echo($line); } じゃダメですか?
その他の回答 (3)
- randman
- ベストアンサー率51% (17/33)
ini_set("allow_url_fopen",true); でどうでしょう? 戻り値がfalseだったら、URLラッパーがOFFのままロックされていると思います。 しかし、サーバに問い合わせても、たぶん、設定を変えてはくれないでしょう。 別のサーバを検討した方がよいかも…。
お礼
ありがとうございます!試してみたところ、真っ白い画面が表示されました。 しかし、おかげさまで問題は解決いたしました!原因はパーミションの設定だったようです。皆様お騒がせいたしました。
- randman
- ベストアンサー率51% (17/33)
参考URLにあるとおり、 > include 'http://<サーバAのアドレス>/test/hello.php'; でも間違いではありません。 ただ、「URLラッパー」(fopenなどの一部の関数で、HTTP経由によるファイル読込を可能にするフラグ)が設定されていない可能性があります。 デフォルトではこのラッパーはONになっているはずなので、一度phpinfoなどで確認してください。サーバによってはOFFにしているところもあると思いますので。 で、もしOFFの場合は、ini_setで設定してください。それでもini_setがfalseを返すような場合は、ちょっとかなり面倒な手段をとることになりそうな予感…。
お礼
ありがとうございます!phpinfoを確認しました。とりあえずそれっぽい3項目だけ見つけたのですが、見当違いでしょうか? allow_url_fopen はLocal Values, Master Values 両方とも"On"になっています。 include_path はLocal Values, Master Values 両方とも".:/usr/local/lib/php" です。 safe_mode_include_dir はLocal Values, Master Values 両方とも ”no value”になています。 ちなみにホスティングサーバに問い合わせるときは「URL WRAPPER」を有効にしてくれるように頼めばよいのでしょうか?
- namnam6838
- ベストアンサー率36% (681/1861)
fopenは意味が違います。 意図されたように組み込みたい場合は、 include('hello.php'); です。 他のサーバから出来るのかについては試したことがないのでわかりません。
お礼
ありがとうございます!fopenをincludeにしたところ、エラーが出てしまいました。 <?php include 'http://<サーバAのアドレス>/test/hello.php'; ?> をinclude.phpと保存してサーバBにアップしてアクセスしましたがエラーがでました。ちなみに、hello.phpとディレクトリ”test”のCHMODは777に設定しています。 Warning: main(http://<サーバAのアドレス>/test/hello.php): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in /home/<サーバBのアドレス>/public_html/test/include.php on line 3 Warning: main(http://<サーバAのアドレス>/test/hello.php): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in /home/<サーバBのアドレス>/public_html/test/include.php on line 3 Warning: main(): Failed opening 'http://<サーバBのアドレス>/test/hello.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/<サーバBのアドレス>/public_html/test/include.php on line 3 どうぞよろしくお願いいたします。
補足
ありがとうございます、できました!!サーバAのディレクトリのCHMODの設定で777を755にしたところ上手く作動しました。この設定は前にきちんと試したはずだったのですが、今回もう一度やってうまく作動したようです。上手くいってほっとしています。感謝いたします。
お礼
ありがとうございます!うーん、エラーが出てしまいました。 <?php $file = file("http://サーバAのURL/test/hello.php"); foreach($file as $line){ echo($line); } ?> をforeach.phpとしてサーバBにアップして、ブラウザで表示したところ、以下のエラーが出ました。 Warning: file(http://サーバAのURL/test/hello.php): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in /home/サーバBのディレクトリ名/public_html/test/foreach.php on line 2 Warning: Invalid argument supplied for foreach() in /home/サーバBのディレクトリ名/public_html/test/foreach.php on line 3
補足
できました!!サーバAのディレクトリのCHMODを777から755にしたところきちんと表示されました!感動です!しかしなんだかおかしいなー、前に一度CHMODの設定を色々試したはずだったんですが・・・