&と#と数字と;と

2008/10/30 | PHPの基本

&と#と数字と;とで、文字を表すことができる。これは当たり前のことなのだけれど、なんと言っていいのか知らなかった。数値文字参照というらしい。中国語の表示を調べていて偶然見つけた(昔からずっと気にしていた)。でもって、普通の文字列を、いかにして数値文字参照に変換するか、その方法をずっと知らなかった(困ることもなかった、といえば嘘になるが、放置していてもなんとかなっていたというのも事実)。そして今日ようやくそのやり方を知った。

mb_convert_encoding($str,’HTML-ENTITIES’,’UTF-8′);

もちろん逆もできる。他にも知らない関数を使うやり方を見つけた。

tidy_repair_string

こういう見たこともない関数でできるらしいけど、よくわからない。検索で見つけなかったら一生出会うことがなかった関数かもしれない。この関数については以下のサイトを参照。

KoshigoeBLOG

大変勉強になりました。

move_uploaded_fileの挙動

2008/10/17 | PHPの基本

move_uploaded_file関数を使っていて問題が起こった。この関数を使ってアップロードしたファイルを適切な場所に保存していたのだが、保存したファイルのダウンロードができない。Permission Errorが出る。調べてみたらパーミッションが600になっていた。おそらくオーナーがapacheか何かなので、apache以外の権限では操作できないことになっているようだ。

move_uploaded_file関数をcopy関数に置き換えてみるとこの問題は解決した(rename関数にすべきだったかな)。なぜmove_uploaded_fileとcopy関数で、移動されたファイルのパーミッションが変わってしまうのだろうか(変えるような仕様になっているのだろうか)。move_uploaded_file関数のマニュアルを読むと「セーフモードとopen_basedirの両者を考慮」とか「PHP を通じてアップロードされたファイルのみを移動できる」とか書いてあるので、このあたりの影響のせいだろう。本当のところはソースを読まないとわからないけれど。

軽量フレームワーク3eyes、バグフィックスと機能追加

ようやくリリースした3eyesだけれど、十分チェックしていなかったこともありバグがあったので、やむなく改修作業。それと、データベース接続をpdoだけにするのはちょっとうまくなかった(自分の借りているレンタルサーバの環境で使えないところがあった)ので、ADODBでも使えるように改修。それと、その他少しメソッドを追加。

やっぱりある程度実務で使っていかないと、良し悪しが判断できないものだと痛感した。当面は懲りずに自分の開発で使用してみる予定。最近放置状態だった自分のサイトもあるし新しく企画中のサイトもあるので、年末年始にかけてこつこつリニューアル・公開していくつもりだ。

なお3eyesの新バージョン(バグフィックスと機能追加)は2008年10月14日公開予定。ダウンロードはこちらからどうぞ。

3eyes – PHP Light Weight Framework

入出力ストリーム

2008/10/09 | PHPの基本

最近は、メールの到達をトリガーにしたアプリケーションを組んだり、XML-RPCだったり、と通常の$_POSTや$_GETで取得できないデータを取り扱わないといけないことも多い。世に出ている各種ライブラリを使うのもいいが、汎用性も何も必要ないので、手書きで数行でプログラムを書いてその場をしのぐこともある。そのほうが「ライブラリの使い方」を勉強しなくていいからだ。

生データにアクセスするにはphp://stdinやphp://inputを使用する。具体的には以下のような記述がある。

$request=file_get_contents(‘php://input’);

昔はstdinを使っていたのだが、最近はinputを使うようだ。でもその違いがわからない。ちゃんとした解説を見つけられないでいる。今借りているレンタルサーバの一つで試したらinputではデータを取得できたけど、stdinではダメだった。基本的なセンスとして「動けばいい」というのが自分のポリシーなのでこれ以上詮索しなかったけど、実際問題としてどういう違いがあるのか、というところには興味がある。

解説ページを探そう。

SQLiteの連番生成

2008/10/09 | SQLite

最近は結構SQLiteを使うことが多い。PHP5という前提はあるけれど(もちろん条件がそろえばPHP4でも大丈夫なんだけど)。レンタルサーバを使う際に、MySQLの場合はデータベースの個数に制限がある場合がほとんどだけど、SQLiteなら何個データベースを作ってもOKだから気兼ねなく使える。

でもいまだに慣れないところもある。バージョン2系と3系の違いがあるのかもしれないけれど(いろいろ試したわけではないのでよくわからない)、バージョン2で連番生成させたいときの条件が難しかった。単にデータベースの操作ツールがsqliteManagerだったからわかりにくかったのかもしれないけれど。連番生成のための条件をメモしておく。

  • 主キーであること
  • データ型がINTEGER
  • サイズを指定しない
  • NULL許可

このカラム設定にしておいて、データのINSERT時に主キーをNULLで登録すればOK。

PHP4系だと、どうしてもSQLite2系を使わないといけない場合があって面倒だ。PHP5系ならSQLite3系で、管理ツールにFireFoxのプラグインの「SQLite Manager」を使って問題なくいろいろな操作ができるんだけど(しかし管理ツールの名前が同じってのは区別しにくい)。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net