ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2013年3月3日日曜日

[CakePHP]アラビア語はSQLまでも右から左へ受け流す 他

アラビア語をINSERTしたSQL文をブラウザで見るとカラムと値の並びが逆だった

仕事でアラビア語を登録するSQLを実行する機会がありました。
アラビア語を登録するテーブルの構造は以下のような構造。

Field
id
word
delete_flag
created
modified

"word"列にアラビア語がセットされるのですけど、INSERT文をCakePHPにて実行し、Cakeが出力するSQLデバッグを確認したところ・・・



カラムと値の対応が逆になってました。でもテーブル確認するとちゃんと正常にデータ登録されてました。てかブラウザのページソース確認してみると、カラムと値の並びはちゃんと揃ってました。
ちなみに上記テーブルをCSV出力してWindowsのEmEditorで開いた時も並びは逆になってました。

アラビア語といえば右から左へ綴る言語ってことで、ブラウザとかエディタが表示制御してるんでしょうね。SQLに限らず、左から右へと綴る言語とアラビア語を混在させた文章がどう表示されるかいろいろ試してみたいな。ま、それをやって特に得るものはないから優先度超低だけど。

アラビア語の文字コードとかのメモ殴り書き

携わってる仕事は別にグローバルでは無いんですけどね。
  • ISO-8859-6, windows-1256 : アラビア語
  • GB2312 : 中国語
  • EUC-KR : 韓国語
    ※mb_detect_orderで「EUC-JP」の後に定義してると「EUC-JP」と検出されてしまった。
    「EUC-JP」の前に定義すると今度は「EUC-JP」が「EUC-KR」と検出。
    つまりどちらの言語も先に出現する方のエンコーディングとして検出されるっぽい
  • タイ語はUTF-8
グローバル展開するならMySQLのエンコーディングはutf8ではなくutf8mb4を使うべき
【デブサミ2012】16-A-6 レポート グリーに学ぶ、グローバル展開の最新事情 (2/2):CodeZine

CakePHPではMySQLのTINYINT型はboolean型扱いとなる

データの種類や区分を表すのに整数値割り当てて使うってのはまあ当たり前の話ですが・・・
この区分値を格納するカラムの型をTINYINT(1)にし、Modelでこの区分値の条件指定して検索かけたところ、いろいろと意図してない結果が発生しました。
  • 検索条件に2以上の値を指定しても=1のデータが返ってきた
  • 値が0のデータの検索結果をダンプすると、カラムの値は0ではなくbool(false)となっていた
    →PHPで判定条件を「=== 0」と厳密判定にしてたら大変だね
どうも「0とそれ以外」の2種類しか認識されない、つまりboolean扱いされているっぽい。
app/tmp/cache/models配下にあるモデルキャッシュを確認してみたところ、問題のカラムの型は確かにboolean型になってました。
・・・
s:10:"kbn_column";a:4:{s:4:"type";s:7:"boolean";・・・
・・・

Cakeの仕様なんでしょうね。僕全然知らなかったのですけど、これって知ってなきゃ恥ずかしいレベル?

まあとにかく、0と1以外の値を持ちうる場合はCHAR(1)にしときましょう。


2011年8月16日火曜日

LAMP of CakePHP on VMware:構築後のデザート~phpMyAdminインストール

MySQLサーバーをウェブブラウザから操作するGUIツールであるphpMyAdminのインストール手順を解説します。

ダウンロード

phpMyAdmin - Download
上記ページにも記載されていますが、バージョン3以降はPHP5.2以上である必要があるのでご注意を。

ドキュメントルートに配置

アーカイブを解凍後、Apacheの公開ディレクトリに配置。
$ cd /var/www/html 
$ tar xvzf phpMyAdmin-3.4.3.2-all-languages.tar.gz 
# mv phpMyAdmin-3.4.3.2-all-languages phpMyAdmin 

設定ファイル作成

ルートディレクトリ直下に設定ファイルの雛形「config.sample.inc.php」があるので、「config.inc.php」という名前にリネーム(orコピー)。
# cd phpMyAdmin 
# cp config.sample.inc.php config.inc.php 

つづいて編集。最低限以下の設定だけでOK。
$cfg['blowfish_secret'] = '(ランダムな文字列)'

php-mcryptパッケージインストール

phpMyAdminの認証時に認証情報の暗号化を行うためかどうか知らんが、これインストールしておかないと警告が表示される。
ここで、CentOSのバージョン、PHPのバージョンにより運命が分かれます。
CentOS 5.xで、phpパッケージの場合
以下コマンドで瞬殺です。
# yum install php-mcrypt  
php53パッケージ OR CentOS 6.0の場合
残念ながら、現時点ではyumのパッケージは提供されていませんので、RPMパッケージを使用するか、ソースからコンパイルするしかありません。

ここではCentOS 6.0でRPMパッケージを使った手順を説明します。CentOS 5.6でphp53パッケージの場合の手順は調べていませんが、流れは同じようなもんだと思います。
必要なパッケージは以下。
  • libmcrypt
  • php-mcrypt
まずは以下サイトでRPMパッケージを検索。
CentOS 6.0用のがいつくか見つかる。僕がチョイスしたのは以下。
libmcrypt-develも必要かどうか分からんが、とりあえず除外した。
パッケージのURLは、上記ページから「Download Mirrors」→「select mirror」と辿ったページの「binary package」のリンクがそれ。
wgetで取得してインストールし、Apache再起動。
# wget http://download.fedora.redhat.com/pub/epel/6/i386/libmcrypt-2.5.8-9.el6.i686.rpm 
# wget http://download.fedora.redhat.com/pub/epel/6/i386/php-mcrypt-5.3.2-3.el6.i686.rpm 
# rpm -ivh libmcrypt-2.5.8-9.el6.i686.rpm 
# rpm -ivh php-mcrypt-5.3.2-3.el6.i686.rpm 
# /etc/init.d/httpd restart 

以上でOK!
phpMyAdminの設定ファイルで特に言語や文字コードの変更はしなかったけど、日本語データは問題無く扱えました。

※参考

関連エントリ



2011年8月7日日曜日

LAMP of CakePHP on VMware:構築手順メモ外伝 ~CentOS 6.0環境構築

ごぶサタデー…のつもりだったが、後述のインストール作業の見通しが甘くて日付を跨いでしまった。
ところで更新が滞ると記事コメント頂けるという法則がこの宇宙には存在しているようです。

技術メモ・ネタが結構溜まってきているので(えと、レベルは高くないです)、いい加減そろそろ消化していかないとなと思って臨んだサタデー、CentOS 6.0が先月リリースされていた事を知りました。
うーん、情報収集は怠っていなかったつもりだけどな…このニュース、認知度ありました?

まあ何はともあれ、せっかくなんでVMware Player上に仮想環境構築です。
まずは以前に自分で書いた構築手順(簡易インストール)を踏んでみました。若干の手順の差異はあれど、OSの日本語化設定まではすんなり済みましたが、日本語入力メソッド(前述の記事における『SCIM+Anthy』)のインストールで躓いてしまい、日本語の入力ができない状態で通行止めに…

なので今回は簡易インストールではなく、ISOイメージファイルからブートすることでインストールしました。その手順をここに記します。
ちなみに2011年8月7日時点で、当記事の手順でインストールされるAMPのバージョンは以下の通り。PHP、5.3だー!
  • A:2.2.15
  • M:5.1.52
  • P:5.3.2

ISOイメージのダウンロード

わざわざ書くことでもないですが。
以下ページに日本のミラーサイトへのリンクが記載されているので、お好みのサイトからダウンロードしてください。ちなみにISOイメージは「6.0/isos」ディレクトリにあります。

VMware Player : 空の仮想マシンを作成

VMware Playerを起動し、ホーム画面の「新規仮想マシンの作成」を選択。
「後でOSをインストール」を選択し、次画面で「Linux」「CentOS」を選択し、後は簡易インストールと同じ流れ。
よく分からなければ、例によって画像付きで解説してくださっている以下ブログを参照してください。
尚、今回は空仮想マシン作成なので、この時点でのCentOSインストールは当然開始されません。

VMware Player : CentOSインストール

作成した空仮想マシンを選択して
「仮想マシン設定の編集」→「ハードウェア」→「CD/DVD(IDE)」と選択していき、
「接続」ペインの「ISOイメージファイルを使用する」欄に、ダウンロードしたISOイメージのパスを入力。
この状態で「仮想マシンの再生」を行います。

後は、画像付きで解説してくださっている以下ブログを参照してください。
僕はネットワーク設定まで全く同じ手順を踏ませていただきました。
ちなみに上記記事の(1)と(2)の間に、もしかしたらディスクチェックを行うかどうかの画面が表示されるかもしれません。手っ取り早く進めたければスキップしちゃってください。

VMware Toolsを自分でインストール

今回は簡易インストールではない手順をとったので、VMware Tools(※1)は自分でインストールする必要があります。

まずは仮想OSにログインした状態で、VMwareウィンドウ下部の「ツールのインストール」を押下。

インストーラのアーカイブが保存された仮想CDドライブがマウントされます。

次にターミナルを起動し、mountコマンドでアーカイブのパスを確認。
$ mount
…
/dev/sr0 on /media/VMWare Tools …

僕の場合は上記のパスでした。
続いてアーカイブを展開し、rootユーザーになってからインストールスクリプトを実行します。
$ tar xvzf /media/VMware\ Tools/VMwareTools-8.4.6-385535.tar.gz
$ cd vmware-tools-distrib
$ su
# ./vmware-install.pl

インストールスクリプトでは、ディレクトリなどいくつか設定を問われますが、全て何も入力せずEnter(その場合[]内の値が使用される)。

完了したら一旦シャットダウンし、仮想マシン設定の「CD/DVD(IDE)」の設定を元に(「物理ドライブを使用する(自動検出)」)戻し、再度起動してみます。
ゲスト・ホストOS間でクリップボードの共有、マウスカーソルのシームレスな行き来、VMware Playerのウィンドウ最大化した際にゲストOSの描画エリアも最大化…などが実現できていればOKです。

あと、せっかくなんでこのタイミングでパッケージを更新しておくといいかもしれません。
「システム」→「管理」→「ソフトウェア更新」で更新できます。ちなみに僕の場合、見つかった更新の数は約170個で、更新完了するまで結構時間かかりました。

Apache インストール

恐らく既にインストールされていると思います。
もしインストールされていなければ、以下コマンドでインストール。
# yum install httpd

そして起動。
# /etc/init.d/httpd start
ファイアウォール設定
「システム」→「管理」→「ファイアーウォール」
「信頼したサービス」で表示されるリスト内の「WWW(HTTP)」にチェックを入れ、ツールバーの「適用」押下。
※恐らく「SSH」はデフォルトでチェックが入っていると思いますが、チェックされてなければ入れといてください。

MySQL インストール

# yum install mysql-server

そして起動。
# /etc/init.d/mysqld start

DBやユーザーの作成に関しては、今回も割愛。

PHP インストール

MySQL接続用のパッケージも一緒にインストール。
# yum install php php-mysql

インストール済んだらApache再起動。
# /etc/init.d/httpd restart

ApacheやPHPとかの動作確認やらCakePHPの導入やら

以前に僕が書いた以下記事を参照してください。
記事の環境はバージョン5.5ですが、やることは変わりません。

その他の関連エントリ


※1
ゲスト・ホストOS間でクリップボードの共有やマウスカーソルのシームレスな行き来を実現したり、VMware Playerのウィンドウ最大化した際にゲストOSの描画エリアも最大化したりetcetcと、痒いところに手を届かせてくれるツール。


2011年4月4日月曜日

LAMP of CakePHP on VMware:構築手順メモ2~CakePHPデコレーション

はじめに ※2011年8月追記

当記事は、CentOS 5.5環境の構築手順です。
CentOSと言えば、4月に5.6、7月にようやく6.0がリリースされました。
5.6環境のインストールは、この記事で解説している5.5と全く同じ流れでいけます。ちなみに、5.6だとPHP5.3のパッケージが提供されています。
6.0の場合、微妙に違いますが殆ど変わらないので、何となく分かるかとは思いますが、確実を期したければこちらを参照してください。ただしApacheとPHPの動作確認、CakePHPインストールは当記事の通りです。

では本題

LAMPほぼ童貞の男がお送りする、VMware Player上のCakePHP自習環境構築第2弾。
今回はCentOS上にLAMPの『AMP』及びCakePHPをインストールする手順をお届け。
※VMware PlayerとCentOS仮想マシンの構築手順はこちらを参照

Apache インストール

※プロンプトが『$』の場合は一般ユーザー、『#』の場合はrootユーザーで実行(或いは頭に「sudo」をつける)してください。
# yum install httpd

インストール済んだら起動。
# /etc/init.d/httpd start
ファイアウォール設定
「システム」→「管理」→「セキュリティレベルとファイヤーウォールの設定」を選択。
「ファイアウォールのオプション」タブを選択して
  • ファイアウォール:有効
  • 信頼できるサービス:「WWW(HTTP)」にチェック
※「信頼できるサービス」はついでに「SSH」もチェックしておきましょう。
ここいらで接続確認
まずIPアドレスを確認。
# ifconfig
※パス通ってない場合は「/sbin/ifconfig」とフルパス指定してください。

ブラウザで「http://{IPアドレス}」にアクセスし、Apacheのテストページが表示されたらOK。

MySQL インストール

# yum install mysql-server

インストール済んだら起動。
# /etc/init.d/mysqld start

DBやユーザーの作成に関しては、今回は割愛。

PHP インストール

MySQL接続用のパッケージも一緒にインストールします。
バージョン 5.1
# yum install php php-mysql
バージョン 5.3 ※CentOS 5.6のみ
# yum install php53 php53-mysql

インストール済んだらApache再起動。
# /etc/init.d/httpd restart
ここいらでPHP動作確認
Apache公開ディレクトリ(デフォルトでは/var/www/html)直下に以下ソースを適当なファイル名で保存(拡張子は「.php」)。

ブラウザで「http://{IPアドレス}//{ファイル名}」にアクセスし、「PHP Version…」から始まるページが表示されればOK。

CakePHP インストール

以下ページよりアーカイブをダウンロード。3月下旬時点での最新安定バージョンは「1.3.8」。
アーカイブを解凍し(tar zxvf {ファイル名})、Apache公開ディレクトリ(デフォルトでは/var/www/html)内に展開。
CakePHPディレクトリ内の.htaccess有効化
「/etc/httpd/conf/httpd.conf」を開き、以下設定を追加。

ここいらでCakePHP試食
ブラウザで「http://{IPアドレス}/{CakePHPのパス}」にアクセス。
403エラーが発生した場合、SELinux設定を確認し、有効になっていたら無効に設定。
# getenforce
Enforcing ←disabled以外の場合は有効
# setenforce 0 ←無効化コマンド
さらに再起動時にも無効になるよう、設定ファイル編集。
# vim /etc/sysconfig/selinux
SELINUX=disabled
ここでOS再起動。これで恐らくOKな筈。
警告メッセージがいくつか表示されているはずなので、一つずつ潰していく。
apacheユーザーにapp/tmpディレクトリの書込権限追加
以下は一例。「chmod -R 757」とかでもOK。
chmod -R o+w {CakePHPのパス}app/tmp/
「strtotime()」の警告が発生したら
PHPが5.3でタイムゾーン設定を行っていない場合に発生する。
/etc/php.iniを開き、「date.timezone」の値に「Asia/Tokyo」を設定。
;date.timezone = 
↓ 修正
date.timezone = "Asia/Tokyo"
設定済んだらApache再起動。

app/config/core.phpのセキュリティ関連パラメータ変更
以下項目の値をデフォルト値から適当に変更。
  • 'Security.salt'
  • 'Security.cipherSeed'
app/config/database.php作成
既存のdatabase.php.defaultを元に作成。
ここまでの手順でMySQLをインストールした場合、パスワード無しの「root」ユーザーと「test」DBが作成されている筈なので、とりあえず接続情報を以下のように設定する。

PCREだか何かのエラーが発生してたら
「cake/libs/validation.php」のalphaNumeric関数内にある正規表現を修正する。

※ここの部分は以下のブログを参考にさせていただきました。
以上でとりあえず完成(の筈)。OS起動時にApacheやMySQLを自動起動させる設定やらMySQLのDB・ユーザー作成やらは、後述の関連エントリを参照してください。
それではCakePHPを召し上がってください。

関連エントリ



2011年4月3日日曜日

LAMP of CakePHP on VMware:構築手順メモ1~CentOSインストールまで

はじめに ※2011年8月追記

当記事は、CentOS 5.5環境の構築手順です。
CentOSと言えば、4月に5.6、7月にようやく6.0がリリースされました。
5.6環境のインストールは、この記事で解説している5.5と全く同じ流れでいけます。ちなみに、5.6だとPHP5.3のパッケージが提供されています。
6.0環境の構築手順はこちらを参照してください。

では本題

職務経歴の大半がWindows Server+商用クソJavaフレームワークで占められており、LAMPのどれ一つ未経験の男がお届けする、VMware Player上のCakePHP自習環境構築手順です。よろしければご覧あれ。
尚、タイトルの通り当記事で言及しているのはCentOSインストールまでです。AMPのインストール手順に関してはこちらを参照

ちなみに当記事におけるLAMPのバージョンは以下の通り。
3月下旬にバージョン指定しないでyumインストールした結果であります。
  • L:CentOS 5.5
    ※5.6環境の構築手順も同じ流れです
  • A:2.2.3
  • M:5.0.77
  • P:5.1.6
    ※CentOS 5.6の場合、PHP5.3のパッケージが提供されています
ところでCentOSと言えばRed Hat互換ということで人気な訳ですが、開発コミュニティが分裂しかかっていて次期バージョンリリースの目処が立たず、待ちきれないならScientific Linux使ってねなんて状況なんだそうな。

VMware Player インストール

以下ページの「ダウンロード」リンクから。
姓、名、メールアドレスを入力後、インストーラーのダウンロードページリンクが記載されたメールが送られてくる。

CentOS ISOイメージのダウンロード

本家サイトのダウンロードページから。
お好みのミラーサイトから『CentOS-5.5-i386-bin-DVD.iso』をダウンロードしてください。尚、ファイルサイズは3.9GBです。

※ダウンロードを速く終えたくて堪らないあなたは、『CentOS-5.5-i386-bin-DVD.torrent』でBitTorrentによるダウンロードを利用するといいよ。ちなみに僕は今回のこれでBitTorrent処女喪失しました。TorrentクライアントにはOperaを使用。
※1:BitTorrentについての補足というかメモ書き

CentOS仮想マシン作成

VMware Playerを起動し、ホーム画面の「新規仮想マシンの作成」を選択、後はウィザードに従って進める。特に躓くようなことはないだろうから詳細な解説はここでは割愛。もし躓くようであれば、画像付きで解説してくださっている以下ブログを参照してください。

日本語化設定

OSの画面を見れば一目瞭然だが、言語設定が英語の状態。どうも上記手順によるインストール(簡易インストール)だとこうなってしまうらしい(※2)。
というわけで日本語化設定を行う。
キーボード設定
今のままだとキー配列が英語でコマンドタイプがままならないので、まずはキーボード設定から。
メニューの「System」→「Preference」→「Keyboard」で表示されるダイアログの「Layouts」タブを選択し、
  • Keyboard model:Japanese 106-key
  • Selected layouts:japan ※それ以外は削除
システムの言語設定
以下コマンド実行したらダイアログ表示されるので『Japanese』を選択。
※プロンプトが『$』の場合は一般ユーザー、『#』の場合はrootユーザーで実行(或いは頭に「sudo」をつける)してください。
# system-config-language
日本語フォント インストール
# yum install fonts-japanese
日本語入力メソッド『SCIM+Anthy』のインストール(※3
# yum install scim-anthy

ここまでやったら一旦再起動。

メニューなどで文字化け発生したら

フォントキャッシュを更新して再起動したら解消。
# fc-cache -fv

※ここの部分は以下のブログを参考にさせていただきました。

LAMPの『L』のインストール・設定はとりあえずこんなもんでOK。
残りのAMPに関しては次の記事で解説してます。

関連エントリ

※1:BitTorrentメモ書き
CentOS ISOイメージのダウンロード先にデスクトップを指定し、ダウンロード開始して無事完了。なるほど、確かにHTTPやFTPに比べて速い…と感動していると、何かアップロード処理が始まっている。BitTorrentといえばWinnyとかと同種のいわゆるP2Pなもんだから、「やばい!デスクトップ上のファイルが晒される!!」と焦った焦った…。
BitTorrentの場合、ファイルをダウンロードすると、今度は自分が配布者となってダウンロードしたばかりのファイルがアップロードされるのだそうな。要するに、アップロードされるのはダウンロードしたファイルだけ。心配するな、俺。ていうか事前に学んどけよ、俺。

BitTorrent - Opera Wiki
BitTorrentにアップフォルダという概念はありません。あなたがBitTorrentを利用してダウンロードしている途中、またはダウンロード完了したものを他のひとに分けあたえるのみです。それ以外のファイルを勝手に流されることは仕組み上ありえません。

尚、ダウンロード後に接続解除するなどしてアップロードしないのはマナー違反。
Operaヘルプ:BitTorrent
BitTorrent アーカイブをダウンロードしている間、あなたは他のユーザーへの配布も助けていることにをなります。たとえ帯域制限をするなどしても、アップロードをせずダウンロードのみ行うということはできません。

※2
当記事の手順(簡易インストール)ではなく、ディスクからインストールするのと同じ手順でいきたい場合は、CentOS 6.0環境構築手順の記事を参考にしてください。その手順の場合、当記事で解説している日本語化設定は不要(OSインストールウィザードで行う)になりますが、『VMware Tools』は自分でインストールするしなければなりません。

※3
Windowsにおける『MS-IME』、Macにおける『ことえり』ね。