Hatena::Grouparaistudy

czk-htnの日記

2010-02-28

[] XAMPP Mac OS X 1.7.2a & Xdebug 06:59

Apache + PHP + MySQL をパッケージにしたXAMPPというディストリビューションがあるらしい。OSX標準のApacheにPHP組み込み+MacPorts版MySQLもいいけどYet Anotherなやり方もあるということで。

Xdebugを組み込んでみたいんだけど、Google先生が教えてくれるサイトはどれもバイナリインストールをしていたのが、ソースからコンパイルする方法を調べてみた。

XAMPPのインストール

no titleから

  • XAMPP Mac OS X 1.7.2a
  • Developer package

をダウンロードして、インストールしておく。

Xdebugのコンパイル

$ curl -C - -O http://xdebug.org/files/xdebug-2.0.5.tgz
$ tar xzf tar xzf xdebug-2.0.5.tgz
$ cd xdebug-2.0.5
$ /Applications/XAMPP/xamppfiles/bin/phpize
$ ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config
$ make
$ make test
$ sudo make install

php.ini

Xdebugを組み込むときに zend_extension にするか zend_extension_ts にするかの判断は、

xdebug追加をphp.iniに記述するとき、zend_extension=か zend_extension_ts=なのかを見極めるには。 | PHPの種 ブログ を参考に。XAMPPの場合、

Debug Build => 	no
Thread Safety => disabled

なので zend_extention に組み込む。xdebug.soはフルパスで指定する必要がある。

$ sudo vim /Applications/XAMPP/etc/php.ini
[xdebug]
zend_extension=/Applications/XAMPP/xamppfiles/lib/php/php-5.3.0/extensions/no-debug-non-zts-20090626/xdebug.so
トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100228

2010-02-11

[] Leopard 標準の Apache 2.2.13 + PHP 5.2.11 に Xdebug を組み込む 22:21

参考にしたページ

手順

$ curl -C - -O http://xdebug.org/files/xdebug-2.0.4.tgz
$ tar xzf xdebug-2.0.4.tgz
$ cd xdebug-2.0.4

$ phpize

$ export MACOSX_DEPLOYMENT_TARGET=10.5
$ export CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp"
$ export CCFLAGS="-arch x86_64 -g -Os -pipe" 
$ export CXXFLAGS="-arch x86_64 -g -Os -pipe" 
$ export LDFLAGS="-arch x86_64 -bind_at_load"

$ ./configure --enable-xdebug
$ make

$ sudo mkdir -p /etc/php/ext
$ sudo cp modules/xdebug.so /etc/php/ext/
$ sudo vi /etc/php.ini

_ts付(ThreadSafe) だとうまくロードされない。

[xdebug]
zend_extension="/etc/php/ext/xdebug.so"
; zend_extension_ts="/etc/php/ext/xdebug.so"
xdebug.dump.GET=*
xdebug.dump.POST=*
$ sudo apachectl restart

で phpinfo() ページを参照し、Xdebugが有効になってればOK。

This program makes use of the Zend Scripting Language Engine:

Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans

これだけでも var_dump が見やすく整形されたり、$_GET や $_POST をダンプできたりするけど、ステップ実行できるようになると大変開発がやりやすい。php.ini を再度編集して[xdebug]のセクションに以下を追加して、Apacheをリスタートする。

xdebug.remote_enable  = 1
xdebug.remote_host    = "localhost"
xdebug.remote_port    = 9000
xdebug.remote_handler = "dbgp"

Eclipse (PDT) の設定

  • 環境設定ダイアログで[PHP]を開く
  • [デバッグ] で PHPデバッガーに "XDebug" を選択する
    • 必要なら エンコード設定 も行う

Eclipse(PDT)でテストページを作成し、[実行]-[デバッグ]-[1. PHP Webページ] で

環境設定ダイアログの [一般]-[Webブラウザー] で "外部Webブラウザーを使用" のチェックすれば、デバッグ開始時に外部ブラウザが開いてステップ実行ができる。

IshfaqIshfaq2012/04/22 02:28You put the lime in the ccnoout and drink the article up.

thojudqathojudqa2012/04/22 08:342FCjor <a href="http://vpycxcfwvhiq.com/">vpycxcfwvhiq</a>

ejfermfejfermf2012/04/22 13:16Wi5zPD , [url=http://pugwphkrbavr.com/]pugwphkrbavr[/url], [link=http://vegpbpjhxnfh.com/]vegpbpjhxnfh[/link], http://yybmiiykaftl.com/

bbuejgfbpowbbuejgfbpow2012/04/23 12:23wp89CP <a href="http://czfjeabhrtyl.com/">czfjeabhrtyl</a>

トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100211

2010-01-30

[] Eclipse PDT 2.0 06:55

仕事でPHPコーディングするなら、ステップ実行ができるデバッグ環境がほしいところ。複数人で開発する時も環境をあわせておけばなにかとやりやすい。


PHPデファクトスタンダードな開発環境ってのは詳しくないが、ひとまずJavaEclipseでやってるのでPHPEclipseでやってみようと思う。で、PHPEclipseというとPDT(PHP Development Tools)になるようだ。既存のJava開発用Eclipse (3.5 Galileo)にプラグインをいれてもいいけど、いろいろとプラグインを組み合わせてEclipseの動作が不安定になった経験があるので、開発環境ごとにEclipseは専用のものを用意することにする。

Eclipse Downloads から "Eclipse for PHP Developers 2.1-SR1 (Mac Cocoa版 137MB)"をダウンロードする。

デスクトップに展開してPleaiadesを適用する。

$ cd Desktop/
$ tar xzf ~/Downloads/eclipse-php-galileo-SR1-macosx-cocoa.tar.gz
$ cp -Rp pleiades/features eclipse_php/
$ cp -Rp pleiades/plugins eclipse_php/
$ cat >> ./eclipse_php/Eclipse.app/Contents/MacOS/eclipse.ini
-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
$ ./eclipse_php/eclipse -clean

すごく遅いけどEclipseが起動するまでジッと我慢し、Command-Qで終了する
次回からは Eclipse.app から実行でOK
トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100130

2010-01-18

[][] Ethnaのチュートリアルを試してみる 2 22:50

ethna コマンドを使って action, view, template を作成できる。このあたりは sledge や rails っぽい。

% ethna add-action login
file generated [/Users/xxxx/Documents/lang/php/20100118_ethna/skel/skel.action.php -> /Users/xxxx/Documents/lang/php/20100118_ethna/app/action/Login.php]
action script(s) successfully created [/Users/xxxx/Documents/lang/php/20100118_ethna/app/action/Login.php]

% ethna add-view login
file generated [/Users/xxxx/Documents/lang/php/20100118_ethna/skel/skel.view.php -> /Users/xxxx/Documents/lang/php/20100118_ethna/app/view/Login.php]
view script(s) successfully created [/Users/xxxx/Documents/lang/php/20100118_ethna/app/view/Login.php]

% ethna add-view -t login
file [/Users/xxxx/Documents/lang/php/20100118_ethna/app/view/Login.php] already exists -> skip
file generated [/Users/xxxx/Documents/lang/php/20100118_ethna/skel/skel.template.tpl -> /Users/xxxx/Documents/lang/php/20100118_ethna/template/ja_JP/login.tpl]
template file(s) successfully created [/Users/xxxx/Documents/lang/php/20100118_ethna/template/ja_JP/login.tpl]

% ethna add-template login
file [/Users/xxxx/Documents/lang/php/20100118_ethna/template/ja_JP/login.tpl] already exists -> skip

% ethna add-action login_do
file generated [/Users/xxxx/Documents/lang/php/20100118_ethna/skel/skel.action.php -> /Users/xxxx/Documents/lang/php/20100118_ethna/app/action/Login/Do.php]
action script(s) successfully created [/Users/xxxx/Documents/lang/php/20100118_ethna/app/action/Login/Do.php]

リクエストからレスポンスまでの流れは、Controller → ActionForm → Action → View → (Smarty)と、Strutsの経験があればすんなり理解できる作りになっている。チュートリアルにも書いてあるように Struts を意識した作りになっているようだ。ただ、昨今のフレームワークの良いところはちゃんと反映されていて、

  • 規約に基づいて Action - ActionForm - View の関連づけを推測してくれる (struts-config.xmlにあたる設定が不要)
  • バリデーションもPHPコードで設定できる(validation.xmlにあたる設定が不要)
  • リコンパイルなしに画面に反映される(PHPだから当たり前なんだけど)

チュートリアルを一通り試したら開発マニュアルを参照して、機能を詳しく調べていく。


[][] Ethnaのチュートリアルを試してみる 1 22:50

% export PATH=~/Documents/lib/pear/bin:$PATH
% ethna
usage: ethna [option] [command] [args...]

available options are as follows:

  -v, --version    show version and exit

available commands are as follows:

  add-action
  add-action-test
  add-app-manager
  add-app-object
  add-entry-point
  add-project
  add-template
  add-test
  add-view  add-view-test
  channel-update
  clear-cache
  help
  i18n
  info-plugin
  install-plugin
  list-plugin
  make-plugin-package
  pear-local
  uninstall-plugin
  upgrade-plugin
% ethna add-project
error occured w/ command [add-project]
  -> Application id isn't set.

usage:
ethna add-project [-b|--basedir=dir] [-s|--skeldir] [-l|--locale] [-e|--encoding] [Application id]

add-project の引数が増えているけど、ここはデフォルトで。

~/Documents/lang/php に sample を作成する。

% ethna add-project -b ~/Documents/lang/php/20100118_ethna sample   

...

project skelton for [sample] is successfully generated at [/Users/xxxx/Documents/lang/php/20100118_ethna]
% cd ~/Sites/
% mkdir sample
% cd sample/
% ln -s ~/Documents/lang/php/20100118_ethna/www/index.php .
% ln -s ~/Documents/lang/php/20100118_ethna/www/css

~/Sites から シンボリックを辿ることを許可しておく必要がある。

% sudo vi /etc/apache2/users/xxxx.conf
<Directory "/Users/xxxx/Sites/">
    Options Indexes MultiViews
+   AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

% sudo /usr/sbin/apachectl graceful
% cat > ~/Sites/sample/.htaccess
+   Options +FollowSymlinks
トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100118

2010-01-17

[][] OSX Leopard で Ethna-2.5.0 07:09

PHPのバージョンは5.2.11。

PEARのインストール

インストール先は ~/Documents/lib/pear にした。/usr/lib に入れるのに抵抗があったので。

% curl http://pear.php.net/go-pear | php
% export PATH=~/Documents/lib/pear/bin;$PATH

ApacheでPHP5を有効にする

/etc に php.ini を作成する。include_path にPEARのパスを追加する。

% sudo cp /etc/php.ini.default /etc/php.ini
% sudo vi /etc/php.ini
- include_path = ".:/php/includes:"
+ include_path = ".:/php/includes:/Users/xxx/Documents/lib/pear/PEAR"

Apacheの設定ファイルを編集してPHP5を有効にする。

% sudo vi /etc/apache2/httpd.conf
- #LoadModule php5_module        libexec/apache2/libphp5.so
+ LoadModule php5_module        libexec/apache2/libphp5.so
% sudo /usr/sbin/apachectl graceful
% tail /var/log/apache2/error_log
[Mon Jan 18 00:11:43 2010] [notice] Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.7l DAV/2 PHP/5.2.11 SVN/1.4.4 configured -- resuming normal operations

Ethnaをインストールする

アーカイブはいったん手元にダウンロードしてからインストールしてみた。職場だとプロキシのためネットからの直接インストールができなかったりするので。

% pear channel-discover pear.ethna.jp
Channel "pear.ethna.jp" is already initialized
% pear install ~/Downloads/Ethna-2.5.0.tgz
WARNING: "pear/DB" is deprecated in favor of "pear/MDB2"
Did not download optional dependencies: pear/DB, ethna/Smarty, ethna/simpletest, use --alldeps to download automatically
ethna/Ethna can optionally use package "pear/DB"
ethna/Ethna can optionally use package "ethna/Smarty"
ethna/Ethna can optionally use package "ethna/simpletest"install ok: channel://pear.ethna.jp/Ethna-2.5.0

Smartyをインストールする

Ethnaをアーカイブからインストールした場合はSmartyは入らない。

  1. PHP Template Engine | Smartyからファイルをダウンロード(2.6.26)。
  2. 展開して libs ディレクトリを PEAR の下にコピーする。
% tar xzf ~/Downloads/Smarty-2.6.26.tar.gz
% cd Smarty-2.6.26/  
% cp -Rp libs/ ~/Documents/lib/pear/PEAR/Smarty          

[] PHP5のアクセサって分かりづらくない? 07:09

アクセサ(__get、__set)。PerlでいうAUTOLOAD、Rubyでいうmethod_missing。

#!/usr/bin/php
<?php
class Main {
    function __set($name, $value) {
        echo "__set($name, $value)\n";
        $this->$name = $value;
    }
}

$obj = new Main;
$obj->a = "a1";
var_dump($obj->a);
$obj->a = "a2";
var_dump($obj->a);
$obj->b = "b1";
var_dump($obj->a);
?>

↓実行結果。"a2"を代入した時には__setは呼ばれていない。なぜなら"a1"代入後にプロパティが存在することになるため($this->$name)。

__set(a, a1)
string(2) "a1"
string(2) "a2"
__set(b, b1)
string(2) "a2"

[] PHPについて 07:10

Leopardに入ってるPHPバージョン

仕事で数年ぶりにPHPを使うことになりそうだ。PHPは2.0の頃から使い始めてPHP3が全盛期、PHP4を2年ほど仕事で使った後ほとんど触っていない。PHP5がリリースされているので新ためて復習しておく。

% php --version                                     ~/Desktop
PHP 5.2.11 (cli) (built: Sep 28 2009 16:48:57) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

5.2系は 5.2.12 が最新バージョン。

PHP4 と PHP5

トピックス(ベータリリース目前!? PHP5の新機能(1/2)− @IT

  • オブジェクトは「参照渡し」になる
  • クラスのプロパティおよびメソッドにアクセス制限を導入(public, private, protected)
  • abstractの導入
  • interfaceの導入
  • final
  • 名前空間(namespaces)(>=5.3)
  • クラス内定数(const)
  • 統一コンストラクタ、デストラクタ(__construct、__destruct)
  • アクセサ(__set、__get)
  • 例外処理(try, throw, catch) ※finallyがない!!

PHP5はJavaに似てきたね。ところで例外処理にfinallyがなくてどうやってリソース解放させるんだろう?

公式マニュアル(PHP: PHP 4 から PHP 5.0.x への移行 - Manual )を読む限り、普段プログラムを書いていて文法的なところでバージョンの違いを意識しなければならないケースはなさそうだ。PHP4→5だけでなく、5.0→5.1→5.2→5.3それぞれの互換性も確認すべき。

必読→ PHP: PHP 5.3.x で推奨されない機能 - Manual


PHP5を利用するときには、E_STRICTをphp.iniに指定すべき(PHP: エラー報告 - Manual )。だけど、PEARを使っていると(PHP4との互角性確保のため)大量のエラーメッセージが出力されてしまう。鬱陶しいなら E_ALL だけにする。

こっちも気になる。いまだにOracle9iが現役なので。

Oracle 拡張モジュール を Windows で使用するには、最低でも Oracle のバージョン 10 が必要となりました。

http://www.php.net/manual/ja/migration52.incompatible.php

PEAR

PEARは「ペア」。PHPのライブラリ群。PerlでいうCPAN。なんかやりたいことがあれば、既存のライブラリがないか探してみた方が良い。

PEAR Packages

Pyrus

Pyrusは PHP5.3+ で動くPEARのインストーラ。Pyrus: Improvements from the PEAR Installerによると、既存のPEARインストーラよりも

  • 使うのが簡単 ... pyrus.phar 1ファイルだけで構成されている
  • セキュア ... PEARにある既知のセキュリティ脆弱性が見直されている
  • 小さい ... 5.3+ではXMLやアーカイブ機能がビルトインになったため
  • 速い ... 5.3だから
  • 堅牢 ... レジストリ情報をsqlite3使うので
  • フレキシブル ... 評価用パッケージのインストール先を変更でき、以前のバージョンへの切り戻しも簡単
  • テストされている ... Unitテスト と カバレッジテストをバッチリやってる

5.3+が採用できれば検討。

Webフレームワーク

JavaでいうStrutsのような、まぁ古臭くとも小さくて分かりやすいデファクトスタンダード的フレームワークがあればいいんだが。

なるべくMVCを分けたいけど、数ページで参照オンリーならHTMLファイルと一緒に埋め込んだほうがわかりやすいかも。

Nothing found for Slide 1011

  • ZendFramework() ... これが公式?
  • Ethna(2.3 or 2.5) ... GREEのやつ
  • CakePHP ... Rails
  • Symfony ... フルスタック

Strutsに作りが似てるって点でEthnaがいいかな。


DBとの接続

PEAR::DBが基本らしい。でも、これから使うなら PEAR::MDB2 にしろって公式にあるね(Error 404)。PEAR::DB も PEAR::MDB2 もJavaでいうJDBCみたいなものか。

PHP5.1以降なら PDO(PHP Data Object)って選択肢もあるみたいだけど、そうなるとPEAR::MDB2を使うメリットは? 他のPEARライブラリとの連携という意味でMDB2が良いらしいけど、速度の点ではPDOが良いようだ(403 Forbidden)。Preparedステートメントは必須。

既存テーブルがあるのでO/Rマッパーは不要。SQL直書き最強。Javaだと commons-dbutils がお気に入り(プロパティファイルからのSQLロード/row → bean変換)なので、それっぽいのがあれば。


追記

[Perl][PHP][SQL]: quoteメソッドの数値データ対応を検証する - 徳丸浩の日記(2009-10-19) でいうとquoteメソッドの数値データの取り扱いはMDB2が合格。

テスト

phpunit

xdebug

トラックバック - http://araistudy.g.hatena.ne.jp/czk-htn/20100117