【コラム】
前回までにFileMaker API for PHPでの機能の基礎ともいうべき、「登録」「検索」「編集」「複製」「削除」の5機能について紹介してきた。今回からはワンランクレベルアップし、応用編を紹介していこう。
今回はまず、FileMaker API for PHPでの「オブジェクトフィールド」に関する取り扱いについて取りあげよう。
FileMaker API for PHPでの「オブジェクトフィールド」へのアクセス方法は、基本的にFX.phpと同様だ。ポイントを簡単にまとめてみよう。
どれもFX.phpで気をつけるべき点と共通だ。ここでもポイントとして押さえておきたいのは「3」――1オブジェクトフィールドの内容を取得するために、1回のリクエストが発行されるようになっている点だろう。
このため複数のレコードを一度に表示する一覧画面などでオブジェクトフィールドへのアクセスをおこなうと、FileMaker Serverへおおきな負荷をかけることになる。コラム11回目の『オブジェクトフィールドは鬼門?! Webから取り扱うときの注意点』で紹介したとおり、オブジェクトフィールドは同時ユーザ数が多ければ多いほど、格納されているバイナリファイルのサイズが大きければ大きいほどパフォーマンスが低下する。これらの点に注意しながら実装をおこなおう。
それでは実際に実装をおこなってみよう。今回はオブジェクトフィールドを2つ用意した。用意したオブジェクトフィールドとレイアウト情報は次のとおり。
|
|
作成した2つのオブジェクトフィールド。1つはオブジェクトフィールドが空欄だった場合の確認用 |
作成したFileMakerの「fmapi_obj」レイアウト。fm_object_1にはGIF形式の画像ファイルを格納している。fm_object_2にはなにも格納していない |
ソースコードは次のとおり。
fmapi_obj_test.php
<?php
include_once('../FileMaker.php');
// 文字列エスケープ用関数
function h($string)
{
return htmlspecialchars(trim($string), ENT_QUOTES, 'UTF-8');
}
$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');
$findCommand = $data->newFindCommand('fmapi_obj');
$findCommand->setRecordId(2);
$result = $findCommand->execute();
if (FileMaker::isError($result))
{
// エラー処理..
echo 'FileMaker Error Code: ' . $result->getCode();
echo '<p>'. $result->getMessage() . '</p>';
}
else
{
// 正常処理..
$records = $result->getRecords();
foreach ($records as $record)
{
?>
<table border="1">
<tr>
<th>ft_serial</th>
<td><?php echo h($record->getField('ft_serial')); ?></td>
</tr>
<tr>
<th>ft_registTimeStamp</th>
<td><?php echo h($record->getField('ft_registTimeStamp')); ?></td>
</tr>
<tr>
<th>ft_updateTimeStamp</th>
<td><?php echo h($record->getField('ft_updateTimeStamp')); ?></td>
</tr>
<tr>
<th>ft_recordId</th>
<td><?php echo h($record->getField('ft_recordId')); ?></td>
</tr>
<tr>
<th>ft_object_1 (getField)</th>
<td><?php echo h($record->getField('ft_object_1')); ?></td>
</tr>
<tr>
<th>ft_object_1 (getContainerData)</th>
<td><img src="./fmapi_getObjectFieldData.php?path=<?php echo h(urlencode($record->getField('ft_object_1'))); ?>"></td>
</tr>
<tr>
<th>ft_object_2 (getField)</th>
<td><?php echo h($record->getField('ft_object_2')); ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
fmapi_getObjectFieldData.php
<?php
header('Content-type: image/gif');
include_once('../FileMaker.php');
$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');
echo $data->getContainerData($_GET['path']);
?>
fmapi_obj_test.phpではgetField('fmapi_object_1')およびgetField('fmapi_object_2')の結果を表示。<img>タグ内でgetField('fmapi_object_1')の結果をurlencodeして、fmapi_getObjectFieldData.phpに渡している。fmapi_getObjectFieldData.phpはfmapi_obj_test.phpの<img>タグ内から呼び出しているファイルで、fmapi_obj_test.phpから渡されるURI情報をもとにオブジェクトフィールドの内容を取得、必要なヘッダをつけて出力をおこなっている。実際に Webブラウザでfmapi_obj_test.phpにアクセスしてみよう。
|
GIF形式の画像を格納していたfmapi_object_1フィールドの中身が表示される。getFieldでアクセスするためのURIを取得し、それをfmapi_getObjectFieldData.phpに渡して画像を表示している。fmapi_object_2にはフィールドになにも格納されていないため、getField()の結果は空欄となる |
GIF形式の画像を格納していたfmapi_object_1フィールドの中身が表示された。FX.php同様、「URL取得→画像の表示」までにいくつかのステップがある。前述のとおりFileMaker ServerやWebサーバにかかる負荷もあるため、可能なかりぎオブジェクトフィールドの使用は控えたいところだ。
今回紹介したソースコード中に使用しているメソッドであらたに出てきたのは、getContainerData()ひとつのみ。
/**
* Get the data for a given container field.
*
* @param string $url The location of the data.
*
* @return string The raw field data.
*/
function getContainerData($url)
オブジェクトフィールドの内容を取得する実装法を紹介した。なお、FileMaker API for PHPの場合はFX.phpで言う「image_proxy.php」に相当するPHPファイルがない。そのまま使用すると、オブジェクトフィールドにアクセスするためのURIがHTMLソース中に難読化されることなく表示されてしまう。このURIをセキュリティ上ユーザに見せたくない場合はimage_proxy.phpを参考にして、URIを難読/複合化する関数・クラスを別途自作しよう。
| ファイルメーカー、FileMaker Business Allianceメンバー向け割引購入プログラム [2009/6/4] |
| ファイルメーカー、参加無料イベント「FileMaker Road Show 2009」開催 [2009/6/4] |
| ファイルメーカー粟倉社長に聞く、DBアプリ「Bento for iPhone」の国内展開 [2009/6/3] |
| 『ファイルメーカー選手権』でMacBook ProやVAIOを手に入れよう [2009/6/3] |
| Mac Fan ソフトウェアレビュー 第58回 データベース作成ソフト「FileMaker Pro 10」 [2009/5/25] |
| FileMaker、iPhone/iPod touch版「Bento」が登場 - Bento 2.0と同期可能 [2009/5/5] |
| ファイルメーカー、FileMaker用テーマパックを期間限定で無料配布 [2009/4/17] |
| FileMaker Pro 10の魅力はいかに? - 米FileMaker社長 ドミニーク P.グピール氏に聞く [2009/2/24] |
| ファイルメーカーの新社長に粟倉豊氏が就任 [2009/2/2] |
| インタフェースを一新した「FileMaker Pro 10」が発売 [2009/1/6] |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
「アフロ田中」居酒屋とコラボ、料理の上にアフロがドーン [13:45 2/11] ホビー |
|
[アニメ質問状]「輪廻のラグランジェ」 日産と開発の主役機デザインコンペに150人 [13:30 2/11] ホビー |
|
かまいたちら若手6組が激突! 『NHK上方漫才コンテスト』本選出場者が決定 [13:30 2/11] エンタメ |
|
[逆転裁判]三池崇史監督に聞く2 原作ものは「とにかく真似をすること」 キャラ描写と配役語る [13:24 2/11] エンタメ |
|
[ミス日本「海の日」]初仕事で「ジャパンインターナショナルボートショー」をPR 編集部に来訪 [13:00 2/11] エンタメ |