#01 仮想化ソフトの選定 - WinでPHPの開発環境を揃える

僕はWindowsユーザーなので、WindowsでPHPの開発をやってきた。
EthnaとかCakePHPとか、他のフレームワークもそうなんだろうけど、最近のフレームワークはコンソールからコマンド打って開発することが増えてきた。
っつか、その方が便利。

んで、今まではテキストエディタで書いてLinux系のサーバにアップしていたんだけど、これじゃあコマンド使えない。
Windowsにサーバ環境インストールして・・・ってやれば、コマンドプロント立ち上げてコマンド叩いてやることも出来るんだろうけど、なんだかそれって気持ち悪い。
最終的にはLinuxのサーバにアップするんだし。

で、最近までXAMPPをインストールしてごにょごにょやってたんだけど、ふとググってみたらVMwareって仮想化ソフトいれてそこにLinuxいれちゃって、それ上で開発すれば良いじゃんってエントリーがちらほら。

#00 VMWare×CentOS5 Windowsでカンタン開発環境 - GRANADA Hatena @ sotarok
ウノウラボ Unoh Labs: VMwareとCentOSでウェブ開発の環境をさっさと整える手順書(前編)

ここで、二つの選択肢が。
VMWare PlayerとVMWare Server
この違いが分からんっつうことで、調べた。
hktr.jp: VMWare Tips まとめ。 アーカイブ

要は、Serverの方は複数同時にOS動かせたりしちゃうらしい。
実際に、小規模のサーバ運用なら出来るぐらいみたいなんだけど、まずはPlayerの方で良いかなと思ってまった。
ん~悩む。
会社のPCはデュアルコアじゃなかった気がするし、あんまり負荷をかけたくないし。
両方入れて考えようかな。
でも、二つを共存させることは出来ないらしい。

ということで、今日はここまで。

Ethnaでビット演算子って始めて知った

結構アクセスが増えてくると、セッションが上手く繋がらないことが多くなってくる。
で、Ethnaの場合だと、Ethna_Sessionクラスの_validateRemoteAddr関数が弾いているっぽい。

コメント欄で
セッションに保存されたIPアドレスとアクセス元のIPアドレスが同一ネットワーク範囲かどうかを判別する(16bit mask)
って書いてあったんだけど、よう分からんかった。

■16bitマスクについて
多分
xxx.xxx.yyy.yyy
で、xの部分(16bit分)が変わったらいかんよって事だ。
逆にyの部分(16bit分)が変わっても、同一ネットワーク範囲とするってことだ。

まあ、会社とかになると24bitのサブネットマスクとか当たり前になるので、これってセキュリティ上厳しいのか厳しくないのかようわからんけど、まあ、何でも自由ってのよりは全然良いわな。
それは間違いない。

で、意味は分かったんだけど(多分)、今度はソースが解読できない。

function _validateRemoteAddr($src_ip, $dst_ip)
{
    $src = ip2long($src_ip);
    $dst = ip2long($dst_ip);

    if (($src & 0xffff0000) == ($dst & 0xffff0000)) {
        return true;
    } else {
        $this->logger->log(LOG_NOTICE, "session IP validation failed [%s] - [%s]",
                           $src_ip, $dst_ip);
        return false;
    }
}

ip2long()とif文中にある"&"演算子。
ip2long関数は、まあすぐ調べることが出来たんだけど、"&"演算子がなかなか出てこなかった。

で、見つけた。
【 ほでなすPHP 】 PHPの基本 -> 演算子

結局「ビット演算子」ってものらしい。
ビットっていうぐらいだから、2進数でごにょごにょやるらしい。

0xffff0000の見た方がわからなかったんだけど、多分最初の0xってのは、正負の記号と見た!
んで、後ろのffff0000が32bitを表しているはず!

で、ffff0000を2進数で直すと
1111 1111 1111 1111 0000 0000 0000 0000
となる。

IPアドレスは8bit×4で32bitだから、上のにあわせると
11111111.11111111.00000000.00000000
↓
255.255.0.0
って感じになる。

んーこれって数学?

つまりのところ、このif分は、fの部分の16bit分がマスク扱いで、そこが一緒かどうかみてるってことね。
それが一緒なら、同一ネットワークですよと。

んーこうやってマスクのチェックをしていたんだなと納得。
凄いなあ、藤本さんは!
年下とは思えない・・・(涙)

さすがPHPのコミッターだなーって思ったけど、学校行って勉強した人とかにとっては普通かな?
独学の僕には新鮮だったわ。

つか、こんなの無理だわー。

PHPでフォームの未入力チェックをする時

フォーム値を検証する時にempty関数を使うと"0"だとfalseにしてまう。
"0"も拾っていきたい場合は、strlen関数を使う。

$hoge = 0;
echo strlen($hoge);
// 1を表示

これで大丈夫かなと思ったけど、Ethnaの未入力チェックでもこれが使われていたので、ちょっと安心。

PHPは駄目な言語らしい

PHPがいかに駄目な言語か、という話。を読んでちょっと衝撃。
rubyのまつもとさんってこういう人なんだなあ。
なんだか人格的には好きになれそうに無い感じだな。
ちょっと怖いわ。

phpをやっている人は他の言語をやっていない人が多い
みたいな指摘があって、確かに僕はactionscriptもそんなに頑張ってないし、javascriptだってコピペばっかだし、cobolはガッツリやったけど古いしって感じだし、なんか該当するなって思った。
俺のソースもセキュリティホールだらけなのかしら。

けど、確かにphpは曖昧な処理が多いのかもしれないな。
「javaはめんどくさいけどカチって動く感じ」って誰かが書いていたけど、確かにcobolとかだと変数とかの型の定義をソースの冒頭でだーって書いていたなあと懐かしく思い出した。
Cはメモリの定義までするんだっけ?

ってことで、javaとかcとかをちょっと勉強してみたいかもと考え中。
rubyでも良いのかもしれんけどなあと考えていたら、図書館で借りてきていた本が確かあった。
図解でわかる Javaのすべて―ネット時代のプログラミング
オブジェクト指向とかの部分を読もうと思って借りてきたんだけど、簡単なアプリでも作ろうかしら。

こんなことを週末は考えられるんだけど、平日は仕事に忙殺されるんだよな。

他人のソースは読まんといかんな

公式マニュアルより。

continueは、ループ構造において現在の繰り返しループ の残りの処理をスキップし、条件式を評価した後に 次の繰り返しの最初から実行を続けるために使用されます、

もうPHP触り始めて3年以上経つけどはじめて知った・・・。
以前使っていたCOBOLだと、確か何もしない(飾り)ものだったと思ったけど・・・。
全然違うのでびっくり。

Ethnaのソース解析しててわかった。
ん~、他人のソースは読まんといかんなあ。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 6 of 9

アーカイブ

2012

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12

2011

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com