« 2006年12月 | トップページ | 2007年02月 »

・[2007年01月07日]PEARを使って、圧縮や解凍をやってみよう
・[2007年01月06日]HTML_AJAXを使ってみよう

2007年01月07日

PEARを使って、圧縮や解凍をやってみよう

以前に複数ファイルを圧縮してダウンロードする方法(HTTP_DOWNLOAD)を紹介しました。
HTTP_DOWNLOADで複数ファイルを圧縮してダウンロードはできるものの、ファイルの[プロパティ]→[概要]が消える問題がありましたが、今回紹介するFile_Archiveは[概要]が消えずに問題なくダウンロードすることができます。
HTTP_DOWNLOADに関してはその名の通りダウンロード用のプログラムですが、File_Archiveは圧縮・解凍用のプログラムです。
ということで、今回はFIle_Archiveを紹介します。

・PEAR::File_Archiveのダウンロード
PEAR::File_Archive
*依存ファイルが多いのでレンタルサーバーをお使いの方はご注意ください。

インストールについて知りたい方は、過去の記事をご参照ください。
レンタルサーバーでPEARを使う方法
WindowsでPEARを自動インストールしてみよう

まずは、ファイルを圧縮してダウンロードしてみましょう。
適当に圧縮させたいディレクトリを準備してください。(今回は「sample」ディレクトリを圧縮すると仮定します)
早速、作ってみましょう。以下のソースを記述してください。

require_once('File/Archive.php');

File_Archive::extract(
  File_Archive::read('sample/'),
  File_Archive::toArchive('sample.zip', File_Archive::toOutput())
);


これで完成です^^;プログラムをブラウザで確認するとzipに圧縮されたファイルがダウンロードできると思います。

File_Archive::extract(
  File_Archive::read($dir),
  File_Archive::toArchive($fileName, File_Archive::toOutput())
);
$dir:圧縮するディレクトリ名
$fileName:ダウンロードファイル名(tar, gz, bz2, tgz, tbz, zipが可能)
File_Archive::toOutput():圧縮したファイルをダウンロードする
File_Archive::toOutput()以外にはFile_Archive::toFiles()があります。 下記のソースを見てください。
require_once('File/Archive.php');

File_Archive::extract(
  File_Archive::read('sample/'),
  File_Archive::toArchive('sample.zip', File_Archive::toFiles())
);


File_Archive::toOutput()File_Archive::toFiles()に変更すると、サーバー内に保存されます。

最後に圧縮したファイルを解凍する方法を紹介します。
sample.zipを「sample」ディレクトリに解凍すると仮定して、以下のようなソースを記述します。

require_once('File/Archive.php');

File_Archive::extract(
  File_Archive::read('sample.zip/'),
  File_Archive::appender('sample')
);


このプログラムを起動させると、解凍されたファイルがsampleディレクトリの中にあると思います。
File_Archive::extract(
  File_Archive::read($fileName),
  File_Archive::appender($dir)
);
$fileName:解凍する圧縮ファイル名(最後に「/」を入れる)
$dir:解凍先のディレクトリ名

解凍する圧縮ファイル名を記述際に、「/」を入れてください。(例:「sample.zip/」)

File_Archiveを使うことにより、サイトのバックアップを取ったり圧縮したファイルをアップロードしてサーバー上で解凍することも可能になります。

・関連記事
複数ファイルを圧縮してダウンロードしよう

| | コメント (0) | トラックバック (0)

2007年01月06日

HTML_AJAXを使ってみよう

今までにAjaxのフレームワークで「Prototype.js」「jQuery」「Yahoo! UIライブラリ」を紹介してきました。
今回は、PEARのHTML_AJAXの基本的な機能を紹介します。名前の通りPHPでAjaxを使う機能です。
2007年1月6日現在でのヴァージョンは0.5.0(beta版)を使っています。

HTML_AJAXは以下のサイトからダウンロードしてください。
・PEAR::HTML_AJAXダウンロード
PEAR::HTML_AJAX

インストールについて知りたい方は、過去の記事をご参照ください。
レンタルサーバーでPEARを使う方法
WindowsでPEARを自動インストールしてみよう

それでは早速、サンプルを作ってみます。
今回は全てのファイルの文字コードを「UTF-8」で統一しています。(文字化け防止)
適当にディレクトリを作ります。(仮に「home」とします)
homeディレクトリの中に「server.php」と「sample.html」の2つのファイルを作ります。

[home]
 └─server.php
 └─sample.html
 └─message.txt

server.phpではAjax用のJavaScriptファイルを自動生成するファイルです。
sample.htmlにAjaxを書き込みます。
message.txtにはAjaxで読み込むテキストファイルです。「はじめてのHTML_AJAX」など適当にテキストを記述してください。

まず、server.phpをテキストエディタで以下の以下の3行を記述します。

require_once("HTML/AJAX/Server.php");

$server = new HTML_AJAX_Server();
$server->handleRequest();


handleRequestメソッドでAjax用のJavascriptを自動生成します。

次にsample.htmlにhtmlタグやheadタグ、bodyタグなどの基本的なタグを記述します。
headタグ内に、以下のスクリプトを記述します。

<script type="text/javascript" src="server.php?client=all"></script>
通常は「src」の中に「xxx.js」と記述することが基本ですが、拡張子を「php」にすることで動的にJavascript(Ajax)を生成しています。
引数「client=all」はHTML_AJAXで使えるjsファイルを全て呼び出します。

次に以下の2行を追加します。

<input type="button" onClick="HTML_AJAX.replace('message', 'message.txt')" value="HTML_AJAX.replaceの起動">
<div id="message">メッセージ表示領域</div>

これで完成です。ボタンをクリックすると「メッセージ表示領域」が「message.txt」の内容に切り替わります。

replaceメソッドの引数は以下のように指定します。

HTML_AJAX.replace(id, file)
id:id属性名
file:読み込むファイル名

他にもappendメソッドやgrabメソッドなどがあります。
ボタンの

<input type="button" onClick="HTML_AJAX.replace('message', 'message.txt')" value="HTML_AJAX.replaceの起動">


<input type="button" onClick="HTML_AJAX.append('message', 'message.txt')" value="HTML_AJAX.appendの起動">

に変えてみてください。
メッセージが上書きされるのではなく、追記されます。

appendメソッドの引数はreplaceメソッドと同じように指定します。

HTML_AJAX.append(id, file)
id:id属性名
file:読み込むファイル名

最後にgrabメソッドについて紹介します。
以下のディレクトリやファイルを新たに作ります。

[home]
 └─server.php
 └─sample.html
 └─message.php

server.phpは以前作成したファイルをそのまま持ってきます。
sample.htmlにAjaxを書き込みます。
message.phpにはAjaxで読み込むテキストファイルです。grabメソッドの機能を分かりやすくするためにPHPにしています。詳細は後ほど説明します。

message.phpに以下の3行を記述します。

sleep(3);
echo "初めてのHTML_AJAX<br />";
echo "UTF-8で作成!3秒停止後に表示";

アクセスしてから3秒後にテキストを表示させます。

replaceメソッドやappendメソッドではid属性を直接指定していますが、grabメソッドは単体でファイルを読み込むことが出来ます。
grabメソッドを使うことにより、javascriptのalert機能やxmlの処理などを別途で指定することが出来ます。
更に、grabメソッドには同期通信と非同期通信の2種類があります。
同期通信は、プログラムが処理中の場合、ユーザーの操作を受け付けませんが、
非同期通信は、プログラムが処理中であってもユーザーの操作を受け付けてくれます。
この非同期通信がAjaxの最大の魅力だと思います。
言葉で説明しても分からないよ!という方は実際に体験してみましょう。

まずは、同期通信を体験してみましょう。sample.htmlに以下の記述をします。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>HTML_AJAX.grad同期モードのテスト</title>
<script type="text/javascript" src="server.php?client=all"></script>
<script type="text/javascript">
<!--
function grab() {
  document.getElementById("message").innerHTML = HTML_AJAX.grab('message.php');
}

//-->
</script>
</head>

<body>
<input type="button" onClick="grab()" value="HTML_AJAX.grad同期モードの起動">
<div id="message">メッセージ表示領域</div>
</body>
</html>


ボタンをクリックすると、3秒後に「メッセージ表示領域」のテキストが切り替わります。
その3秒間ブラウザはユーザーの操作を受け付けません。

今度は非同期通信ですが、以下のように記述してください。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>HTML_AJAX.grad非同期モードのテスト</title>
<script type="text/javascript" src="server.php?client=all"></script>
<script type="text/javascript">
<!--
function callback(message) {
  document.getElementById("message").innerHTML = message;
}
function grab() {
  HTML_AJAX.grab('message.php', callback);
}

//-->
</script>
</head>

<body>
<input type="button" onClick="grab()" value="HTML_AJAX.grad非同期モードの起動">
<div id="message">メッセージ表示領域</div>
</body>
</html>


非同期通信では、ボタンをクリックした後でもユーザーの操作を受け付けてくるのが分かると思います。

grabメソッドは以下のように指定します。

同期通信の場合
HTML_AJAX.grab(file)
file:読み込むファイル名

非同期通信の場合
HTML_AJAX.grab(file, callback)
file:読み込むファイル名
callback:コールバック関数

今回紹介した機能以外にも沢山の機能があります。
ただし、PHP5では自動で沢山のことをやってくれるのですが、私のようにPHP4で仕事をすることが多い方にはあまり向かないと思います。(無理やり作ることは出来るのですが、ほぼ手作業でPHPを使う意味がありません^^;)

・関連記事
prototype.jsの使い方
jQueryを使ってみよう
Yahoo! UIライブラリを使ってみよう

| | コメント (0) | トラックバック (1)