Home > Tags > PHP

PHP

Mac 10.6.2 への apache 2.2.9 と php 5.3.1 のインストール

mac には /usr/local ディレクトリがないのでまず作成する。

sudo mkdir /usr/local
sudo mkdir /usr/local/src
sudo mkdir /usr/local/apache
sudo mkdir /usr/local/php
sudo chmod 777 /usr/local/src

次に apache のインストール。

cd /usr/local/src
wget http://archive.apache.org/dist/httpd/httpd-2.2.9.tar.gz
tar xzvf httpd-2.2.9.tar.gz
cd xzvf httpd-2.2.9
./configure --prefix=/usr/local/apache/httpd-2.2.9
make
sudo make install

cd /usr/local/apache/
sudo ln -s /usr/local/apache/httpd-2.2.9 current

gd を利用するのに libpng がいるので port でインストール。

sudo port install libpng

php の make でエラーになったので iconv.c を編集する

http://d.hatena.ne.jp/hetima/20071028/1193576377

vi /usr/local/src/php-5.3.1/ext/iconv/iconv.c
iconv_open を libiconv_open に、
iconv_close を libiconv_close に置換する。

php のインストール

cd /usr/local/src
wget http://jp.php.net/get/php-5.3.1.tar.gz/from/this/mirror
tar xzvf php-5.3.1.tar.gz
cd xzvf php-5.3.1
./configure --prefix=/usr/local/php/php-5.3.1 --with-apxs2=/usr/local/apache/current/bin/apxs --with-pdo-mysql=/opt/local/lib/mysql5 --with-gd --with-zlib --with-xsl --enable-mbstring --with-png-dir=/usr/X11
make

で、ここで行き詰まった。
make で下記エラーが発生して、コンパイルできない。

Undefined symbols:
  "_iconv_close", referenced from:
      _do_convert in gdkanji.o
  "_iconv", referenced from:
      _do_convert in gdkanji.o
  "_iconv_open", referenced from:
      _do_convert in gdkanji.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [libs/libphp5.bundle] Error 1

iconv が駄目そうなので --without-iconv オプションを付ける。ついでに freetype も入れる。

http://bugs.php.net/bug.php?id=49267

./configure --prefix=/usr/local/php/php-5.3.1 --with-apxs2=/usr/local/apache/current/bin/apxs --with-pdo-mysql=/opt/local/lib/mysql5 --with-gd --with-zlib --with-xsl --enable-mbstring --with-png-dir=/usr/X11 --without-iconv --with-freetype-dir=/usr/X11

これでなんとかコンパイルできた。
試してないけど以下のような記事もあった。

http://d.hatena.ne.jp/brtRiver/20090911/1252703372

あと /usr/local/php/current/bin/php がないのでシンボリックリンクを張って作る

sudo ln -s php.dSYM php

oracle+phpでもっとも参考にするべき資料

やっぱり基本はオラクル本家のサイトでしょう。

PHP Developer CenterとかPHPとオラクルはオラクルで何か調べたりダウンロードしたりする時の基本中の基本 OTN 内のコンテンツ。

以下の PDF もいい。
「The Underground PHP and Oracle Manual Release 1.5」(PDF)

↓の本はオラクルで今まで一番よく読んだ本。

SEのためのOracleチューニングハンドブック
後藤 孝憲 名和 満 五嶋 和彦 井原 秀樹
ソフトバンククリエイティブ
売り上げランキング: 145781
おすすめ度の平均: 5.0

5 通勤電車で読めるOracle本
5 チューニングに悩んでいる方におすすめです
5 必読書です
5 DBエンジニア必見!
5 おすすめです。

sony vaio type g for php dev

新しいマシンがきたので、PHP を開発するために必要な設定を順にやっていきます。やることがけっこうあって、だいたい丸一日ぐらいつぶれます。前のマシンでは coLinux を使っていたのを今回は vmware を利用しようと思います。あと php でデバッグできる環境を作りたいと思います。(自宅の mac では実践済み。)

  1. フォルダオプション、画面、ツールバー、スタートオプションの変更
    1. いつも通り好きになおす
  2. Apps ディレクトリ作成
    1. 自分でインストールするアプリケーションを保存するディレクトリを作成する
  3. xkeymacs
    1. http://www.cam.hi-ho.ne.jp/oishi/ から xkeymacs347.zip をダウンロード
    2. Ctrl キーと Caps Lock キーを入れ替え
    3. 設定をインポート
  4. firefox
    1. foxmarks
    2. Tab Mix Plus 0.3.7.3
    3. FireGestures
    4. Greasemonkey
      1. AutoPagerize
    5. Firebug
      1. YSlow
    6. Live HTTP headers
    7. SwitchProxy Tool 1.4.1
    8. (Html Validator)
    9. (Tamper Data 10.1.0)
    10. (Copy Plain Text)
  5. fenrir
    1. Ctrl + 8 を呼び出しキーに設定
  6. Process Explorer v11.33
    1. スタートメニューに登録
  7. Thunderbird
    1. Becky からデータインポート
    2. http://cubic9.com/Windows/Mozilla%20Thunderbird/Becky2%A4%AB%A4%E9%A4%CE%B0%DC%B9%D4/%A5%E1%A1%BC%A5%EB%A5%C7%A1%BC%A5%BF/
  8. DropBox
  9. 辞書をインポート
  10. Vmware Server 1.0.9
    1. vmware server
      1. 百式の人のブログの 2 系は使いにくいという情報を元に 1 系をインストール。たしかに前に 2 系をインストールしたら苦労した覚えが。。
      2. SISI だとエラーになったので IDE で対応
      3. ネットワークの設定は NAT で。http://labs.unoh.net/2006/11/vmwarecentos.html
    2. CentOS5
      1. yum update
      2. yum install screen
      3. yum install zsh
      4. chsh  ※/bin/zsh を指定
      5. cd /usr/local/src/
      6. yum install gcc
      7. wget http://www.sqlite.org/sqlite-amalgamation-3.6.12.tar.gz
      8. yum install zlib-devel
      9. wget http://subversion.tigris.org/downloads/subversion-1.6.0.tar.gz
      10. wget http://ftp.gnu.org/pub/gnu/emacs/emacs-22.3.tar.gz
      11. yum install samba samba-swat
      12. vi /etc/xinet.d/swat
      13. /etc/init.d/xinetd start
      14. /etc/init.d/smb start
      15. http://vmware:901/
      16. yum install httpd mysql-server
      17. yum install php php-{mbstring,xml,mysql}

  11. 秀丸
  12. cse
  13. FileZilla Client
  14. IpMsg、View
  15. PuTTY ごった煮版
  16. TortoiseSVN
    1. Df.exe
  17. エクセル、パワポの読み取り専用メニュー
  18. Oracle
    1. Oracle Database 10g Express Edition (Universal)
    2. Oracle Database 10g Express Client
      1. sqlplus system/password@localhost/XE
      2. \oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.ora
      3. フリーなのでインスタンスはひとつだけ。名前は XE。
  19. RealVNC日本語インストール版 4.1.2
  20. FinePrint 5

(VGN-G2)

symfony1.1以降で開発する際に必ず守ること箇条書き

  • schema.yml
    • カラム名には id、created_at、updated_at、created_by、updated_by を利用する
    • join して利用するテーブルには外部制約を必ず設定、テーブル名_id を利用する
    • database.yml、propel.ini の設定は symfony configure:database コマンドを使う
  • 命名規則
    • 変数、関数名は camelCase で
    • app.yml の変数名は snake_case で
    • コメントなしでもわかるような名前をつけて、わかりきったコメントは書かない
  • コーディングルール
    • type hinting を使う
    • if、for、foreach、switch 文の括弧は symfony 形式で
    • 比較文に ==、!= は絶対に使わない。===、!== を利用する。でも is_null とかはもっと使え
    • 文字列を連結する時はピリオドと文字列の間に半角スペース。(例)
      $text = 'text1' . 'text2' . 'text3'

    • php の定数は小文字で。(例)null、true、false など
    • コード内のコメントなどに全角スペースを使わない
    • 関数の return 値に空文字を使うなら null を使え
  • 全体
    • SQL 文を直接書かない、頑張って criteria で書く
    • 共通処理は親クラスを作成し、継承して利用する
    • クラスのプロパティは絶対に protected or private で
    • symfony の lib ディレクトリ以下を理解するとかなりレベルアップ
  • サーバ
    • utf-8 で統一
  • アクション
    • アクションにビジネスロジックを書かない
    • アクションに criteria を書かない
  • モデル
    • lib/model/om、map、lib/form/base の下はさわらない
    • DB まわりのビジネスロジックは lib/model/xxxPeer.php に書く
    • レコード単位の処理は lib/model/xxx.php に書く
    • doSelectRS() で取得したレコードセットは populateObjects() を使ってオブジェクトに変換すると楽
    • doSelectRs() で取得したレコードセットが 2 箇所以上から利用される場合は、レコードセットに合わせたモデルを作成し利用する
    • DB の定数は xxxPeer.php に宣言
    • 複数のモデルに共通の処理を挿入する場合は、sfPropelBehavior を利用する
  • フォーム
    • Form クラスを必ず使う
    • Form まわりのビジネスロジックは lib/form/xxx に書く
    • 親子関係のテーブルを Form で利用する時は embedForm を使う
    • input タグの name は xxx[xxx] の形式で書く。bind する時のロジックが短くなる。$this->widgetSchema->setNameFormat('xxx[%s]') を使う
    • sfUser を使いたい時は、sfContext::getInstance()->getUser() を利用する
  • バリデーター
    • 複数フィールドのバリデートには setPreValidator()、setPostValidator() を使う
  • テンプレート
    • テンプレートには if、for などの簡単な条件分岐以外で php を利用しない
    • layout 内で動的に切り替わる要素を使いたい場合は slot を利用する
    • form を利用している時はテンプレートに関するロジックは form で、form を利用しない時は、viewXxx.class.php を作成しコンストラクタでオブジェクトを渡してロジックは view クラス内に閉じ込める
  • routing.yml
    • get パラメーターのチェックは routing.yml で
  • エラー
    • 400、500、unavailable.php の 3 つが設定対象
  • 保留
    • (ある程度規模が大きくなると、lib/service/serviceXxx.class.php みたいな symfony  にできるだけ依存しないビジネスロジッククラスを作る案もありかも)
  • ヘッダーコメント
/**
* 概要
*
* @package    xxx
* @subpackage xxx
* @author     mei sei
* @copyright  (c) 2009 company_name inc.
* @version    SVN: $Id$
*/

↓↓↓は本屋で売ってる唯一の symfony 本。始めは買わなかったけど、結局買った本。ないよりは全然まし。

symfony徹底攻略 [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)
前田 雅央

ソフトバンククリエイティブ

売り上げランキング: 208898

おすすめ度の平均: 2.0

2 Symfony1.2には未対応

4 2冊目に買うべき本

1 この本は酷い

1 誤植が・・・

動作するjobeetサイト

今まで jobeet の svn はあったけれど動作するサイトがないなあと思っていたら見つけました。ちょっとさわると、jobeet には symfony を使ったプレビュー画面がありました。いろいろ方法はあるけどこれという決定打がないのでプレビューの参考になるかもしれません。

http://www.jobeet.org/en/

symfonyでsqlを節約

doSelectJoinXXX()

っていう関数を使うと 2 つのテーブルを join した結果を SQL 1 本で取得できる。
この関数は schema.yml で外部参照を設定すると自動で生成される。

第18章 - パフォーマンス
続きを読む

symfonyでセッションを利用するときにやっといたほうがいいこと

ひとつは、セッション名の変更。

# apps/frontend/config/factories.yml
all:
  storage:
    class: sfSessionStorage
    param:
      session_name: my_cookie_name

もう一つは有効期限の設定。

# apps/frontend/config/settings.yml
all:
  user:
    class:       myUser
    param:
      timeout:   1800           # 秒単位のセッションの寿命

第6章 - コントローラレイヤーの内側

php のセキュリティをざっと理解するには↓↓

入門PHPセキュリティ
入門PHPセキュリティ
posted with amazlet at 09.02.24
クリス シフレット
オライリージャパン
売り上げランキング: 40453
おすすめ度の平均: 4.0

4 薄くて充実

symfony1.1でフロントと管理ツールの公開ディレクトリを切り替える方法

symfony の web ディレクトリはフロントとバックヤードで共通になってしまう。気持ち悪いので、切り替える方法を考えてみた。

まず以下のように backend ディレクトリを作成する。中身は web ディレクトリをそのままコピーする。


apps/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/
backend/  ← バックヤード用の公開ディレクトリを作成

次に、以下のように config/ProjectConfiguration.class.php の setup メソッドで公開ディレクトリを変更する。

# config/ProjectConfiguration.class.php
    [php]
    class ProjectConfiguration extends sfProjectConfiguration
    {
       public function setup()
       {
         $this->setWebDir($this->getRootDir().'/backend');
       }
    }

あとはドキュメントルートを backend に設定すれば、フロントとバックで別ディレクトリを利用できるはず。でも結局ドキュメントルートを切り替える必要がある。。

symfony×PHP [LLフレームワークBooks] (LLフレームワークBOOKS # 3)
森川 穣 亀本 大地 田中 正裕
技術評論社
売り上げランキング: 62157
おすすめ度の平均: 3.0

1 情報弱者向けの本
5 エッセンスがよくまとまっている

symfony1.1+oracle用のパッチファイル

symfony1.1 + oracle で propel:build-all を実行すると、propel:insert-sql でエラーが発生する。原因は、生成された SQL 内(data/sql/lib.model.schema.sql)のコメントがオラクルのコメントになっていないことと、テーブル名とカラム名がダブルコーテーションで囲まれていることです。

毎回 sql を修正しているわけにもいかないのでパッチを作って対応しました。
これで propel:build-all-load frontend みたいなコマンドもするっと実行できます。

symfony徹底攻略 [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)
前田 雅央
ソフトバンククリエイティブ
売り上げランキング: 166284
おすすめ度の平均: 2.0

4 2冊目に買うべき本
1 この本は酷い
1 誤植が・・・

環境変数の NLS_LANG の使い方

環境変数の NLS_LANG って今までよくわかってなかった。

今日はまってやっと理解したのが、NLS_LANG はオラクルクライアント側の文字コードを指定するものだということ。オラクルはデータベースの文字コードと NLS_LANG を比較して異なる場合は、データベースにデータを格納する際にデータベースの文字コードに変換して格納するという機能がある。今回 NLS_LANG を間違ってデータベース側の文字コードを設定していたので、文字コード変換がされず不具合になっていた。

PHPfestチュートリアル:Oracle Database 10g Express EditionおよびZend Core for Oracle

Oracleデータベースは指定された文字セットで作成されます。 PHPでは、NLS_LANG環境変数を設定することで独自の文字セットを選択できます。 Oracleクライアント(PHP)のグローバリゼーション設定では、ロケールのための適切なデータ形式、Oracleのエラー・メッセージに使用される言語、言語のソートの順番などのデフォルト値を指定できます。 NLS_LANGは、Webサーバーを起動する環境で設定する必要があります。

ホーム > タグ > PHP

ぴくちゃー
ブログパーツ
あわせて読みたいブログパーツ
なかの人
携帯アクセス解析
Yahoo Widget

ページの上部に戻る