SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

PHPとMingで作るFlashサーバー

SWFムービーを作成するWebサーバーを無償ツールだけで構築する

  • X ポスト
  • このエントリーをはてなブックマークに追加

Flashを動的生成するサーバー

 これまでのサンプルは、ディスク上にSWF形式のファイルを生成するというものでしたが、WebサーバーからFlashムービーを返すことも可能です。クライアントのブラウザに直接SWFデータを返すにはSWFMovieオブジェクトのoutput()関数を呼び出します。

output()関数
int swfmovie->output ( [int compression] )

 compressionは、0~9までの範囲でSWFの圧縮レベルを指定する省略可能な引数です。この関数を呼び出すと、PHPはコンテンツを要求しているクライアントに対してSWFデータを返します。ただし、明示的にクライアント側にFlashデータを返すことを伝えなければ、ブラウザがデータ形式を判断できません。そのため、通常はoutput()関数を実行する前に次の文を実行します。

header('Content-type: application/x-shockwave-flash');

 これにより、ブラウザはコンテンツの種類を判断でき、サーバーから受け取ったSWFムービーの表示が可能です。当然、このデータはサーバー上で保存されるものではないので、個々のアクセスごとに生成され、使い捨てられます。

 この方法を利用することで、サーバーが保有しているユーザー情報などから、そのユーザーに限定したムービーを動的に生成することができます。

コード10
<?php
 $topMargin = 100;
 $font = new SWFFont("test.fdb");
 $image = new SWFBitmap(fopen("perry.jpg", "rb"));

 $text = new SWFText();
 $text->setFont($font);
 $text->setColor(0, 0, 0);
 $text->moveTo(10, 50);
 $text->setHeight(20);
 $text->addString($_GET["msg"]);

 $imageShape = new SWFShape();
 $fill = $imageShape->addFill($image);
 $fill->moveTo(0, $topMargin);
 $fill->scaleTo(37);
 $imageShape->setRightFill($fill);

 $imageShape->movePenTo(0, $topMargin);
 $imageShape->drawLineTo(30, $topMargin);
 $imageShape->drawLineTo(50, $topMargin + 40);
 $imageShape->drawLineTo(50, $topMargin);
 $imageShape->drawLineTo(400, $topMargin);
 $imageShape->drawLineTo(400, $topMargin + 400);
 $imageShape->drawLineTo(0, $topMargin + 400);
 $imageShape->drawLineTo(0, $topMargin);

 $swf = new SWFMovie();
 $swf->setDimension(400, $topMargin + 400);
 $swf->setBackground(255, 255, 255);
 $swf->add($text);
 $swf->add($imageShape);

 header('Content-type: application/x-shockwave-flash');
 $swf->output();
?>
ペルリ提督のひとこと
ペルリ提督のひとこと

 コード10は、HTTP のGETメソッドから取得した 「msg」という名前を持つデータを使ってペルリ提督の吹き出しに表示される文字を生成するWebアプリケーションです。この方法であれば、別の HTMLなどで作られたフォームからこのプログラムを呼び出すことができ、入力された文字列に従って吹き出しに表示するテキストを変更できます。

 このプログラムでは、提督の画像ファイルである「perry.jpg」を読み込み、ムービーの下部に表示しています。セリフ用の領域を空けるために、イメージの座標をmoveTo()関数で移動させ、さらにscaleTo()関数でイメージを表示する長方形のサイズに伸縮させています。画面の上部には、描画するテキストの文字列を $_GET["msg"]から取得して設定しています。

 コード10を実行するには、URIから起動しなければなりません。例えば、次のようなHTMLファイルを用意し、Sample11と同じWebサーバー上のディレクトリの配置します。

コード11
<html>
 <head>
  <title>ペルリ提督のひとこと</title>
 </head>

 <body>
  <p>ペルリ提督の台詞を入力してください。</p>
  <p><img src="perry.jpg" alt="ペルリ提督"></p>
  <!--action属性は、実行環境によって適切なURIに変換してください-->
  <form action="sample10.php" method="GET">
  <input type="text" name="msg">
  <input type="submit" value="送信">
  </form>
 </body>
</html>
ペルリ提督のひとことを入力する
ペルリ提督のひとことを入力する

 ブラウザから、このページにアクセスし(ファイルとして開くのではなく、必ずWebサーバーにアクセスしてください)、テキストボックスにペルリ提督のセリフを入力して[送信]ボタンを押せば、Sample11が実行されて入力した文字列を吹き出しに描画するFlashムービーが表示されます。

 このように、Webサーバーから生成したFlashを返すことで、ユーザーからの要求やユーザー情報に基づいた独自のムービーを表示させることができます。

最後に

 さて、本稿ではMingを使ったSWFファイルの生成を扱ってきましたが、いかがだったでしょうか。これまでFlashと言えば、Flash作成ツールを使ってSWFファイルを生成し、Web上でファイルを公開するという方法が一般的だったと思います。しかし、Web 2.0に代表されるような新しいWebの時代では、こうした静的なコンテンツから、個々のアクセスに最適化された動的なコンテンツにシフトしています。PHPとMingの組み合わせであれば、巨額の投資を必要とせずに、容易にFlashを動的に生成するアプリケーションサーバーを実現できます。

 本稿で作成したSWFムービーは動きのあるものではありませんでしたが、Mingで生成するSWFファイルでもアニメーションやActionScriptを使ったインタラクティブなFlashムービーを実現することも可能です。詳細はPHPのドキュメントや、Mingの公式サイトで公開されているドキュメントを参照してください。

参考文献

  1. PHPマニュアル
  2. Ming the Manual

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

赤坂 玲音(アカサカ レオン)

平成13年度「全国高校生・専門学校生プログラミングコンテスト 高校生プログラミングの部」にて最優秀賞を受賞。2005 年度~ Microsoft Most Variable Professional Visual Developer - Visual C++。プログラミング入門サイト WisdomSoft の管理人。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/706 2006/11/27 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング