phpフレームワーク探しの旅

CodeIgniter関連の記事を見ていると、どーもライセンス的に雲行きが怪しいとか、CI(CodeIgniter)の開発者が一部別プロジェクトに流れているとかいう話が見えてきます。

で、KohanaPHPとFuelPHPというのが目についた次第。
ちゃんとプロジェクトが続いてくれれば文句はないんですが、かつて一世を風靡した感のあるMojaviみたいに「あれメンテ止まったぞオイ」みたいなのは避けたい。
さしあたり、FuelPHPの評判がCodeIgniter界隈では良いみたい。
さわってみよーう。

なにがいいって、ロゴがかわいいんだよ。またそれか。

phpフレームワーク選定のまき

Symfony CakePHP ZendFreamWork CodeIgniter Ethna
フレームワークの選定はこのへんの線で考えてたんですが、CodeIgniterで決まりそう。
sessionが微妙みたいな書き込みあったんですが、どのみちWebサーバ複数台になるのでDBかなんかに値渡すハメになるしね。もんだいなかろ。
ZendFWもさらっと触ったんですが、学習コストが大きいという感触。
良い悪いと言うよりは用途と好みの世界ではある。
ZendFWで一番びっくりしたのは、ドキュメントだけで200MB超えてたこと。なんなの。
早めに触ってみて、致命的な問題が埋まってないかどうか確認しないとね。

さしあたりこれらの環境(php5+MySQL+CodeIgniter+Twig)を、自分ちのローカルとxreaにセットアップ。xreaは研修の見本用。
自分のPCにMySQL入れるのやだなあ。
入れる必要もないなあ。
自宅鯖に入ってた。これでいいじゃん。

さくらのVPSにphp5.3をインストール

検索で引っかかった悲惨な方へ:あちこちに記事上がってるのでちゃんとしたのはそちらを読みましょう。
ここはおねーさんのメモ書きです。
http://www.tooyama.org/yum-addrepo-epel.html
ここ見ればだいたい分かるはず。EPELってなんなのっていう疑問は丸呑みで。

calltellaさんとこも参考になる記事がワラワラある。

以下は自分用のメモ書き

さくらVPS:php5.4インストール試行

yumで普通に入れると
php -v
PHP 5.1.6 (cli) (built: Feb 22 2012 19:21:52)
ありえん。

まず環境チェック
http://support.sakura.ad.jp/manual/vps/ossetup.html
インストールOS :CentOS 6.2 x86_64
6だった

以下の手順は
http://www.tooyama.org/yum-addrepo-epel.html
ここみながら行う

優先度を設定するyum-priorities
yum -y install yum-priorities

cd /etc/yum.repos.d
vi /etc/yum.repos.d/CentOS-Base.repo
priorityをあちこちに付加
vimじゃなくてviがインストールされてたので、最初コピペして少々ビビる

EPELをインストール
# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm
# rpm -ivh epel-release-6-5.noarch.rpm

これだとだめで↓
warning: epel-release-6-5.noarch.rpm: Header V3 RSA/SHA256 signature: NOKEY, key ID ********
error: Failed dependencies:以下略

# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm
こっちで入った。

rpm -ivh epel-release-5-4.noarch.rpm
warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID ********
Preparing… ########################################### [100%]
1:epel-release ########################################### [100%]
6じゃなくて5なの?そう……。

epel.repoを開いて、
[epel]に
priority=2
を追加。

yum install php
だめ。また5.1.6を取りに行こうとしてる。ナニコレ

「EPEL リポジトリを見にいくようにするには –enablerepo=epel オプションを付けます。」
http://d.hatena.ne.jp/t2y-1979/20110430/1304140587

なるほどー

yum install php –enablerepo=epel
php-commonとかがコンフリクトしてるよと怒られる。
あらかじめ入ってたphpはremoveしてあるんだけどなあ
yum remove phpだけではだめだた?
yum remove php-*できれいにする。
php-commonとかいろいろあった。

yum install php –enablerepo=epel
だめ。5.1.6。
yum install php53 –enablerepo=epel

====================================================================
 Package                     Arch     Version      Repository  Size
====================================================================
Installing:
 php53                       x86_64   5.3.3-5.el5  base       1.3 M
Installing for dependencies:
 php53-cli                   x86_64   5.3.3-5.el5  base       2.4 M
 php53-common                x86_64   5.3.3-5.el5  base       605 k

Transaction Summary
====================================================================
Install       3 Package(s)
Upgrade       0 Package(s)

Total download size: 4.3 M
Is this ok [y/N]: 

きーたー

で、PHPのコンパイルオプションをコマンドラインで確認する方法を参考にオプション取得
php -i | grep configure | sed -e ‘s/ /\n/g’

'./configure'

'--build=x86_64-redhat-linux-gnu'
'--host=x86_64-redhat-linux-gnu'
'--target=x86_64-redhat-linux-gnu'
'--program-prefix='
'--prefix=/usr'
'--exec-prefix=/usr'
'--bindir=/usr/bin'
'--sbindir=/usr/sbin'
'--sysconfdir=/etc'
'--datadir=/usr/share'
'--includedir=/usr/include'
'--libdir=/usr/lib64'
'--libexecdir=/usr/libexec'
'--localstatedir=/var'
'--sharedstatedir=/usr/com'
'--mandir=/usr/share/man'
'--infodir=/usr/share/info'
'--cache-file=../config.cache'
'--with-libdir=lib64'
'--with-config-file-path=/etc'
'--with-config-file-scan-dir=/etc/php.d'
'--disable-debug'
'--with-pic'
'--disable-rpath'
'--without-pear'
'--with-bz2'
'--with-exec-dir=/usr/bin'
'--with-freetype-dir=/usr'
'--with-png-dir=/usr'
'--with-xpm-dir=/usr'
'--enable-gd-native-ttf'
'--without-gdbm'
'--with-gettext'
'--with-gmp'
'--with-iconv'
'--with-jpeg-dir=/usr'
'--with-openssl'
'--with-pcre-regex=/usr'
'--with-zlib'
'--with-layout=GNU'
'--enable-exif'
'--enable-ftp'
'--enable-magic-quotes'
'--enable-sockets'
'--enable-sysvsem'
'--enable-sysvshm'
'--enable-sysvmsg'
'--with-kerberos'
'--enable-ucd-snmp-hack'
'--enable-shmop'
'--enable-calendar'
'--without-sqlite'
'--without-sqlite3'
'--with-libxml-dir=/usr'
'--enable-xml'
'--with-system-tzdata'
'--enable-force-cgi-redirect'
'--enable-pcntl'
'--with-imap=shared'
'--with-imap-ssl'
'--enable-mbstring=shared'
'--enable-mbregex'
'--with-gd=shared'
'--enable-bcmath=shared'
'--enable-dba=shared'
'--with-db4=/usr'
'--with-xmlrpc=shared'
'--with-ldap=shared'
'--with-ldap-sasl'
'--with-mysql=shared,/usr'
'--with-mysqli=shared,/usr/lib64/mysql/mysql_config'
'--enable-dom=shared'
'--with-pgsql=shared'
'--enable-wddx=shared'
'--with-snmp=shared,/usr'
'--enable-soap=shared'
'--with-xsl=shared,/usr'
'--enable-xmlreader=shared'
'--enable-xmlwriter=shared'
'--with-curl=shared,/usr'
'--enable-fastcgi'
'--enable-pdo=shared'
'--with-pdo-odbc=shared,unixODBC,/usr'
'--with-pdo-mysql=shared,/usr/lib64/mysql/mysql_config'
'--with-pdo-pgsql=shared,/usr'
'--with-pdo-sqlite=shared,/usr'
'--enable-json=shared'
'--enable-zip=shared'
'--without-readline'
'--with-pspell=shared'
'--enable-phar=shared'
'--enable-sysvmsg=shared'
'--enable-sysvshm=shared'
'--enable-sysvsem=shared'
'--enable-posix=shared'
'--with-unixODBC=shared,/usr'
'--enable-fileinfo=shared'
'--enable-intl=shared'
'--with-icu-dir=/usr'

わい。
ちなみに

PHP Warning: Unknown: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘JST/9.0/no DST’ instead in Unknown on line 0

あー。タイムゾーンの設定ないんだなー。Asia/Tokyoだかってあれをphp.iniにアレすんだ。うろ覚えですが。
php.iniに
date.timezone = Asia/Tokyo
設定。シングルクオートがダメなのは覚えてるんだけどクオート必要なんだっけかなあ

php -i | grep configure | sed -e ‘s/ /\n/g’

うんまあおこられなくなったよ。さしあたりこれでよし。
なにphp入れてんだって?仕事でなんかこさえることになりそうなので、フレームワークの選定すんですよ。いまのとこCodeIgniterの感触がとてもよい。素直なつくり。
Symfony悪くないけど、viewに渡す変数を奇妙なオブジェクトでくるむのが嫌。
CakePHPはなんでも配列にしたがるのとORマッパでデータ取って来る時のJOINの癖が嫌。
ZendFWは評価できるほど使ったことないんだけど大掛かりなイメージ。触ってはみる予定。
大問題なポイントは、ド素人に近いメンバーも参加するって点。学習曲線が緩やかでないとまにあわなーい
わーん

引き続きHaskell

なんなんだあの\x -> なんとかかんとかみたいなのは。
さしあたりリスト。Pythonとは違い、イミュータブルだって。というかざっと見た感じほとんどそうなんではないかという勢い。わからんなあ。

で、range()みたいなノリでリストを作れるのね。

Prelude> [1..10]
[1,2,3,4,5,6,7,8,9,10]

ふーん。あ、でもrange(1,10)の結果は[1, 2, 3, 4, 5, 6, 7, 8, 9]だからちょっと違う。

Prelude> [1,2..10]
[1,2,3,4,5,6,7,8,9,10]

ふんふん。

Prelude> [1,2,3,4..10]
<interactive>:1:9: parse error on input `..'

えっなに。あたしの想定では[1,2,3,4,5,6,7,8,9,10]なんだけど。なんなの。

Prelude> [1,2,3..10]
<interactive>:1:7: parse error on input `..'

んーー?

Prelude> [1,5..10]
[1,5,9]

えっなにそれキモい。なんで1,5,9なのん。。。

Prelude> [1,5..30]
[1,5,9,13,17,21,25,29]

あー!あー。
等差数列。
なるほど。。。
マニュアルもななめ読みで適当に打ってたらこうなったというお話。

全然関係ないですが、TwigってJinja(Jinja2)にそっくりさん?Jinja2のテンプレートそのまま使えるんじゃないかってくらい似てる。
おかげさんで読みやすいのなんの。
素のphpでテンプレート書くの嫌だし今日びSmartyもないわなーというときに、これはいいんでないか。
Jinja2にそっくりだという点だけがポイント高いわけですが。趣味的に。

三流phperがpythonやwsgiのなにでつまづくかっていうと

ぜんぶapacheさんがよろしく沙汰しとってくれてた部分も意識する必要があって、
「そんなことしないと動かないの?」
っていうのが大きい。と思うのね。
その違和感と言うかギャップというのか、そういうのを解消する助けになる記事をそのうち書こうと思います。

  1. アプリケーションサーバっつうのがあって、ポート開いて待受をしたりする。アパッチさんやNginxさんあたりがポート80番で受け取ったのを、別ポートで待ち受けてるアプリケーションサーバに渡したりするんだな。apache:80→pylons:8050とかさ。そういうの。
  2. phpはapacheモジュール(mod_php)で動くから、Permissionいじんなくてもいいんだな。あいつが色々とやってくれる運びになってる。pythonも昔はmod_pythonとかあったけど今使う人あんまいないよ。wsgiっつうしかけがあって、説明読んでも意味分からんかもだけどそっちが主流ってもっぱらの噂
  3. いっちばん最初に1ファイルのCGIでもいいのでpython動かしてみよう、のときにどうしたら良いのか正直わからない
  4. php.net/manual/jaみたいなわかりやすい総本山が見つからない。ここ見て
  5. あと、version2.5のだけどチュートリアルを何度も読むのがいいと思う。コマンドラインとかで色々やるのつまらないと思うけど、ひととおりやって、それからCGIで動かしてみるっていう順番でライブラリリファレンス見るといいと思います。HTMLになってくれないと調子でないよね正直。
  6. 「借りてるレンタルサーバはpythonって入ってない」これ多くてコケる人多いと思う。ソース落としてきてコンパイルしちゃえよ。./configure prefix=/home/youraccount/pythonってやりさえすればいいんだ。ほんとよ(これはそのうち書く)。
  7. いまどきはvirtualpythonぽ
  8. PEARいっこどどんと落としてくれば済んだのにじぶんでeasy_install!pip!→import!import!ってめんどくさい。分かるよ兄弟。でもrequire_onceつかってたろ。同じことだよ
  9. auto_loadだっけ。あれは悪魔の所業だ。どこで何が起きてるのかわからないじゃんね
  10. どっかで定義すれば適当に使えていた定数とか、あれnetbeansでも入れてなければ、どこで定義されてるか追いかける気にもならないよね。pythonのimportでフルパスに近い書き方させられるのは、書いたあとで手を入れたとき、重要な意味を持つってわかると思う。もっともpythonも最近は相対パスっぽい呼び方できるんだけど、まあ「どこにあるそれを呼ぶのか」が明示的なのはメリット大きい
  11. そんなの規約で定めればいいじゃん、結構ですがそのルールきちんと機能し続けるにもなかなか苦労が
  12. 2と3どっちがいいの!?2011年11月時点では2.7でよいと思いますのよ

“三流phperがpythonやwsgiのなにでつまづくかっていうと” の続きを読む

さくらインターネット

の、レンタルサーバであれこれつくって動かしておけという業務命令。
はいはい。
えええええええええ
PDOつかえない。
mysqliさえない。
あたしの使い方が悪いんじゃないよ。もともとダメなの。
このご時世、mysql_connectってどこの田舎の話だ。
PHPのバージョンだけは5系って笑うところですよね……。
なんかWikiとかみると、自分でインストールしなおすとかハードコアな話がズラズラ。
PEARも古いとか。意味分かんないよ?
えっと、使いやすいように保守、設定しておきますねという概念はないのか。
もともとphp対応が恐ろしく遅かったサーバという記憶は確かにあるんだけど、ここまでひどいのか。
分かる人は勝手にやってという雰囲気だけは漂わせているけれど、こりゃ単なる怠慢だと思うよ。
社長には鯖変えさせてくれと言おう。
xreaたんだいすきー

php5さわりはじめました

Xreaに対応サーバ上がってたので移設したんですけど。
なにからなにまで矢印(->)の嵐だわー
ドキュメントも揃ってなかったりでカンでやりくり中。
レスポンス分割攻撃への対応も5.1.2で完了とのことで、すばらしい。まだ試してないけど。
レスポンス分割攻撃にかんしてはCRLF二個使うってのは知ってたけど、Content-Length: 0も同じ効果を生むんだとか。
やばいよやばいよ不勉強だった!
#こっちも対応済とのこと
mysqliクラスでプリペアードステートメントも使えるようになったし、おっかなびっくり書いてる他人のソースを見ることも少なくなるのかも。
とはいえ、またいろいろ出てくるんだろうなあ。
セキュリティ意識は高く保ちたいものでゴザイマス
【PHPウォッチ】第23回 セキュリティ上の問題などを修正したPHP 5.1.2,PHP 4.4.2リリース
http://itpro.nikkeibp.co.jp/article/COLUMN/20060117/227354/?ST=itpro_print

もはび?

お仕事でMojaviをつかうことに。
あーれーうごかないよーねーおねーさんちのもはびがー
出勤6分前にやっとハローワールドみたいなのが動作。
おおこういうつくりか!
ってこんなので仕事になるのか!
#なんかどうもSymfonyとかいうのが人気?
 ほっぽらかしてないで勉強再開なり。

XOOPSに関する、よくありそうな幻想?

お仕事ですこし、Xoopsをさわりました。
大規模サイトがかんたんに作れちゃうよみたいな触れ込みで、わりとポピュラーなスクリプトなのです。書籍もいろいろ出ていて、頼りにする人も多いみたい。
えーそんなのいじるのー大変そー
うん。
めちゃくちゃ大変でした。
コアファイルはほぼ手を付けずにすませましたが、モジュールいくつかを新規に作って、従来あるモジュールをいくつかカスタマイズ。
……だったのですけど、手を付ける前に思っていたのとはまったく違うベクトルでの苦労を強いられたのでした。
コード規約とかポリシーとか、ないのかな。
好き放題、とりあえず動きますし的な作り。
それぞれのモジュール(どころか、わりと中心ファイルにいたるまで)書き口がてんでばらばら。あちこちでぐろーばるぐろーばるぐろーばる。循環参照かと思うような多重呼び出しの果てにあるちんまい関数。
誰かがひどい書き方をしたソースの一部を流用して作られた、悪循環の申し子みたいなスクリプトの山。
ナニコレw
お仕事で一緒だった人々は口を揃えてこういいましたとさ。
「お客さんの要望で使うことになったけど、これスクラッチのほうがよっぽどいいね・・・」
よくあるよくある。
ソースの品質をちゃんと分かってる人が、自分で手を入れることを前提で使うものなのね、きっと。
品質はともあれ、あの分量のコードを(作ったのは一人ではないけど)書いたこと自体は偉いと思います。
ただ、個人的には、必要があっても使おうとは思わなくなりました。
奥さん、これをレンタルサーバとかで「かんたんに使えます!」なんて宣伝してる会社がたくさんあるのよ。うわぁ。
公式のBBSみてみれば、結局個々人が「ハック」とか称して手を入れてる。しちじゅうに。
バージョンが上がったら差分とって毎度直すの?
そういうもんだよっていうならそうなんだろうけど。
見かけ上かんたんに始められるだけで、よくわからんで使うにはあまりにも危険だよ。
とかいいつつNucleus半端な状態で使ってたりするあたくしなのでした。
だって暇が。

LDAP

phpでLDAP使う人の情報ってあんまり出てこない。
Java屋さんとかは割と使ってるみたいだ。うにっくすやさんとか。
今お仕事でLDAPの理不尽さ(というか感覚的なわかりにくさ)にいらいらしながらコード書いてるわけですが、これを機にちゃんと勉強しておこうと思います。
知人でPHP触る人は「あー便利そうだけどねーなかなかねー」なんてことを言っている。
うー。
せっかくの機会だしね。。