サーバサービス/サーバー間の連携
提供: Internet Web School
サーバサービス(PHP等) > サーバー間の連携
目次 |
概要
ここでは、PHPによるデータ入出力処理の例をあげ、PHPでのサーバ連携処理の例を示します。
ファイル入出力の扱い
PHPの書き方について、便宜のために前章と同じ資料を再び挙げておきます。
- 英語版:http://www.plus2net.com/PHP_tutorial/PHP_introduction.php
- 日本語版:http://www.scollabo.com/banban/PHP/
この章の後で紹介するプログラムの中で使う命令や関数の書き方について、いくつか説明をしておきます。詳しくはPHPの書き方のページをインターネットで探して自分で調べてください。
fopenについて
ファイルまたは URL をオープンします。
一般形
fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
filename が "スキーム://..." の形式である場合、 それは URL とみなされ、PHP はそのプロトコルのハンドラ (ラッパーともいいます) を探します。 もしもそのプロトコルに対するラッパーが登録されていない場合、 PHP はスクリプトに潜在的な問題があることを示す NOTICE を発行したうえで、 filename を通常のファイルとみなしてオープンすることを試みます。
PHP は、filename がローカルのファイルを示しているとみなすと、 そのファイルへのストリームをオープンします。 そのファイルはPHPからアクセスできるものでなければなりません。 ファイルのパーミッションが (パラメータで指定された) アクセスを許可されているかどうか確認する必要があります。 セーフモード または open_basedir を有効にしている場合は更なるアクセス制限が加えられることがあります。
filename が登録されているプロトコルを示していてそのプロトコルがネットワーク URL として登録されていれば、 PHP は それが有効となっているかどうかチェックします。 もしこれが有効でなければ、fopen は失敗したとします。
fgetsについて
ファイルポインタから 1 行取得する
一般形
fgets ( resource $handle [, int $length ] )
一般形の中のパラメータの説明
- handle
ファイルポインタは、有効なファイルポインタである必要があり、 fopen() または fsockopen() で正常にオープンされた(そしてまだ fclose() でクローズされていない)ファイルを指している必要があります。
- -@fopen
このように関数の前に@ がついていることがあります。この名前はエラー制御演算子といいます。
これは普通に fopen を使うと、fopen に失敗した際に、エラーが表示されてしまいますが、それが不都合な場合があります。このエラーを表示しないのが @fopen となります。
@ を付けたらエラーメッセージは表示されませんが、$php_errormsg という名前のグローバル変数にエラーメッセージが入ります。
サーバーから他のサーバーのWebsite を見る
他のサーバーB 上にある、あるサイトを直接ローカルのパソコンのブラウザで見るのでなく、あるサーバーA を介して見たいことがあります。その理由はいろいろありますが、
- 自分のパソコンのIPアドレスを秘匿したい場合
- 見るサーバーのIPアドレスを秘匿したい場合
- いくつかのWebサイトから自動的に、また定期的にデータを集め、一つのページにまとめる場合
1,2においてなぜIPアドレスを秘匿する必要があるか、は様々なケースが考えられます。3.については実用上重要な技術です。
以下に一つのサーバーAに、Website閲覧用のPHPプログラムを置いて、サーバーBにあるWebページを表示させる例を示します。まずPHPプログラムは(web.php)というものです。
1 <?php
2 $fp = @fopen("http://markun.cs.shinshu-u.ac.jp/mirror/mizar/", "r");
3 while( ! feof( $fp ) ){
4 echo fgets( $fp, 91820 );
5 }
6 fclose($fp);
7 ?>
左側に付けた番号はプログラムの説明のための便宜的なものです。
2番で見たいページのURLを指定し、それを読み取り専用のファイルとしてOPENします。3番4番でそのファイルを終わりまで読み込み(ファイルが大きすぎるときは91820バイトで打ち切る)そして表示もします。
このPHPプログラムにはHTMLの部分が一つもありませんが、4行目のecho文で文字列を表示させるとき、読み込まれたものがHTML形式の文なのでブラウザーで問題なく表示されるのです。
上の例では信州大学のMizarという学問分野のページをあるサーバーを通して見るものです。まず最初のページは次のようなものです(図1)。
この画面はmarkun.cs.shinshu-u.ac.jp というサーバー(サーバーA)にあるものです。上のPHPプログラムにより、サーバーBからはこの画面は次のように表示されます(図2)。
この方法によっては画像は表示されていません。それは画像のファイルは元のサーバーにはあるが、サーバーBには無いからです。
GETでデータ入力をするページを表示する
入力欄のあるページに実際にデータを入力し、sendボタンなどを押すと、
http://.../sample.phhp?bango=1234&name=Nakamura&email=empty&pid=0&no=1
のようなURLのページが表示されます。このURLを先ほどのweb.php のURLを記入した行(2行目)に埋め込めば、マニュアルでその都度データを入力しなくても入力した後現れるページを表示することができます。