文字列を連結して変数に(その2)
さっそく次のパターンが出てきた。数値の四則計算をしてその結果を変数に格納する。
変数と変数の計算
{assign var=sum value=`$price*$num`}
*の前後に空白が入るとだめなんだよね。あと変数が普通の数値になってもだめ。このあたりは一回どこかでまとめないといけない(毎回悩むから)。
さっそく次のパターンが出てきた。数値の四則計算をしてその結果を変数に格納する。
変数と変数の計算
{assign var=sum value=`$price*$num`}
*の前後に空白が入るとだめなんだよね。あと変数が普通の数値になってもだめ。このあたりは一回どこかでまとめないといけない(毎回悩むから)。
普段Smartyを使うことが多いが、テンプレート内で文字列の演算をして、その結果を変数に格納したい、ということがよくある。
ある意味、テンプレート内にプログラミングのルーチンを入れるわけだからデザインとプログラムの分離という面から考えればよろしくないのだが、便利に使える機能だ。でも各種演算をして変数に格納する記述、いつも忘れてしまうので、ここにメモ。
文字列「title_」と変数$myTitleをくっつけて、smarty変数$hensuに格納。
{assign var=hensu value=”title_$myTitle”}
他のパターンは、またそういう記述が出てきたときにでも・・・。
Warning: Cannot modify header information – headers already sent …
こういうエラーメッセージを見ることはないだろうか。これはPHPプログラムからHTMLヘッダを吐き出す際にしばしば見られるエラーだ。
HTTPの仕様の話になるが、HTTPレスポンス(ブラウザからのリクエストに対する返答)はヘッダと本文にわかれる。本文とはいわゆるHTMLデータのことで、ヘッダとは本文を送るに際してあらかじめ送出しておくべき内容だ。HTML自体はブラウザの「ソースを見る」で表示させることができるが、ヘッダは別途ソフトを入れない限り見ることができないので、若干なじみが薄い。
ここで上記のメッセージに戻る。このエラーはヘッダ情報を送出しようとしたところ「すでに本文を出力してるからエラーです」といっているのだ。例えば以下のようにするとエラーになる。
<?php
print(‘test’);
header(‘Content-type: text/html’);
?>
プログラム1行目で本文を送出しているにもかかわらず、2行目でヘッダを送出しようとしているからだ。これはバグだ。
このような明らかな場合は、すぐにエラー箇所を発見できるが、発見が難しい場合もある。例えば以下のようにファイルをインクルードする場合を考える。
<?php
include(‘myfile.php’);
header(‘Content-type: text/html’);
?>
インクルード元のmyfile.phpでprint();などとするとエラーになるのは当然だが、そのファイルの文末、つまり?>の後ろに改行や空白があるだけでも上記と同じエラーが出るのだ。このエラーを見つけるのは結構面倒。
そこで対策(目からうろこ)。PHPの閉じタグ「?>」を記述しない。PHPは文法上、閉じタグを書かなくてもOKなのだ。これで余計な改行や空白文字が入る(ブラウザに送出される)ということはなくなる。盲点だけど、すごく便利な裏技だ。
アメリカのレンタルサーバ会社「3iX」。使い始めて約4ヶ月になるが、いたって好調だ。以前「FTPが遅い」と書いたが、現状それほど遅いとは感じない。といっても日本のサーバと比べるとほんの少しだけ遅いのだが(遅いというよりも「のんびり」という程度かな)。
コントロールパネルのcPanelも別段問題ない。ここで「いいな」と思ったのはcron(定期的にプログラムを実行するツール)も利用できるところ。ウェブアプリを書いておいて、定期的にlynxを読んでバッチ処理を実行する、なんてこともできる(実際にやってますが、しごく好調)。
それに安い。ドメイン1個なら月額たったの1$だ。サブドメインも20個までつくることができる。しかもデータベース2個。共用SSLサーバも使える。ただしメアドは20個まで。国内激安レンタルサーバのロリポップと比較すると、メアドの数こそ負けるが、それ以外は断然3iXのほうが上だ。
ちなみに月8$でドメイン10個までその他メアド無制限、サブドメイン無制限、ML無制限、シェルアクセスあり、となる(年間契約でたった88$)。
上位のプランにすれば、複数ドメインも運用できるし、プランによってはシェルアクセスも可能になる。サポートはライブチャットで24時間体制だし、クレームを言うと、かなりのことまで対応してくれる。日本のレンタルサーバもずいぶんよくなってきたとは思うが、安売りサーバで言えば、アメリカのサーバのほうが断然サービスがいい。これを機会に海外サーバにチャレンジしてみるのはいかが?。
もしチャレンジしてみたい人で「英語はちょっと・・・」という人がいたらコメントをいれてください。契約くらいは手伝ってあげられるかもしれません(でもサポートは費用くれないとやりませんけど)。ウェブアプリ構築ももちろんお手伝いさせていただきます!。
昨年から持ち越しになっていた「簡単にウェブアンケートを作ることができる」仕組みをようやくリリースできた(といってもベータ版ということで)。元ネタとなるプログラムは以前から開発していて、既にお客さんに使っていただいていたのだけれど、今回一念発起して一般無料公開用のプログラムをつくってみた。
元ネタのプログラムはユーザインターフェースにFlashを使ってインタラクティブにしたのだけれど、これは結構大変。だってPHPとFlashで、それぞれでプログラムを作るわけで、デバッグがかなり面倒になる(いくつかFlash+PHP連携の開発環境もあるけれど、それを勉強してもあまり利益も見込めないしね)。ということで、利便性もかねてプログラムの全コードをイチから書き直し。結果としてかなり汎用性を持たせることができたっぽい。
現状は(とりあえずオープンさせたかったという目論見もあったので)、
○設問10個のアンケートを作って、
○回答をしてもらって、
○回答データをダウンロードする
だけのプログラムになっている(フォームの指示に従うだけで簡単に作成できるのだから、結構十分と思ってたりもする)。設問種類はフリーアンサー(メアド書式チェック、数値書式チェック、英数書式チェック、複数行への対応)、シングルアンサー(ラジオボタン)、マルチアンサー(チェックボックス)に対応。今後は暇を作ってどんどん機能を追加する予定にしている。一例としてこんな機能を追加予定。
○入力・書式チェック機能の追加
・郵便番号入力
・都道府県入力
・電話番号入力
○シングルアンサー・マルチアンサーのデータ集計とグラフ化
データを集計してグラフ化します
○シングルアンサー・マルチアンサーの回答シャッフル機能
現状10問までしか作成できないけれど、今後はなるべく制限をはずして行く予定。もし気が向いた人がいたら、是非試用してね。以下のURLからたどってくださいな。
http://www.cubequery.jp