SHOEISHA iD

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

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

特集記事

ここまでできる!HTML+SQL+Alinousベースプログラミング

Web特化言語で超シンプルWebDBアプリ作成実践編


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

RSSの作成

 Alinous-Coreでは、簡単にRSSの作成も行うことができます。このサンプルはサンプルプロジェクトの「ALINOUS_HOME/rss/」のフォルダの中にあります。RSS自体は、「ALINOUS_HOME/rss/index.alns」と「ALINOUS_HOME/rss/index.rss」で構成されます。今までは、HTMLファイルとALNSファイルのペアで1つのページが構成されていましたが、今回は、HTMLファイルの代わりにRSSファイルが使われます。RSSの生成自体は非常に簡単なので、サンプルを見た方がよく分かると思います。

ALINOUS_HOME/rss/index.alns
SELECT * INTO RECORDS 
  FROM SAMPLE_table 
 ORDER BY NAME DESC
       limit 10;

$rdfAbout = "http://localhost:8080/";
$title = "Sample RSS";

return 0;
ALINOUS_HOME/rss/index.rss
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja">
<channel> <title>{$title}</title> <link>{$rdfAbout}</link> <description>Sample RSS</description> <item alns:iterate="@RECORDS" alns:variable="rec"> <title>{$rec.NAME}</title> <link>http://localhost:8080/rss/show.html?name={$rec.NAME} </link> <description>{$rec.COMMENT} The email is {$rec.EMAIL} </description> </item> </channel> </rss>

Basic認証、フォーム認証

 最近のWeb系の開発では、認証はシステムがからんだ場合には必ずと言ってよいほど求められると思います。Alinous-Coreででは、「alinous-config.xml」を記述することによって簡単に認証のシステムを構築できます。また、認証用のレルムとしてデータベースのテーブルを指定できることから、ユーザーやロールの登録や管理の部分も簡単に作成できます。

 認証に関しては、以前の記事「Alinous-Coreの認証FWでBASIC認証とフォーム認証を運用」を参照してください。

メールの高速大量送信

 メールはWebとはもはや、切っても切り離せない関係です。しかも大量に、そして高速にメールを配信したいという需要は相当あるのではないかと思います。Alinous-Coreでは単純にメールを送るだけではなく、高速にメールを送るための機能も備えています。

SMTPの設定

 まずは、「ALINOUS_HOME/alinous-config.xml」にSMTPサーバの設定をする必要があります。

SMTPの設定例
<mail>
  <server>mail.nanntoka.com</server>
  <port>25</port>

  <!-- If language encoding is necessary -->
  <lang-encode>ISO2022JP</lang-encode>

  <!-- If authentication is necessary -->
  <auth>
    <method>login</method>
    <user>user</user>
    <pass>pass</pass>
  </auth>
</mail>

 日本語のメールを送りたい場合は、lang-encodeを設定します。また、メール送信時にSMTPサーバの認証が必要な場合は、authタグに含まれる内容を記述します。プロバイダによりますが、SMTPサーバからメール送信する際に認証が必要のない場合はこの部分は省略してください。

メールの送信

 Alinous-Coreで、メールを送信する場合には、Mail.send()関数を使います。下のサンプルコードを参考にしていただければ、使い方は分かるかと思います。

メールの送信
// メールオブジェクト作成
$mail.from = "dummy@hogehoge.com";
$mail.to = "hoge@hogehoge.com";
$mail.cc = "hoge2@hogehoge.com";
$mail.bcc = "hoge2@hogehoge.com";
$mail.subject = "Test mail";

$mail.body = "こんにちは。

これは、テストメールです。

とりあえず、受信したら捨ててしまってかまいません。";

// Send
Mail.send($mail);

 この例は、TOCCBCCのフィールドにそれぞれ1つずつアドレスを設定して送信している例です。では、大量送信したい場合にはどうしたらよいのでしょうか?実は、下の例のように、TOCCBCCのフィールドは配列型を代入できます。

メールの複数アドレスに対する送信
$toArray[0] = "hoge@hogehoge.com";
$toArray[1] = "hoge1@hogehoge.com";
$toArray[2] = "hoge2@hogehoge.com";

// メールオブジェクト作成
$mail.from = "dummy@hogehoge.com";
@mail.to = @toArray;
$mail.cc = "hoge2@hogehoge.com";
$mail.bcc = "hoge2@hogehoge.com";
$mail.subject = "Test mail";

$mail.body = "こんにちは。

これは、テストメールです。
かなり高速に送信が可能ですので、スパムメール配信には絶対に利用しないでください。";

// Send
Mail.send($mail);

 上のソースと、その前の通常のメール送信のプログラムで違うところは、$mailオブジェクトのtoに配列を代入しているところです。このようにすることによって高速にSMTPプロトコルでメールを送信できます。今回は、toフィールドで例を示しましたが、ccbccも同様のことが可能です。

ファイルアップロード

 Webアプリケーションでは、画像のアップロード機能が必要になることもあります。Alinous-Coreでは、画像やファイルのアップロードにも対応しており、業務系以外にもブログやSNS、CMSなどの開発も可能になっています。

ファイルアップロード用のフォーム

 ファイルアップロードのサンプルは「ALINOUS_HOME/upload」にあります。最初のファイルを入力するためのフォームは「ALINOUS_HOME/upload/index.html」にあります。まずは、入力フォームのソースコードを示します。

ファイルアップロードのフォーム
<html>
  <head>
    <meta http-equiv="Content-Type" 
content="text/html; charset=utf-8">
<title></title> </head> <body> <H3>Uploading an image file</H3> <form name="upload" action="upload.html" method="POST"
enctype="multipart/form-data">
<table> <tr> <td>FILE NAME</td> <td> <input type="text" name="filename" size="18"
alns:validate="notNull">
<span alns:msg="filename" alns:form="upload"
alns:validate="notNull">
<font color="#FF0000">Input FILE NAME.</font><br> </span> </td> </tr> <tr> <td>SELECT FILE</td> <td> <input type="file" name="file" size="18"
alns:validate="custom">
<span alns:msg="file" alns:form="upload"
alns:validate="NO_NAME">
<font color="#FF0000">Input FILE to upload.</font><br> </span> <span alns:msg="file" alns:form="upload"
alns:validate="WRONG_FILE">
<font color="#FF0000">File type is wrong.</font><br> </span> </td> </tr> <tr> <td></td> <td><input type="submit" name="submit" value="UPLOAD"></td> </tr> </table> </form> </body> </html>

 このフォームでは、method属性をPOSTに設定し、enctype属性の値をmultipart/form-dataに設定しています。そうすることにより、ファイルをマルチパートのフォームデータとしてサーバに送ることができます。逆に、この設定を忘れると、ファイルのアップロードができないので気を付けてください。ファイルの選択自体はtype属性がfileのフォームインプットで行います。具体的には次の部分になります。

ファイルアップロード用インプットの抜き出し
<input type="file" name="file" size="18"  alns:validate="custom">
<span alns:msg="file" alns:form="upload" alns:validate="NO_NAME">
  <font color="#FF0000">Input FILE to upload.</font><br>
</span>
<span alns:msg="file" alns:form="upload" alns:validate="WRONG_FILE">
  <font color="#FF0000">File type is wrong.</font><br>
</span>

 今回、抜き出した部分には、バリデータ用のメッセージも含まれています。file型のフォームインプットに対するバリデータの使いかたは後述します。

アップロードしたファイルの受け渡し

 アップロードしたファイルの受け渡しは、「ALINOUS_HOME/tmp」フォルダにテンポラリーファイルを利用して行われます。テンポラリーファイルの名前は、

  • [SESSION ID]_[FILE NAME]

 というフォーマットになります。例を示しますと、「sample.jpg」というファイルをアップロードしたときに、現在のセッションの値が「A43B2C8C0408BE4F741C7B096113E22B」だったとします。この時のテンポラリファイルのパスは「ALINOUS_HOME/tmp/A43B2C8C0408BE4F741C7B096113E22B_sample.jpg」になります。

バリデーションとその後の処理

 ファイルのアップロードに関しても、バリデータを使うことができます。ファイルのアップロードの場合は、custom型のバリデータを利用します。

ファイルアップロード後の処理とバリデーション
$tmpFile = "/tmp/" + $SESSION + "_" + $IN.file;

File.makeDir("/upload/images/");
File.copy($tmpFile, "/upload/images/" + $IN.file);

return 0;

function validate($formName, $inputName, $value, $IN, $SESSION)
{
  if($inputName == "file"){
    return validateFile($value);
  }
}

function validateFile($value)
{
  if($value == ""){
    return "NO_NAME";
  }
    
  $value = String.toLowerCase($value);
  if(String.endsWith($value, ".gif") ||
     String.endsWith($value, ".jpg") || 
     String.endsWith($value, ".jpeg") ||
     String.endsWith($value, ".png")){
     return 0;
  }
return "WRONG_FILE";
}

 ファイルアップロード用のインプットにcustom型のバリデータを設定した場合には、通常の場合と同じvalidate()関数が呼ばれます。このとき、$inputNameには、アップロードしたファイルの名前(パスからフォルダをのぞいた名前)が入ります。

 バリデーション成功後のロジックは、ソースの先頭部分になります。ここでは、パラメーターの$IN.filefileはファイルアップロードのフォームのname属性)から、テンポラリーファイルへのパスを作り、イメージを保存するフォルダにコピーしています。

まとめ

 今回は、Alinous-Coreで何ができるかについて書いてみましたが、Alinous-Core単体でもかなりのことができるということが分かっていただけたのではないかと思います。

 Alinous-Coreの今後の動きとしては、PostgreSQLに注目し、データベースによる全文検索にフォーカスを当て、現在のWeb 2.0時代のWeb開発の需要に応えていこうと思っています。

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

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

もっと読む

この記事の著者

飯塚 友裕(イイヅカ トモヒロ)

Eclipse関連のソースコード自動生成プロダクトの開発者。ソースコード自動生成エンジンを他社に供給する技術エンジン会社「CROSSFIRE JAPAN, INC.」で、O/RマッピングツールやJavaによるSQLパーサーを開発。現在、NetBeans.org(米国)のパートナー。最近は、Alinous-Coreを利用したパッケージビジネスを行っています。SEO対策対応ECサイト構築パッケージOpen-ECAlinous-Coreのソースコードダウンロードhttp://sourceforge.jp/projects/alinous-core/はてなブログhttp://d.hatena.ne.jp/i-zuka/

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1375 2008/09/03 13:58

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング