CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

Webから得た情報をCSVファイルに出力するシステムを、先日引越しいたしました。
そしたら大問題が発生。なんとCSVファイルのデータで日本語だけが消失してしまったのです。

デバッグしてみたところ、ファイルの読み込みで失敗していました。
関数「fgetcsv()」でデータを読み込み、プログラムで処理した後、再び関数「fputcsv()」で同一ファイルに書き込むということをしていたのですが、読み込みの時点で日本語が欠落していました。

Webで調べてみるとすぐに原因が分かりました。
どうやら「fgetcsv()」はローカル設定に依存しているようです。つまり、今回の私の場合は、引越し前後のサーバ設定が異なっていたために、このような問題が発生したようです。

Zend FrameworkはPHP5上で動作するフレームワークです。
これまで、個人的にはPEARを活用することが主だったのですが、今回ちょっと本格的にGoogleと連携したWebアプリを作成することになったので、フレームワークに手を出してみようということになりました。
Zend FrameworkはさまざまなAPIとの連携を実装しており、Google APIについては「Zend Gdata」、Yahoo! APIには「Zend Service Yahoo」、Amazonには「Zend Service Amazon」が用意されています。

Zend Frameworkは以下のサイトでダウンロードすることができます。ダウンロードにはzendアカウントを作成する必要があります。現時点での最新ヴァージョンは1.9.5です。
Zend Framework – http://framework.zend.com/

インストールは簡単です。ダウンロードしたファイルを展開し、PHP関連のライブラリが置いてある適当なところへ移動させます。
実際に必要となるファイルは展開した内「library」フォルダのみなので、容量などに不安がある、余計なものは上げたくない場合は、それ以外のファイルはアップしないほうがよいでしょう。

PHPで配列の重複情報を消去したい、ユニークなデータを抽出したいという場面に遭遇したので、array_unique()関数を使ってみました。
例えば、以下のように「a」「b」「c」の3種類のデータが入った配列があった場合に、array_unique()を使うと、8つのデータを3つに絞ってくれます。

php.iniの設定で「short_open_tag」という項目があります。
こちらを設定することで、PHPタグを短くすることができます。

通常、PHPの命令を書く場合には以下のように「<?php ~ ?>」でプログラムソースを囲みます。

<?php echo("命令"); ?>

PHPでアンケートフォームやメールフォームを設置する場合に、POSTされたデータの処理を考えます。
作業する度に、毎回考えさせられるような事なので、ここでメモとして残しておきます。

まず、POSTされたデータは、DBに格納する、ファイルに書き出す、メールで送信するなどのアウトプットが考えられるので、それぞれに応じた文字コードに変換してあげる必要があります。例えば、UTF-8に変換したいのであれば以下のように処理します。

mb_convert_encoding($str, "UTF-8", "auto");

PHPに限った話でなありませんが、プログラミングで「何時間後」や「何日後」などを求めなければならない場面は結構多いです。
普通に処理の流れを考えると、timestamp関数などで現在時刻を取得して、x日後だと1,000ミリ秒かける60秒かける60分かける24時間かけるx、の値を加算して、さらにフォーマットを変換して出力。。。といったようなめんどくさい記述を書いてしまいがちです。

PHPにはとっても簡単な記述方法があったんですね。

通常、PHPで送信フォームなどを組んだ場合に、画面の遷移は
「入力画面」→「確認画面」→「完了画面」
となるのが基本だと思います。
例えば、確認画面から「送信」アクションを発行すると、DBなどに情報を書き込み完了画面を表示するという単純なプログラムを組んだとします。
このとき、完了画面でページリロードをかけられると、再度DBへの書き込み処理が実行され、二重送信となってしまうことがあります。
プログラミング不備の問題ですが、私も結構やっちゃいます。

最近、PHPの開発に携わる機会が多く、自分の今後のためにと、関数軍をなるべく再利用できるように蓄積しています。しかし、単にコメントをつけて、phpファイルを整理しているつもりでも、後々何がどこにあるやら分からなくなります。
javaにjavadocがあるように、phpにもそのしくみがないものかと探してみたら、見つけました。
phpDocumentor

Monthly Archives

Search