‘PHP’ カテゴリーのアーカイブ

FuelPHPの解説書

2012年8月29日 水曜日

CakePHPを業務で使ってみたことがあるのですが、資料豊富で実装方法で困ることがほとんどなく便利でした。ただ、ちょっと業務の規模に比べると重いというか、やりたいことよりもめんどくささが上回ると感じたので、もう少し軽くて扱いやすいものを探してみました。

最初はCodeIgniterがいいかなと思って使い方を調べていたのですが、ライセンス問題でゴタゴタしてきたので見限りました。

その後、KohanaとFuelPHPのどちらかで迷ったのですが、なんとなくFuelPHPの方が扱いがよさそうなのでGoogleで資料をあれこれ探しつつ、公式サイトをみつつ学習を進めました。学習の初期段階では、情報がまとまった書籍があるといいのですが、現状では一冊しかなく、本の内容もリファレンスっぽい感じがして、ボクには合いませんでした。

結局、ネットでの資料を参考にしていたのですが、つい最近、はじめてのフレームワークとしてのFuelPHPという電子書籍を知ったので思い切って買ってみたのですが、これがとてもすばらしい内容でした。

FuelPHPでは初期設定ファイル(fuel/app/config/)を正しく記述するところからがスタートなのですが、その辺の説明が詳しく書かれています。また、XAMPPとEclipseによる開発環境の構築やテストケースの必要性や記述方法などにも触れられていて、とても良い本になっています。ページはiPadでみると500ページを越えるのですが、ほどよい濃さの内容ですし、電子書籍ですから本の厚さはありませんね。サクサク読み進められるのでオススメです。本の内容はフレームワークの使い方から単純なメッセージ送信のフォームページの制作までなのですが、それ以上の事はFuelPHPとは直接関係のないデータベースやPHPによるWebページの制作になり、この本の範囲外ですから、ちょうどいいと思います。

ネットをうろうろして時間をかけてFuelPHPの情報を探す時間を考えたら、2480円は満足の価格です。

PHP統合開発環境PDT2入門 ZendDebuggerのテストが起動しないよ編

2009年6月4日 木曜日

本の7章 ZendDebuggerのセットアップに従って設定すると、The file ‘http://localhost/pdt/dummy.php’ which is required by the Zend Debugger, could not be found. Please verify that…みたいなエラーダイアログが出てしまいました。これは、P131に書かれているdummy.phpのコピー先は、c:\dev\workspaceではなく、C:\dev\xampp\htdocsではないかなと。でもこれ、エラーが出ても気にしなくていいみたいです。

また、dummy.phpを正しいフォルダにコピーして、続いて、Test Debuggerボタンを押してZendDebuggerの動作確認を使用とすると、私のPC環境ではApacheが落ちました。が、それもあまり気にしなくていい?みたいです。

どうも、localhostよりも先に、このPCに割り当てられたIPアドレスでZendDebuggerに接続しようとしているようなのですが、php.iniのzend_debugger.allow_hostsで許可しているIPアドレスは、127.0.0.1だけなので、接続に失敗して、その際になぜかApacheを落としてしまうようで。こうなったら、一度、XAMPPのApacheを停止→開始して、ついでにEclipseも再起動した方がいいようです。ちょっと不安定だね。

PHP統合開発環境 PDT2入門

2009年6月2日 火曜日


PHP統合開発環境 PDT2入門[AA] という、初心者向けに丁寧に書かれている本を買いました。ページをめくりつつ実際にWindows上で環境構築をしてみたのですが、一カ所、はまったところがあったのでメモです。

“2-4 Subversionのセットアップ”という章に従ってApacheにSubversionのモジュールを組み込むように設定してからApacheを再起動しようとしたのですが、Apacheが起動しませんでした。その原因なのですが、”2-1 XAMPPのセットアップ”の章では、XAMPPのインストーラ版をダウンロードするように書かれているのですけど、これにはSubverionが入っていないようです。
XAMPのダウンロードページに開発パッケージというのがありますから、これを展開して、先にインストールしてあるXAMPPのフォルダ(この本に従うならc:\dev\xampp)に上書きすると、Subversionモジュールが組み込まれたApacheが起動するようです。

PHPのrequire_once

2009年4月28日 火曜日

PHPのrequire_once()は、このrequire_once文が書かれた箇所にファイルを読み込みます。ただし、1度だけなので、

<?php
require_once("a.php");
require_once("a.php");
?>

と記述した場合、2度目のrequire_once()ではa.phpは読み込まれません。例えば、a.phpではz.phpを読み込んでいて、b.phpでもz.phpを読み込んでいる場合、とあるスクリプトでa.phpとb.phpを読み込むと、z.phpを2度、間接的に読み込んでしまうような事態を防ぐ事ができます。
逆に何度でも読み込むのがrequire()で、これはC言語でいうところのincludeみたいなものです。

大抵の場合、同じファイルを2度読み込む理由はないからのだからと、何でもかんでもrequire_once()にしておけば安心だ、というもんでもありません。いや、自戒の意を込めて、以下は、つまらないバグに悩まされてしまった記録です。

例えば、
mysqlへアクセスするためのIDとパスワードの保存場所という記事。データベースの設定を外部ファイルにして、それをrequire_once()で読み込むという処理です。ここで、このDBへの接続部分を関数化してみます。

function connectDB()
{
    require_once('cfg.php');
    $dbc = mysql_connect($db['host'], $db['user'], $db['pass']);
    mysql_select_db($db['dbname']);
    return $dbc;
}

この関数を使ってDBに接続して、戻り値を使ってSQLを実行して、mysql_close()でDBへの接続を解除したとします。ここで処理が終わせずに、続けて再びSQLを実行するためにconnectDB()を呼び出すと・・・つまり、こんなソースです。

$id = connectDB();
mysql_query(...);
mysql_close($id);
$id = connectDB();
mysql_query(...);
mysql_close($id);

レコードの更新を実行したあと、画面を更新するためにデータを取り直すというような処理ですね。これがなぜ、動かないのかというと、2度目のconnectDB()では require_once()が実行されないのです。2度目の読み込みになりますから。なので、$db変数は定義されずにDBへの接続に失敗するわけです。

PHP的に考えたら当たり前なのですが、C言語のincludeようにプリプロセッサが外部スクリプトを展開して、その外部スクリプトはその箇所に恒久的に存在すると勘違いしてしまったのですね。つまり、関数の呼び出し毎にrequire_once()が実行されていると思っていなかったわけです。

そんなの、mysql_connect()した段階でエラーチェックしてりゃ気がつくだろ、と思うのですが、mysql_connect()のパラメータが指定されない場合、デフォ ルト値 server = ‘localhost:3306′, username = サーバプロセスの所有ユーザ名 password = 空のパスワードで接続するらしく、
Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
という警告メッセージはですのですが、戻り値は得られてしまうのです。もっともその先のmysql_select_db()の段階でエラーになって、こちらは検出できていたので、あれあれなんかおかしい、と気がついたわけです。

ちなみにPHPではmysql_close()を呼び出さなくてもいいそうです、と、ドキュメントに書いてあります。が、ほったらかしは気持ち悪いよね。