CakePHP環境構築
新たにCakePHPの環境構築が必要となったので、その手順を残しておきます.
【環境】
・さくらVPS
・CentOS 6.6 (Final)
・CakePHP 2.5
・PHP 5.3.3
・MySQL 5.1
【手順】
1)PHPのインストールと設定
以下のコマンドを実行
# yum -y install php php-mbstring php-mysql php-devel
デフォルトタイムゾーンの設定
# vi /etc/php.ini
ここで、以下を追記する
data.timezone = Asia/Tokyo
2)httpdのインストールと設定
さくらVPSの場合だと初期状態でインストールされている
設定の編集
# vi /etc/httpd/conf/httpd.conf
以下をそれぞれ変更
1.ServerTokens OS → ServerTokens Prod
2.#ServerName www.example.com:80 → ServerName centossrv.com:80
3.CGIの許可 Options Indexes FollowSymLinks → Options Includes ExecCGI FollowSymLinks
4..htaccessの許可 AllowOverride None → AllowOverride All
5..plの追加 #AddHandler cgi-script .cgi → AddHandler cgi-script .cgi .pl
3)MySQLのインストールと設定
次のサイトを参考にした
http://centossrv.com/mysql.shtml
インストール
# yum -y install mysql-server
設定の編集
# vi /etc/my.cnf
以下を追加する
[mysqld]の部分
character-set-server = utf8
[mysql]の部分(ない場合は書き加えます)
default-character-set = utf8
起動
# /etc/rc.d/init.d/mysqld start
起動時に実行するように設定
# chkconfig mysqld on
4)CakePHPのインストールと設定
公式ページを参考にしました.
インストール - 2.x
ディレクトリを/var/www/htmlに移動させ、以下を実行
# git clone git://github.com/cakephp/cakephp.git
これでcakephpというフォルダがダウンロードされます.
この時点でブラウザ上でhttp://localhost/cakephpと入力すると確認出来るがエラーメッセージが表示された状態である.そのため,以下の手順を踏む必要がある.
4−1)database.phpの作成と設定
app/Configに移動する
初期にdatabase.php.defaultというファイルが存在するため、それをコピーして作成する
# cp database.php.default database.php
設定の編集
# vi database.php
設定に関しては,過去に書いた以下の記事を参考にお願いします.
MySQLデータベースの移行&CakePHPの外部DBサーバアクセス - ysku's blog
4−2)Security.saltとSecurity.cipherSeedの設定
Security.saltとはパスワードを暗号化する際に付与されるデータである.
ターミナル上で以下のコマンドを入力すると生成される.
php -r '$num="";for($i=0;$i<10;++$i){$num.=rand(100,999);}echo sha1($num)."\n";'
Security.cipherSeedとは暗号化・複合化のシードとなるランダムな数値である.
同様に以下のコマンドを入力すると生成される.
php -r '$num="";for($i=0;$i<10;++$i){$num.=rand(100,999);}echo $num."\n";'
生成方法はこちらを参考させて頂きました.
http://blog.shiten.info/2013/03/cakephp-security-salt-%E3%81%A8-security-cipherseed-%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B.html
4−3)CacheEngine.phpの編集
# vi ~/lib/Cake/Cache/CacheEngine.php
以下の場所にdata_default_timezone_set('Asia/Tokyo');を追加する
public function init ($settings = array()) { ... if (!is_numeric($this->settings['duration'])) { data_default_timezone_set('Asia/Tokyo'); .... }
以上の設定を行い、ブラウザ上で再度確認すると以下の様な表示がされる.
以上が簡単なCakePHPの環境構築になります.
MySQLデータベースの移行&CakePHPの外部DBサーバアクセス
研究用で使用しているデータベースを移行させました.
そのときの手順のメモです.
【やりたいこと】
[移行前]
移行元サーバ=WEBサーバ+DBサーバ
[移行後]
移行元サーバ=WEBサーバ
移行先サーバ=DBサーバ
【環境】
CentOS 6.5
MySQL 5.1
CakePHP 2.5
【手順】
1)バックアップファイルの作成
移行元のDBサーバにて以下を実行する.
# mysqldump -q [データベース名] -p[パスワード] > [バックアップファイル名]
2)バックアップファイルを移行先のサーバに送信
今回はsftpを使用した.
# sftp [移行先のユーザ名]@[移行先サーバのIPアドレス]
簡単な操作の説明
移行前のサーバを操作するコマンド
・lls
・lcd
移行先のサーバを操作するコマンド
・ls
・cd
バックアップファイルを移行先のサーバに移動させる.
> put [バックアップファイル名]
3)移行先のサーバに接続
sshでの接続.移行元のサーバにて以下のコマンドを実行
# ssh [ユーザ名]@[IPアドレス]
必要に応じてパスワードを入力
4)移行先のデータベース(MySQL)の設定
MySQLにログインする.
# mysql -u [ユーザ名] -p[パスワード]
移行先のデータベースに新たなユーザを追加する.
mysql> GRANT ALL PRIVILEGES ON *.* TO [ユーザー名]@localhost IDENTIFIED BY '[パスワード]' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
データベースを作成する.
mysql> CREATE DATABASE データベース名 CHARACTER SET utf8;
4)データベースの移行
以下を実行させる.
# mysql -p[パスワード] [新たなデータベース名] < [バックファイル名]
[新たなデータベース名]には先ほど作成したデータベース名が入る.
5)外部から接続するユーザの設定
新たに作成(移行先)のデータベースに接続可能なユーザを作成する.
mysql > grant all privileges on sta_macaddr_webcam.* to cap@192.168.95.160 identified by ‘capcapcap’; mysql > flush privileges;
6)ファイアウォールの設定
# vi /etc/sysconfig/iptables
以下を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
3306はmysql用のポート
移行元サーバから以下を実行して接続出来るか確認する.
# mysql -h [移行先サーバのIPアドレス] -u [ユーザ名] -p[パスワード]
これで接続出来なかったらなんらかのミスがあるかと,
7)移行先DBサーバに接続させるためのCakePHPの設定
# vi ~/app/Config/database.php
/app/Config/database.phpを編集、内容は以下のようにする.
class DATABASE_CONFIG { public $default = array( ‘datasource’ => ‘Database/Mysql’, ‘persistent’ => false, ‘host’ => ‘192.168.95.240’, ‘port’ => ‘3306’, // mysql用のポート ‘login’ => ‘cap’, ‘password’ => ‘capcapcap’, ‘database’ => ‘sta_macaddr_webcam’, ‘prefix’ => ‘’, ‘encoding’ => ‘utf8’, ); }
これでCakePHPのアプリで移行先のDBサーバにアクセス出来るようになります.
CentOS6.5へのVNC導入&Macからのリモートログイン
開発環境を整える際に必要になったので,簡単なメモ
【環境】
・CentOS 6.5 (サーバ)
・Mac OS X 10.9.5 (クライアント)
1)サーバ側
# yum -y install tigervnc-server
コンフィグファイルを書き換える
# vi /etc/sysconfig/vncservers
最後の2行のコメントアウトを外し,以下のように設定する
VNCSERVERS="2:hoge(個人用ユーザ)" VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp"
個人ユーザでvncパスワードを設定
# su - hoge $ vncpasswd
# service vncserver status Xvnc は停止しています # service vncserver start VNCサーバー を起動中: 2:hoge xauth: creating new authority file /home/hoge/.Xauthority
以下を編集
# vim /home/hoge/.vnc/xstartup
最終行をコメントアウトし、1行追加する
#twm & exec gnome-session
ポート5901で起動
# vncserver :1
iptablesを編集する
# vi /etc/sysconfig/iptables
以下を追加する
-A INPUT -p udp --dport 5353 -j ACCEPT -A INPUT -p tcp --dport 5901 -j ACCEPT
iptablesを再起動する
# /etc/rc.d/init.d/iptables restart
2)クライアント側
左上のリンゴマーク→システム環境設定→共有→画面共有
アクセスを許可する
Finderを起動
上に表示されるバーの「移動」→サーバに接続
ここで表示される画面にサーバアドレスとして
vnc://[サーバのIPアドレス]:5901
を入力して、接続
パスワードを問われるため、先ほどサーバ側で入力したパスワードを入力してやる
【参考記事】
・http://hosii.net/?p=109
・MacでLinuxサーバーと画面共有を行う - saito’s blog
複数Formボタンの設置と判別【CakePHP2.5】
CakePHPを使用して1つのビューに複数のFormボタンを設置することがありました
その際のコントローラ側での判別方法です
以下の記事ではCakePHP1.3と2.0での判別方法を紹介しているようですが、CakePHP2.5では仕様が変わっているようでした
CakePHP2.0でsubmitを2つ使いたい - ぶろぐ
1)ビュー側での設定
ビュー側では以下のように、各Fromボタンにlabelとnameを設定する必要があります
今回はlabelにtest、nameにhogeという名前をつけています
<?php $options = array( 'label' => 'test', // ボタンに表示される名前 'class' => 'ボタンのクラス', 'name' => 'hoge' ); echo $this->From->end($options); ?>
2)コントローラ側での判別
コントローラ側では、postされた際にそのデータが、
$this->request->data
に格納されるのですが、ボタンに与えられた名前もこの中に含まれます
具体的には、
$this->request->data['hoge']
に、testという値が格納されています
これを使用して、コントローラ側で押されたボタンを判別することが可能です
以上が、複数Formボタンの設置と判別方法になります
MySQLへの日本語入力(文字化け対応)【MySQL 5.1】
MySQLで日本語の文字化け問題で詰まってしまったためメモ
具体的には、insertで日本語を入力する際に文字化けしてしまうというもの
環境はMySQLが5.1、サーバはCentOS release 6.5 (final)を使用しています
MySQLの文字コードの確認をします
ログインした後、以下を実行
mysql> show variables like 'char%';
私の場合、このようになっていました
Variable_name Value character_set_client latin1 character_set_connection latin1 character_set_database latin1 character_set_filesystem binary character_set_results latin1 character_set_server latin1 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/
まず、my.cnfの設定
以下のコマンドでmy.cnfを書き換えます
# vi /etc/my.cnf
書き換える内容は以下です
[mysqld]の部分
character-set-server = utf8
これで
character_set_database utf8 character_set_server utf8
となります
[mysql]の部分(ない場合は書き加えます)
default-character-set = utf8
これで
character_set_client utf8 character_set_connection utf8 character_set_results utf8
となります
以上の変更を加えて一度再起動します
# /etc/init.d/mysqld restart
次にデータベースとテーブルの文字コードを変更します
mysqlにログインした後、以下でデータベースの文字コードを行えます
mysql> alter database [データベース名] character set utf8;
テーブルの文字コードの変換は以下のコマンドです
mysql> alter table [テーブル名] charset = utf8;
以上が、MySQLの日本語文字化けへの対応になります
画像上でクリックした座標の値を取得する【CakePHP jQuery】
ページ上に表示した画像のクリックした部分の座標を取得する方法です
【環境】
・CakePHP2.5
・jquery-1.10.1
まずはビューの説明から
ビューには画像を表示させるのと、取得した座標を入力するフォームを作成します
<?php echo $this->Html->image('画像名', array('id' => 'image', 'alt' => '画像名')); ?> <?php echo $this->Form->create(false, array('type' => 'post', 'action' => '遷移先のページ')); ?> <fieldset> <?php echo $this->Form->input('dimension.x', array('id' => 'pos_x')); ?> <?php echo $this->Form->input('dimension.y', array('id' => 'pos_y')); ?> </fieldset> <?php $options = array('label' => '登録'); echo $this->Form->end($options); ?>
最初にidをimageで画像を表示させています
2行目からはフォームを作成しており、xの値を格納するinputにはidとしてpos_xを、同様にyの値を格納するinputにはidとしてpos_yを振っています
postされた際には['dimension']['x']にxの値が格納されるという風にしています
次にjqueryの説明です
この部分は以下のブログを参考にさせて頂きました
http://piro-suke.hatenablog.com/entry/20070726/1185435069
http://piro-suke.hatenablog.com/entry/20070726/1185435069
$(function() { $('#image').on("click", function(e) { if (document.all) { rel_x = e.offsetX; rel_y = e.offsetY; } else { rel_x = e.pageX - $('#image').offset()["left"]; rel_y = e.pageY - $('#image').offset()["top"]; } $('input#pos_x').val(rel_x); $('input#pos_y').val(rel_y); }); });
コードの説明自体はブログの方を見て頂ければ良いのですが、自分の知識不足で$('input#pos_x').text(rel_x)としてしまっていて、取得した値がフォーム内に表示されないことに悩まされました
きちんと$('input#pos_x').val(rel_x)としてください
http://webhako.net/jquery/textbox-set-value/
以上が、画像上のクリックした座標を取得する方法でした
セレクトボックスで選択されている値の取得【CakePHP 2.5 select box】
セレクトボックスで選択している値の取得についてです
例のごとく、CakePHP2.5で実装しています
送信ボタンでPOSTするというのは比較的簡単に実装出来るのですが、「セレクトボックスにて現在選択されている値を取得する」というので詰まったのでメモしました
きれいではないのですが、一応目的としていた動作はしました
1)セレクトボックスの実装
まずはビューファイルにて以下を記載
セレクトボックスの値が変更されたときに値を送信するために「onchange」を記載します
<?php echo $this->Form->create(false, array( 'type' => 'post', )); ?> <fieldset> <?php echo $this->Form->input('test', array( 'type' => 'select', 'options' => $datas, 'onchange' => 'submit(this.form)' )); ?> </fieldset>
2)コントローラで変更された値を受け取る
コントローラでは以下のように記載しました
function test() { if ($this->request->is('post')) { $data = $this->request->data; } }
これでセレクトボックスで変更された値が$dataの中に格納されます
取得した値をビューに受け渡せば完了です
簡単ですが、以上がCakePHPにおいてセレクトボックスで選択されている値の取得方法になります