バカンス駆動開発

この前バカンスって言ったら「古っ」って言われました

でぃすぱっちゃうぞ〜編 - CakePHPをもくじとしてPHPを学ぶシリーズ02

個人的にはもう前回で連載終了かと思いましたが、なんとか第2回も公開できるようです。

lib/Cake/bootstrap.phpを見る

そもそも「bootstrap」て なんでしょうか?

ブートとは 〔 起動 〕 〔 ブートストラップ 〕 - 意味/解説/説明/定義 : IT用語辞典

コンピュータを起動すること。また、人間がコンピュータに電源を投入してから、操作可能な状態になるまでに自動的に行われる一連の処理。

URLにアクセスしてからアプリケーションロジックが走り出すまで、の

え?なんですか?

(中断)

すいません、お待たせしました。 いまプロデューサーから指示がありまして、読者の方から大変ご好評いただいたこのシリーズの続きはコチラで行うことになりました。

今後ともよろしくお願いいたします。

Dispatcherまで辿りつけない編 - CakePHPをもくじとしてPHPを学ぶシリーズ01

パーフェクトPHP フレームワークを作ってみて、次にどうしようか考えていました。

結論としては、オープンソースフレームワークもくじとしてPHPを学ぶ事にしました。

理由としては、Webアプリケーションを作るのに必要な機能はフルスタックなフレームワークにつまっているので、手探りで一つ一つ調べながら自己流のうんこコードを産むより、オープンソースのコードを吸収したほうが綺麗にそしてすばやく学べる、というところです。

題材はタイトルにもある通りCakePHPを使います。有名ですし、解説記事もたくさんあるので。なんだかんだやり玉にあげられているのでみんなCakePHPのことが大好きなんだと思います。*1

CakePHPをもくじとしてPHPを学ぶシリーズ

なので、このシリーズでやることはCakePHPを使ってアプリケーションを作成することではなく、ひたすらCakePHPの処理を追っかけるということになります。ようござんすか?ようござんすね?

続きを読む

PHPのサブクラスでコンストラクタを書くときにはまった話

PHPでサブクラス内でコンストラクタを書くときの注意点はマニュアルに書いてあります。まずはそちらを引用。

PHP: コンストラクタとデストラクタ - Manual

注意: 子クラスがコンストラクタを有している場合、親クラスのコンストラクタが 暗黙の内にコールされることはありません。 親クラスのコンストラクタを実行するには、子クラスのコンストラクタの 中で parent::__construct() をコールすることが 必要です。 子クラスでコンストラクタを定義していない場合は、親クラスのコンストラクタを継承します (ただし、private 宣言されている場合は除く)。 これは、通常のクラスメソッドと同様です。

<?php
class BaseClass {
   function __construct() {
       print "In BaseClass constructor\n";
   }
}

class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();
       print "In SubClass constructor\n";
   }
}

はまったコード

<?php
class BaseClass {
   function __construct($value) {  //インスタンス時に引数を取る
       print "In BaseClass constructor\n";
   }
}

class SubClass extends BaseClass {
   function __construct() {
      //空っぽ
   }
}

PHPマニュアルと変わった所はコメント部分の箇所、親クラスのコンストラクタが引数を取るところと、子クラスのコンストラクタが空っぽというところ。

なんで子クラスのコンストラクタが空っぽなのかというと、なんか入れようとして放置してただけなんですが、そのせいでえらい目に会いました。ありがとうございました。

空にしてるから何も影響しないと思ってました。そう思うことは自然の摂理だと思います。でもわざわざ(空とはいえ)コンストラクタを定義してしまっているので親クラスのコンストラクタがオーバーライドされてしまったという話でした。

コンストラクタもオーバーライドされるとは盲点だったぜ。

web開発のためのapacheやコンテンツディレクトリのパーミッション関連まとめ

apacheを安全に動かすために

// apacheの設定ファイル内にapacheの実行ユーザーを
// 指定している項目があるのでそれを確認
 
# vi /etc/httpd/conf/httpd.conf

// apacheの実行ユーザーをapache:apacheに指定
User apache
Group apache

// httpdを再起動
# /etc/rc.d/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

// コンテンツディレクトリの所有者と所有グループをapacheにする
// chownの-Rオプションは指定ディレクトリ以下の全てのディレクトリとファイルを含める
# chown -R apache:apache /home/httpd/html

// 今後コンテンツディレクトリ以下に作成されるファイルの所有グループをapacheに固定する
// 方法としてはSGIDを仕様する。SGIDについては参考の3を見てね。
# chmod -R 2770 /home/httpd/html/

// コンテンツディレクトリ以下のディレクトリのパーミッションを770、
// ファイルのパーミッションを660にしてその他のユーザーがアクセス出来ないようにする
# find /home/httpd/html -type d -exec chmod 770 {} \;
# find /home/httpd/html -type f -exec chmod 660 {} \;

// 最後にweb開発用ユーザー(webdev)をapacheグループに入れる
// 以後、wevdevユーザーを使って開発を行う
# usermod -g apache webdev

ファイルをアップロードするスクリプトを使用する場合、 ファイルの保存場所の所有者をapache、所有グループをapacheにする。

# chown apache:apache /var/uploads
# chmod 755 /var/uploads

httpdの実行ユーザーを独自に作成して(上記ではapache)、web公開のために必要なディレクトリやファイル以外へのapacheの権限をきちんと制限することで、悪意のスクリプトが放り込まれてもwebサーバーの権限を絞っているので被害を抑えれる可能性が増します。

参考

  1. httpd.conf の設定
  2. Apacheのセキュリティ
  3. SGID(Set Group ID) - 特殊なアクセス権

MySQL脱初心者に向けてのまとめ

パーフェクトPHPフレームワークを読解し終わりました。 途中にSQL文で「JOIN」とかテーブル作成時のインデックスとか出て来てわからなかったので、MySQLについてまとめました。

まぁまずは初心者へ

MySQL入門 (全19回) - プログラミングならドットインストール

おなじみのドットインストールです。データベースやテーブルの生成削除、データの挿入、削除等基本的なことを学習。 見てるだけでいい。それがすばらしい。

脱初心者になるために

SELECTやWHEREやAND/ORはわかった。次はどうすればいいの?という人(というか自分)へ。

インデックスって何?必要?

MySQL Index勉強会外部公開用

インデックスについても詳しいけれど、MySQLってこんなシステムなんだよ、というのがとても良くわかります。すばらしい。

MySQLのインデックス - Archiva

漢(オトコ)のコンピュータ道: オトコのソートテクニック2008

さー自分で複合インデックスを作ってみよう!という時はこの二つの記事がとても参考になります。すばらしいですね。

JOIN LEFTって?

SQL講座 LEFT JOIN とRIGHT JOIN(表の外部結合)

このサイトは他にもSQLの扱い方が書かれています。

Tips的な

MySQL :: MySQL 5.1 リファレンスマニュアル

公式リファレンス。

MySQLノウハウ

チューニングTips。この通りにする、というよりこれを目次に一つ一つ調べたらいいと思う。

SQLアンチパターン - ジェイウォーク

SQLアンチパターン - ナイーブツリー

アンチパターンの提示は初心者にはありがたいです。

他には?

あとはトランザクション、デットロックあたりを学習すればとりあえず脱初心者でしょうか。

おまけ

信じられないDB文化「Join禁止」に「固定長DB」、、でも、合うんです。大規模コンシューマ向けサービスのRDB設計 - 山本大@クロノスの日記

世の中にはJOIN禁止文化なんてのもあるようです。要はちゃんと考えてやりましょうってことですね。