PHP

CakePHP 1.2 でSQLの値をエスケープ

Sanitize::escape() が使えそう(試してない)。CakePHP 1.1 だと Sanitaize::sql() だったけど、 1.2 になってどこに移動したのか分からなかったがようやく見つけた。

CakePHP 1.2 で大量データの処理

Model::findAll() だとすぐにメモリー不足になってしまうような処理も、 DboSource::fetchRow() で逐次読み込めば大丈夫。 $db =& $this->User->getDataSource(); $row = $ds->fetchRow("SELECT * FROM users"); while (!empty($row)) { var_dump($row); // …

CakePHP 1.2 で SQL の Where 句生成

DboSource::conditions() でできた。これで、Model::findAll() のための条件データ($conditions)からSQLが容易に作成できる。DboSource::limit() や DobSource::order() とかもあるので、試してみたい。直にSQL文を書いてもいいんだけど、DB差し替えなんて大…

CakePHP 1.2 でバッチ処理

Shell クラスを継承したファイルを app/vendors/shells の直下におくと、cake コマンドで実行できるらしい。以下が参考になる。 http://www.syuhari.jp/blog/archives/185また、細かいところは、APIを参考にするといいかも。 http://api.cakephp.org/class_s…

CakePHP 1.2 RC1 の非推奨

find -name "*.php" | xargs grep -B 1 -A 10 "@deprecated"とか打って調べたら結構あるね。いつから非推奨なのかは不明なものが多いけど。非推奨の関数一覧は、 http://api.cakephp.org/1.2/deprecated.html にまとめてある。・・・ありゃ、Model::findAll(…

CakePHP ポケットリファレンスの RC1 マイグレートシート

PHP

こちらより、いくつかピックアップ。現状では、ポケットリファレンスで分からないところは、ネットで調べたりソースを読んでいる。やはり、まとまったものがあると助かる。 Configurations ACL クラスの名前が変わりました Beta : Configure::write('Acl.cla…

CakePHP で複数チェックボックス

ビューで以下の様にすると面白いことになった。 checkbox('User.sex.1')?>男性 checkbox('User.sex.2')?>女性 コントローラーでは、$this->data['User']['sex'] が配列になる。var_dump($this->data['User']['sex'] をとると、 array(2) { [1]=> string(1) "…

CakePHP 1.2 のデフォルトのレイアウト

/cake/libs/view/layouts/default.ctp が用意されているので、これを /app/view/layouts 以下にコピーして利用する。

CakePHPの月選択のタグを表示する

FormHelper::month() を利用するのだが、CakePHP 1.2.0.7125 RC1では、英語表記にするかどうかを "monthNames" オプションで指定できる。 month('User.birthday', 'now', array('monthNames' => false)) ?> で、数字表記に変更。・・・もしくは、/cake/libs/…

CakePHP ポケットリファレンス

CakePHP ポケットリファレンスを購入した。 http://gihyo.jp/book/2008/978-4-7741-3503-8開発版なので当たり前なのだが、CakePHP 1.2 は内容がどんどん変わっている様だ。 ポケットリファレンスは、 CakePHP 1.2.0.6311-beta を参照している。

CakePHP で直接 DboSource を呼び出す。

cake/libs/model/datasources/dbo_source.php というファイルがある。 このクラスを利用することで、直接SQLを実行することもできる。http://www.1x1.jp/blog/2008/04/cakephp_php5_dbosource.html より、 useDbConfig); $db->value($hoge); ?> $this->useDB…

CakePHP にハマった点

CakePHPについて情報収集に2日かけた後、利用開始して1日目でハマった点。 環境設定でハマった DocumentRoot 以外にコンテンツを設置した際の設定。 複数の .htaccess に RewriteBase を追加した。 例: http://localhost/~okinaka/cake/ にしたいとき ~/pub…

magic_quotes_gpc 仕様

PHP

今回、"magic_quotes_gpc = On" の環境で開発することになったので、仕様確認。 GPC(Get/Post/Cookie) 処理に関する magic_quotes の設定を行います。 magic_quotes が on の場合、'(シングルクオート)、" (ダブルクオート)、\(バックスラッシュ) 、NULL に…

PHP の開始タグと終了タグ

PHP

http://jp2.php.net/manual/ja/language.basic-syntax.php の代わりに、 って表記が出来る。ただし、php.ini でショートタグが有効でなければならない。 short_open_tag = On

クラス名とメソッド名の仕様

PHP

PHP のクラス名とメソッド名の困った仕様に、「大文字と小文字を区別しない」というものが上げられる。以下のように、せっかく読みやすいクラスを定義していても、大文字小文字の使い方によっては、可読性が極端に悪くなってしまう。それでも動くところが怖…

PostgreSQL の非推奨の関数の置換

PHP

昔から使ってるPHPのコードには非推奨の関数が多く含まれていて、 置換する必要があった。他にもあると思うのだが、知っている範囲で 忘れないようにメモしておく。 置換前 置換後 pg_exec pg_query pg_result pg_fetch_result pg_numrows pg_num_rows pg_er…

日本語を含むメールを送信するには

PHP

今使用しているバージョンの mb_send_mail() 関数は腐っているので、他の方法はないかと探していたらいい方法があった。Return-Path まで設定してくれるところがうれしい。http://jp.php.net/manual/en/function.mb-send-mail.php#77899

PHP 5.1.0 以降の date() 関数

PHP

http://www.res-system.com/weblog/item/563/catid/34date()関数を使うためには、php.ini にて、date.timezone の設定が必要とのこと。test.php:

設定を変更するには

PHP

複数のサイトを1つのサーバで管理しようと思った場合、php.ini の設定の違いが問題になる。以下のような設定変更する方法が用意されている。 PHPソース中で設定変更 (ini_set関数) http://jp.php.net/ini-set htaccess で設定変更 (php_value, php_flag ディ…

Etch の PHP4 での問題 (mb_send_mail関数のSubjectの文字化け)

Sarge から Etch にアップグレードした際、 PHP4は 4.3 から 4.4 へと変わった。その際、mb_send_mail 関数でメールを送ると Subject が文字化けすることが分かった。先人が(1年半も前に!)おなじ障害にあっていることが分かった。http://nucleus.mochy.com/…

文字列演算 (31ビット以上、51ビット以下の整数は float を使え!)

PHP

PHPの演算は、混乱する仕様だ。文字列で演算する場合、一度 float などに 型変換されているようだ。PHP: 文字列の変換 文字列は、'.'、'e'、'E' のどれかが含まれている場合は float、それ以外は整数として評価されます。 と書かれているが、実際には 31ビッ…

IPアドレスの保存方法

PHP

ip2long(), long2ip() という関数があるとのこと。http://itpro.nikkeibp.co.jp/article/COLUMN/20070507/270104/ http://www.php.net/ip2long http://www.php.net/long2ipPostgreSQL に格納する際には、データ型を inet 型としているので プログラム側で何…

PHP で memcached を使う

PHP

Debian (sarge) にて memcached の PHPモジュールを使う。 PECL拡張モジュールをインストール 事前に memcached 本体と zlib ライブラリの開発環境が必要。 あとは、pear コマンドを使ってPECL拡張モジュールをインストールする。 (memcache-2.1.2 は、pear…

指定した回数分リダイレクトする。

PHP

携帯には、リダイレクトの回数制限があるらしい。 何回リダイレクトできるか試してみる。 0) { $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = "loop.php?c={$c}"; header("Location: http://$host$uri/$ex…

PHPマジック (SoftBank 705P の不具合?)

実機が手元にないので推測だが、705P のブラウザは、Cookie 対応しているらしい。 だが、Set-Cookie ヘッダの有効期限(expires)を無視している、もしくは、時計がずれてるようだ。 Cookieを発行してしまうWebアプリの作りにも問題があるが、困った不具合だ。…

ビット演算を用いたチェックボックスの制御

PHP

チェックボックスの表現にビット演算を用いることで、 データベースへの格納・取出しが1項目で収まるので、 ディスクサイズやCPUにやさしくなる。 ただし、整数型を用いると、31bitまでしか使えないということに注意。 32bit 以上の整数を扱う場合は、以下…

PHP マジック

PHP

自分の感性や既成概念を覆す、非常に奇怪なコードを目にする。 どんな悪質なコードでも保守を継続しなければならず、常に苦しめられている。 それらのことを「マジック」と呼ばれ恐れられている。 一例を挙げよう。 PHP には、定数を定義するための関数 defi…

まとめて構文チェック

PHP

#!/bin/sh FILES=`find $1 -name \*.php` for file in $FILES do php -l $file done

タイムスタンプの有効な範囲

PHP

1901-12-13 20:45:54 〜 2038-01-19 03:14:07 (GMT) 環境によっては、日付の範囲は Unix エポック以前にはならない。 PHP 5.1.0 以降のバージョンでは、この制限はなくなった。

PHPで携帯の絵文字を表示する

文字コードを指定するのに pack 関数を使用する。 echo pack("n", 0xF659);