
          
          連載:AjaxとPHPでリッチクライアント(2)
        Ajaxを使ったファイルマネージャをPHPで作ろう
上鍵 忠志
日本PHPユーザ会
2006/4/29
| はじめに | 
前回からずいぶん時間がたってしまった。前回AjaxACというライブラリを用いてAjaxを使用してみた。今回は予告とは懸け離れるが、一部の読者からリクエストのあった原始的なアプリケーションへのAjaxとPHPの実装について解説したいと思う。
| Ajax×PHPファイルマネージャ実装までの流れ | 
今回はJavaScriptからPHPへのアクセス方法、Ajaxを用いたファイルマネージャの実装を行う。
| JavaScriptとPHPの通信 JavaScriptから見たPHPからのリクエストとPHPから見たJavaScriptからのリクエスト Ajaxを使わずにファイルマネージャを作ろう Ajaxを使わないでPHPファイルマネージャの概要と実装スタイル Ajaxを使ってファイルマネージャを作ろう Ajaxへの改変部分と注意点/ファイルマネージャの制限/Ajaxを用いたオープンソースのPHPアプリケーション/phpFreeChat/自前WebにphpFreeChatをコピーしてみよう | 
| JavaScriptとPHPの通信 | 
JavaScriptはブラウザ上で実行されるインタプリタ言語である。PHPはサーバ上で実行されるインタプリタ言語である。JavaScriptとPHPのメッセージの流れは基本的に@IT上のほかの記事を参考にしてもらうといいだろう。
■JavaScriptでの実装例
下記はJavaScriptからサーバ上のURL、「http://www.example.com/ajax/index.php」へアクセスし、HTML上に存在するID「foo」にリクエスト結果を挿入する例だ。
| if(window.XMLHttpRequest) { | 
| リスト1 Ajaxのクライアント側の実装例 | 
基本的にはこれだけである。やっていることとしては、
- XMLHttpRequestを扱うオブジェクトのインスタンス
- サーバとの通信準備
- 状態監視関数の作成、登録
- HTTPリクエストの送信
の4ステップである。下記は@ITの古くて新しいAjaxの真実を見極めるを併せて読むと理解が深まると思われる。
■XMLHttpRequestを扱うオブジェクトのインスタンス
 これは条件分岐がいくつかある処理になっている。理由はブラウザごと(さらにバージョンごと)にXMLHttpRequestを扱うオブジェクトのインスタンス方法が違うからだ。
          
           このロジックはいまのところおまじないのように覚えておいてもいいだろう。
| if(window.XMLHttpRequest) { | 
| サーバとの通信準備 | 
次にウェブサーバとの通信方法(通常GET、POSTを使う)とアクセスするURLを指定する。URLはもともとのドメインから別のところを指定することはできないことに注意したい。
| ajax.open( "GET", "http://www.example.com/ajax/index.php"); | 
| 状態監視関数の作成、登録 | 
 次にHTTPサーバとの通信状態の監視関数の作成と登録を行う。この変数ajaxはいくつかのプロパティを持っており、その中の1つにonreadystatechangeがある。
          
           これはHTTPサーバとの通信状態の変化があると、設定された関数が実行されるのである。
          
           詳しくは枯れた新しいUI革命「Ajax」をASP.NETで活用するを参考にするといいだろう。
| ajax.onreadystatechange = function() { | 
        | HTTPリクエストの送信 | 
最後は実際のHTTP通信を行うメソッドsend()だ。多くの場合引数にはnullを渡していると思うが、筆者が調べたところnullではなく空文字列を渡す方がいいという記述のページがあったため、筆者は空文字列にしている。
| ajax.send(""); | 
これは読者の環境に合わせてもいいだろう。
■PHPでの実装例
それではPHP上の実装はどう記述すればいいのか。これは非常に簡単で、ID「foo」に挿入したいテキストを出力するだけである。このテキストはHTML形式で記述する。
| <?php | 
| リスト2 Ajaxのサーバ側の実装例 | 
非常に簡単である。ちなみにAjaxを用いる場合、文字エンコードをUTF-8にしておく方がいい。Ajaxでは通常UTF-8を用いるため、通常UTF-8以外を使用しているシステムの場合、mbstringやiconvなどで何らかの手段で文字エンコードを変換する処理が必要になるだろう。
| 1/3 |  | 
| INDEX | ||
| Ajaxを使ったファイルマネージャをPHPで作ろう | ||
|  | Page1<JavaScriptとPHPの通信> JavaScriptでの実装例/XMLHttpRequestを扱うオブジェクトのインスタンス/サーバとの通信準備/状態監視関数の作成、登録/HTTPリクエストの送信/PHPでの実装例 | |
| Page2<Ajaxを使わずにファイルマネージャを作ろう> Ajaxを使わないでPHPファイルマネージャの概要と実装スタイル | ||
| Page3<Ajaxを使ってファイルマネージャを作ろう> どこをAjaxにするか/改変部分/注意点/ファイルマネージャの制限/Ajaxを用いたオープンソースのPHPアプリケーション/phpFreeChat/自前WebにphpFreeChatをコピーしてみよう | ||
- GASで棒、円、折れ線など各種グラフを作成、変更、削除するための基本 (2017/7/12)
 資料を作る際に、「グラフ」は必要不可欠な存在だ。今回は、「グラフの新規作成」「グラフの変更」「グラフの削除」について解説する
- GET/POSTでフォームから送信された値をPHPで受け取る「定義済みの変数」【更新】 (2017/7/10)
 HTMLのフォーム機能についておさらいし、get/postメソッドなどの内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】
- PHPのfor文&ループ脱出のbreak/スキップのcontinue【更新】 (2017/6/26)
 素数判定のロジックからbreak文やcontinue文の利点と使い方を解説。for文を使ったループ処理の基本とwhile文との違い、無限ループなども併せて紹介します【PHP 7.1含め2017年の情報に合うように更新】
- Spreadsheetデータの選択、削除、挿入、コピー、移動、ソート (2017/6/12)
 Spreadsheetデータの選択、挿入、削除、コピー、移動、ソートに使うメソッドの使い方などを解説する
|  | |
| 
 | |
|  | 

 







