PHP

既存の include_path に新しいパスを追加するには

PHP

http://www.php.net/manual/ja/function.set-include-path.php/usr/lib/pear を追加。

PHP のソースコードとは別のエンコードで出力するには

PHP

使えないPHPにイラッとしたが、ソースを Shift JIS で記述することを諦めて、出力のときにエンコードを変更することにした。絵文字には別途対応が必要だが、以下の方法で簡単にできた。 http://www.ideaxidea.com/archives/2008/04/phpob_start.html ここに…

PHP のソースコードは ShiftJIS で書いてはいけない

PHP

こんな簡単なコードも実行できないのか!使えんヤツ。

PHP で XHTML を扱うためのバッドノウハウ

PHP

PHPにはURLにセッションIDを自動で付与する機能(track_vars)があるが、デフォルトでは "&" でつなげることになっている。XHTML では、パースエラーになるため、"&" に変更したい。php.iniで arg_separator.output = "&"を有効にする。または、PHPス…

mbregexの初期化について

PHP

php を使っていて mbstring 関連の挙動がおかしいと思ったら、私の環境では、デフォルトのエンコード(EUC-JP)とは違うエンコード(UTF-8)を使っていたためだった。http://wiki.poyo.jp/read/PHP/tips/mbstring/caution_mbregexphp.ini は他のアプリの関係で変…

phpDocumentor は日本語未対応

PHP

テンプレートを修正することで、コメント部分に関しては大丈夫だが、タグは日本語を使うと問題がある。HTML を生成した場合、@package や @subpackage は、生成されたファイル名やディレクトリ名に利用される。ソースコードの文字コードとOSの文字コードが一…

PHPマジック (呼び出し時の参照渡し)

PHP

http://www.php.net/manual/ja/migration53.deprecated.php を見ていて初めて知ったこと。PHP では、func(&$var) のように関数呼び出す際引数の前に & を付けると参照渡しになるとのこと。すごい仕様だね。 変化無し func(&$a); echo $a, "\n"; # $a => 書…

phpDocumentor を試す

PHP

phpDocumentor は、ソースコードからAPIドキュメントを作成するツール。javadoc みたいなもの。 http://www.phpdoc.org/Ubuntu にはパッケージは用意されていないため、ファイルをダウンロードしてインストールすることにした。どうやら、圧縮ファイルを展開…

エラーメール解析(その3)

PHP

試していないが、PHP でエラーメール解析ができる PHPMailer-BMH という製品があるらしい。GPLライセンス。http://phpmailer.worxware.com/index.php?pg=bmh

xdebug + webgrind で PHP プロファイリング

出来上がったPHPのプログラムが遅いので、ボトルネックを調べることになった。 そういえば、xdebug でプロファイリングしてたなぁと思ってググってみたら、 webgrind というWebベースのフロントエンドがあることが分かった。http://code.google.com/p/webgri…

PHP の require や include にはカッコ不要

PHP

require や include は、

PHP_CodeSniffer でソースコードのチェック

数年ぶりに PEAR のコーディング規約を眺めていたら、ずいぶん変わっていたので驚いた。そこで見つけたのが、php のソースコードが規約通りに組まれているかどうかをチェックしてくれるツール PHP_CodeSniffer。Ubuntu の場合、パッケージがあるのでそれをイ…

PHP でキーボード入力

PHP

コマンドライン上で対話的に処理するバッチを作成するため、標準入力(キーボード)から文字を受け取りたくなった。ファイル入力の関数にファイルポインタとして定数"STDIN" を渡すだけで良いようだ。 "; $line = rtrim(fgets(STDIN), "\n"); echo "input=$li…

PHP で文字列のビット演算

PHP

ビット演算をする場合、通常は整数値を使うのだが、基本的には 32ビットしか使えない。(未確認だが、64ビットOSなら64ビット整数が使える?) PHP では、文字列でもビット演算に対応しているらしいので使ってみることにする。ということで、文字の "0" と "1" …

fgetcsv() というマイナーな関数

PHP

PHP のマイナーな関数は、使ってはイケないと思う。PHP は、一見便利そうな関数の数は多いが十分メンテされているとは言い難いものも含まれているので注意が必要。 fgetcsv() という関数の仕様が PHP4 と PHP5で若干異っているようで、PHP4で問題なかったCSV…

うるう年の判定方法

PHP

http://ja.wikipedia.org/wiki/%E9%96%8F%E5%B9%B4 より、PHP では、

PHP でレスポンスのステータスコードを指定する方法

PHP

直接ヘッダを記述: 第3引数でステータスコードを指定:

任意の関数を指定する。

PHP

これはどう呼んだらいいのかな? コールバック?*1 PHP では、指定した関数を変数を介して実行することができる。 Cの関数ポインタともなんか違うような気がする。う〜む。以下の例では、hoge() と fuga() を $f を介して実行している。

PHP の elseif/else if

PHP

http://php.net/manual/ja/control-structures.elseif.php より。"elseif" でも "else if" でもほぼ同じ動作だが、一つだけ違う点がある。パースエラーになる例:

CakePHP で Model::find() の結果を加工

PHP

Model::find() の結果を、モデル名のキーを取り除いた配列に加工したい。配列の加工は、Set クラスを使うと便利らしいが、好みの形にならないので、色々悩んだ結果、array_map() と、array_shift() を組み合わせると良いことが分かった。 User->find('all');…

PHPの閉じタグは書かない方がいい

PHP

プログラムのみのコンテンツを含まない PHP ファイルの最後には、閉じタグ(?>) を書かない方がいい。(自分が入れた)変な改行コードや空白に悩まされるかもしれない。

CakePHP のオンラインマニュアル

PHP

CakePHP のオンラインマニュアルは日々進化してる。日本語ページでは、翻訳が追随していない場合は、「This text may be out of sync with the English version」って表示されるようになったみたい。これは便利かも。ほかにも、英語ページが Pending 状態で…

数値文字参照 を文字列に変換

PHP

$utf8 = html_entity_decode('〜', ENT_NOQUOTES, 'UTF-8');

CakePHP 1.2 アプリケーション固有の定数

app/config/bootstrap.php に記述する。

CakePHP 1.2 でファイルアップロード

http://cakebaker.42dh.com/2006/04/15/file-upload-with-cakephp/ より、ビュー: フォーム作成時のオプション 'type' に 'file' を指定する。 create('MyFile', array('action' => 'add', 'type' => 'file')); echo $form->file('File'); echo $form->end()…

CakePHP 1.2 の Model::find()

Model::findAll() や Model::findCount() が非推奨になって、Model::find() が、若干カオスな状態になってるみたい。古い記法と新しい記法があることがわかった。APIリファレンス参照: http://api.cakephp.org/class_model.html#e60758f27fa8486a063b8cc424…

CakePHP 1.2 のシェルで標準入力を取得

Shell クラスから見て $this->Dispatch->stdin に標準入力のハンドラがある。 Dispatch->stdin; while (!feof($stdin)) { $buffer = fgets($stdin); // 1行取得 echo $buffer; // 何らかの処理 } } }

CakePHP 1.2 の AuthComponent

そろそろ、ログイン機能を検討してみる。AuthComponent を使うといいみたい。http://blog.ne2ma2.com/archives/160 http://blog.ne2ma2.com/archives/161 http://blog.ne2ma2.com/archives/163・・・初回はどうしたもんかね。ログインしないとユーザも追加で…

CakePHP 1.2 モデルのqueryメソッドでfind、findAllと同等の返り値を得る方法

http://d.hatena.ne.jp/ngtn/20080409/1207747539 より、 $this->User->query("SELECT * FROM users"); のように、SQL文を直接実行した場合、結果のデータの構造が find などと違っている。 同じ形式にするには find メソッドで発行する SQL文と同じものを生…

CakePHP 1.2.0.7296 RC2 released!

http://bakery.cakephp.org/articles/view/release-some-rc2-sweetnessあ、新しいのがあがってる。色々バグフィックスしてるんだって。 最近リリースのペースがいい感じだね。 CakePHP 1.2 RC1 -> RC2 cake ディレクトリと app/webroot/{index,test}.php を…