2016.11.14

cakephp備忘録

久々にCakePHPを触っててつまづいた箇所があったので、ネットで調べた結果を残しておく。
 
1.CGI版PHPのサーバではそのままだとBASIC認証が使えない
知らんかった。そもそもCGI版とそうじゃない版の違いが分からない。CGI版のほうが安定性があるかとないとか。
解決策としてwebroot直下の.htaccessに以下の行を加える。
 
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) – [E=HTTP_AUTHORIZATION:%1]
 
2.CakePHPをサブディレクトリで運用するには
サブディレクトリ(http://www.poncotsu.com/cakephpとか)に置くと画面遷移がうまくいかなかった。
今までサブディレクトリに入れたことなかったのか・・・?
これもwebroot直下の.htaccessを変更(追加)することで解決する。
 
RewriteBase /サブディレクトリ名/app/webroot
 
上位階層にも.htaccessはあるけど、こっちはいじらなくても大丈夫だった。変更するのはwebroot直下のだけ。
ちなみにCakePHPのバージョンは1.3。まだまだ現役(汗
何度か新しいの触ってみたけど途中でやめちゃった。主にbasic認証できなくなったのが悪い。
  
参考サイト
なんとなく雑記
PHPをメインにしたプログラム情報共有サイト

2013.10.25

cakephpが2.4になっていた!

■1年ぶりくらい?
 土砂降りではないにしろ一日雨が止むことなく降ってました。夜以降のほうが強いかな。
さて、大好きなフレームワークcakephpのサイトを久しぶりに見たらいつの間にかバージョンが2.4.2にまで上がってた。一番最後に触った2.2.5が今年の1月リリースなのでだいたい10ヶ月ぶりか。
 せっかくなのでちょっといじってみた。どのバージョンでも最初の作業はだいたい同じ。備忘録として。
 
1.キャッシュフォルダのパーミッションの変更
app/tmpとその下のapp/tmp/cacheフォルダ、さらにその下にあるmodels,persistent,viewsの3つのフォルダのパーミッションを全て777か707に変更する。
 
2.Configフォルダにあるcore.php内のSecurity.saltとSecurity.cipherSeedの数値を適当に変更する。
 
3.database.php.defaultをコピーしてdatabase.phpを作成、データベースを設定する。ユイはcakephp+sqliteが手軽で気に入ってるのでsqliteを使えるようにする。
database.php内を
var $default = array(
‘datasource’ => ‘Database/Sqlite’,
‘database’ => ‘~/dummy.sqlite3’,//データベールファイルの絶対パス
);
に書き換える。
データベースのファイルをどこに置くかいつも迷う。いつもはModel内に入れているのだけれど・・・。あー、あとデータベースファイルとそれを入れたフォルダのパーミッションを777か707にしておく。でないと、もれなくエラー。
ただ、この時点ではデータベースファイルがなくてもエラーにはならないみたい。なので、実際ちゃんと読み込めるのかはちょっと不明。
 
4.最後にlib/Cake/Model/Datasource内からDataSource.phpとDatabase/Sqlite.phpの2つのファイルをコピーしてapp/Model/Datasource内に放り込む。Sqlite.phpはDatabaseフォルダ付で。
 
これで大方のエラーは消えるはず。デバッグキットを入れろ、というエラーで出てるけど今のところは放っておく。

初期画面

初期画面


 
とまあ何で今ごろまた触ってるかというと、イベント用のメニュープログラムを作ってタブレットで表示しようかなーと目論んでいるわけでございます。タブレットも、買うなら簡単にローカルでphpが動作できるウインドウズOSがいいかな、と。(apacheとか入れたらすぐいけるハズ・・・
年内発売予定と噂されている東芝のencoreとかいう8.1インチタブレットが最有力候補です。
 
・・・とはいえ、飽きやすいのでこの計画も8割方立ち消えてる可能性ががが。さてさて。

2011.11.11

cakePHP2.0を触ってみました

河城にとり

河城にとり


■cakePHP2.0
 2.02安定版が出たので、version2に初めて手を出してみました。
とりあえずいくつか違和感がちらほら。今日分かった範囲で列挙してみよう。
 
1.フォルダやファイルの命名法が変わってる
 今までフォルダはmodelsやcontrollersといった複数形だったのにModel,Controllerと単数形で頭文字が大文字になっていた。ファイルもapp_controller.phpのようなアンダースコアを入れていたが今回からAppController.phpてな感じに。(パスカル記法というのか?)
 
2.AppController.phpの配置場所が変わった
 今までapp直下だったのがapp/Controller直下と、ほかのcontrollerと同じ場所になった。
 
3.sqliteが標準装備された
 これはうれしい。追加のファイルを設定しなくてすむ。
 
4.Htmlヘルパーが動かない?
 今までならデフォルトで認識していたが、とりあえず1.3のファイルを放り込んでみたらエラーが出た。undefined index。どこかで宣言しないといけないのだろうか?もしくは何か別のヘルパーを統合されて名前変わったとか。
 
ほかにも細かいのがいろいろあった。今のところ2.0のリファレンスが日本語対応してないようなので、しばらくは英語で解釈しながら見ていくしかないねぇ。

2011.09.20

連続落選って

■名華祭
 申込してくれていた知人から落ちちゃった、との連絡。お。前々回、今回と続けて落ちちゃってるし。ちなみに前回は申し込んでいない。
 
 やはりヤツには任せておけぬ。次回はユイがサークルカットを描かかねば。野球の勝率も上がってることだし。
 
■CakePHP
 ユイ大好きフレームワークCakePHPの最新版1.3.12が出てますねぇ。始めて触ったのが1.3.5か1.3.4のころだったのでエラく進化してきました。といってもどう進化したかはよく分かってないんですけどねぇ。分かるのはバージョン番号が上がってことくらい。
 さっそくダウンロードしてプライベート使用のあぷろだでも作ってみよう。完成目標は3日間!

2011.07.17

CakePHP+SQLite3

■SQLite3
 現バージョン(1.3.10)のCakePHPではSQLite3に対応してないみたいですねぇ。SQLite2で作成したデータベースは認識するけど、3は認識しない。次期バージョンの2.0(現状はアルファ版)では対応してる感じだけど。
 
 できれば新しいほうの3を使いたい!
てなワケで使えるようにしましょう!やり方はいたって簡単。
まずは以下からCakePHP Datasourcesをダウンロード。現在のバージョンは0.2。
github:https://github.com/cakephp/datasources
 
解凍してmodels/datasources/以下のファイルをapp/models/datasourcesにコピー。
最後にdatabase.phpでデータベースの設定を
‘driver’=>’sqlite3’
としてやれば、SQLite3を使い倒すことができます!幸せ!
 
 これでデータベースに書き込みが出来ない場合は、データベースのパーミッションが書込み禁止になっている可能性アリ。606になっているか確認!自分が読み込めるのに挿入や更新できねーなぁ、と思っていたらコレでした(汗

2011.07.14

Cakephp+SQLite

■半日がかり
 かーかーりましたねェー、SQLite。動かすまでに一苦労。
MySQLと違って、データベースのサーバを用意する必要が無くデータベースを格納するファイル1つだけ。サーバの引越しとかでも設定いらずですぐ動いてくれる軽快さ。
AndroidにもSQLiteが入ってるそう。
 
 ということでちょっと使ってみようと思ったワケです。が。簡単なDB作ってCakePHPで試しに入れてみたが、これがさっぱり認識してくれない。

データベースエラー

データベースエラー


 
いくらごにょごにょイジってもなんともならんから、sqlite_open(‘test.db’)とだけ打ち込んだファイルを作って開いてみると反応なし。エラーログを見ると
 
[Thu Jul 14 14:14:39 2011] [error] [client XXX.XXX.XXX.XXX] PHP Fatal error: Call to undefined function sqlite_open() in /var/www/test.php on line 3
 
sqlite_open関数が未定義になってやんの。
つまりこれ、サーバにSQLiteが入ってないということ?
phpinfo

phpinfo


 
 Fedora13では、パッケージでphpをインストールするとsqliteはwitohout、入ってないの。
自前で入れろってことですか。ですね。
 
1.以下からサーバに入ってるバージョンのPHPをダウンロード。
php本家:http://www.php.net/downloads.php
 
2.サーバに放り込んで解凍して、/ext/sqlite のディレクトリに入る。
tar zxvf php-5.3.6.tar.gz
cd php-5.3.6/ext/sqlite
 
3.なんかごちゃごちゃする。何しているか実のところよく分かっていない。
phpize
./configure
make
make install
この4工程を入力すればインストール完了。

/extに入ってるPHPの拡張モジュールは、とりあえず馬鹿の一つ覚えのようにこの4つのコマンドを打ち込めばインストールできる、みたい。
 
4./etc/php.dフォルダにsqlite.iniファイルを新規作成してextension=sqlite.soを記述。
 
5.最後にapache再起動。
/etc/rc.d/init.d/httpd restart
 

データベースOK

データベースOK

SQLite確認

SQLite確認


めでたく入りましたぁ!
 
 この方法の欠点は、PHPのバージョンが上がってしまうと、その都度同じ作業をしないといけなくなるらしい。
5.3.6よりバージョンがあがったら、また検証してみましょう。
 
今回、こちらのサイトを参考にさせていただきました。
肉とご飯と甘いもの:http://d.hatena.ne.jp/sotarok/20080607/php_5_with_sqlite

2011.02.02

CakePHP続いてます

■長らく
 放置してましたが、ようやく更新する気が起きました。
手始めに去年から始めているCakePHP。めでたくCakeの虫となりました。今ではサイトの表示やユーザー登録などの実装を経て、買い物サイトを作れるまでになりました。
 
 でまあ、必須にとなるメール機能で送り先によってはたまにメールの頭にメールのヘッダーが付いちゃう現象が発覚。メールのプロバイダによって付いたり付かなかったりするみたい。
 EmailComponentの初期状態だとそんなことなかったけど、文字セットをiso-2022-jpにすると発生した感じ。
 
解決策としては、cakeフォルダに入ってるemail.php内の_mailメソッドを
 
$header = implode(“\r\n”, $this->__header);
$message = implode(“\r\n”, $this->__message);
 
から
 
$header = implode(“\n”, $this->__header);
$message = implode(“\n”, $this->__message);
 
としたら出なくなりました。$messageも変更したのは、そのままだと改行が二重にされて文章が間延びしていたから。
 
本来cakeフォルダ内のファイルをいじるのはご法度なのだが、これだけなのでやっちゃった。

2010.08.19

CakePHP

■フレームワークというもの
 初めてCakePHPというものに触りました。PHPを触り始めた頃はPHPを編集するエディタか何かの名前かと思ってました。
最近、MVCモデルというプログラミングの手法に興味を持っていろいろ調べていたら、フレームワークという仕組みに行き着いていろいろある中のひとつがこのCakePHPでした。
 
 今まで組んでた(いまもそうしているが)PHPのプログラムは1つのファイルにデザイン部分のHTMLと動作部分のPHPを一緒にして記述していました。別にコレでもいいんだけど、これだとあとか修正したり機能を追加したりするときいろいろめんどくさい。実際いろんなファイルを渡り歩いて修正したりしていたし。
 
 このMVCモデルというのは、Model(動作部分)とView(デザイン部分)とController(その2つを仲介する部分)を区別して記述するプログラムの手法だという。なんでも、こうするとプログラムの修正・追加や保守がラクになるんだとか。
 
 そんな手法(プログラミングの手法自体はMVC以外にもいろいろあるようです)を含めたいろんな機能・規則を用いて効率的にプログラムが組めるような仕組みを提供しているのがフレームワークで、今回は比較的覚えるのが簡単そうなCakePHPを選んでみました。
とりあえずチュートリアルをこなして、この2日間で日本語表示ができるまでにはなりました。MySQLの文字化けはある意味永遠のテーマのごとく付きまとってきます。今回はCakePHPのconfigフォルダにあるdatabase.phpでデータベース情報に
‘encoding’ => ‘utf8’,
を記述してやれば最終的に表示してくれました。コレ以前にMySQLの文字エンコードをいじったりしていたので、どれでうまくいったのは相変わらずなぞです。
 
 しかし、この方法だと今まで1つだったファイルが3つになるわけで、ファイル数が激増するような気がする・・・。まあ、しばらく続けてみることにしよう。
 
 あー、頭がイタイ。