CakePHPの設定いろいろ

お久しぶりです。
かなり間が空きましたが、ちょっと再開します。

インストール

まずインストールですが、下のサイトから。
CakePHP: the rapid development php framework. Pages
こちらの右上のダウンロードのロゴクリックでzipをダウンロード。
解凍して、httpのディレクトリに置きます。

権限付与

cakephpの配下の/app/tmpに実行権限などの権限を付与します。
下記コマンドで

sudo chown -R apache cakephp/app/tmp/

設定いろいろ

こっからちょっとめんどくさかったんですが、まずcakephpのサイトにアクセスします。
cakephpをインストールしたサーバのURLをブラウザに入力。
例えば、192.168.33.10/cakephpって感じで入力。cakephpの部分はcakephpのディレクトリ名になります。
そしたらサイトが表示されますが、cssが反映されていないようなあっさりした画面になってました。
なのでそれをまず解決する。


まずhttpd.confというファイルに下記の記述を追記する。

LoadModule rewrite_module modules/mod_rewrite.so

ちなみにhttpd.confは/etc/httpd/confにありました。

そして下記の記述をさらに追記

<Directory "【CakePHPのパス】">
AllowOverride All
</Directory>

これでOK。

っていうのをここのサイトさんで書いてました。
CakePHP2を学ぼう!優しいCakePHP超入門!スクリーンショット多め – WebCake

これできれいなページになります。


で次は、debagkit入れろやみたいなメッセージが出てるので入れます。

cakephp/debug_kit · GitHub

ここのサイトの右下のDownload ZIP ていうボタンをクリックしてZIPファイルをダウンロードします。
それをcakephpのファルダ配下のapp/pluginの中に入れます。

んで、app/Config/bootstrap.phpを以下のように修正。

//下のコメントを外す。

  CakePlugin::loadAll(); // Loads all plugins at once
  CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit

んでapp/Controller/AppController.phpを以下のように修正。

class AppController extends Controller {
	var $components = array('DebugKit.Toolbar');  //この行を追加
}

ていうのがこっちのサイトさんに。
【CakePHP2.3】必須プラグイン(DebugKit) : 脱落エンジニアの奮闘日誌

これでdebagkitはオッケー!


次はデータベースの設定。
こっちはドットインストール見ながらやったので割愛。


ほんでdebagkit入れたら変なエラーが2つでるので、それを対応。
/app/config/core.phpの以下の箇所をランダムな文字列に変更する。

Configure::write('Security.salt', 'ここをランダムな半角英数文字列に変更する');
Configure::write('Security.cipherSeed', 'ランダムな半角英数文字列に変更する');

っていうのがこっちのサイトさんに書いてます。
[cakePHP]インストールしたらNotice (1024)が出た。 | げことじ。


これでひと通りはオッケーかな。
またなんか設定することがあったら追記します。

待ち行列理論 ~利用率とかその辺のやつ~

前回の続きします。
待ち行列理論の話です。

ちょっとおさらいですが、待ち行列理論には主に以下の用語が出てきます。

  • ケンドールの記法
  • 平均到着率(λ)
  • 平均処理率(μ)
  • 利用率(ρ)
  • 平均サービス時間
  • 平均待ち時間
  • 平均応答時間

で、最初のケンドール記法については前回まとましたので、その次から。

平均到着率とは何か?ですが、前回コンビニで例えたと思うので、今回もコンビニで例えます。
コンビニで言うと、単位時間当たりにレジに何人お客さんが来るか、ってことです。
例えば、あるコンビニでは1時間あたりに平均で6人ぐらいお客さん来ます、としたら6/時間で、0.1/分って数値です。


つづいて平均処理率ですが、これもコンビニで例えましょう。ってか、全部コンビニで例えます。
これは単位時間あたりにレジが何人のお客さんをさばけるか、ってことです。
1分間で4人のお客さんをさばけるなら、平均処理率4人/分になります。
で、このついでに平均サービス時間の話をしておきます。平均サービス時間は一人のお客さんをどれぐらいの時間でさばけるか、ってことです。
上の例えで、平均処理率4人/分ならば、1分÷4人で15秒。1人のお客さんを15秒でさばけるので、平均サービス時間は15秒です。


では次、利用率についての説明です。このへんから少し難しくなってきます。
結果から言うと、利用率平均到着率÷平均処理率で求められるのですが、これだとちょっとイメージ湧かないので、ちょっと掘り下げます。

上の式よりイメージが湧く式は平均サービス時間÷平均到着間隔です。
平均到着間隔をリストに挙げるの忘れてましたが、こちらも待ち行列理論の用語です。
これは、平均到着率が3人/分とすると、平均到着間隔20秒になります。1分に3人来るってことは20秒に1人お客さんが来るってことだよね、って考え方です。

で、利用率の話に戻りますが、平均到着間隔20秒で、平均サービス時間15秒だったとき、レジの利用率は15÷20で0.75です。20秒に1人お客さんが来て、15秒でさばけたとき、次のお客さんが来るまで5秒余りますよね。ということは1分のうち、お客さんを相手してる時間は45秒です。45秒は60秒の75%ですので、1分のうちに75%レジが利用されているということです。
こんな感じ。ちょっとややこい。


残るは平均待ち時間平均応答時間ですが、長くなってきたので次回に。
では。

情報技術者試験編!~待ち行列理論~

どうもキットです。
昨日、cakePHPをやっていきますと高らかに宣言しましたが、撤回します。
情報技術者試験の勉強をやっていかないと本気でやばいことに気づきました。

ということで、今日からはドットインスール編を一時休止し、情報技術者試験編に突入していきます!

さて、さっそくですが今日は応用情報のテキストを読んでおりました。
Amazon.co.jp: 情報処理教科書 応用情報技術者 2014年版 (EXAMPRESS): 日高 哲郎: 本
f:id:bird_cage313:20140304220307j:plain
これですね。

この本で勉強しておりました。
コンピュータの基礎知識のところを読んでたんですが、この本、個人的にはちょっとわかりにくいかなー。
待ち行列理論とかいっつも混乱するんですが、この本サラッと公式しか書いてないんですよね。
公式覚えるのも大切なんですが、なんでそうゆう公式になるのか、っていう概念というか、背景がわかってないと覚えにくいし応用も効かないと思うんですが。

こちらのサイト様がわかりやすく書いていただいてたのですが
待ち行列理論(M/M/1モデル)がようやく分かった(情報処理技術者試験レベルで) - pmekyky385の日記


ます、待ち行列理論で出てくる用語を整理しましょう。

  • ケンドールの記法
  • 平均到着率(λ)
  • 平均処理率(μ)
  • 利用率(ρ)
  • 平均サービス時間
  • 平均待ち時間

まあこれだけありまして、さらにケンドールの記法では下記の単語もでてきます。

  • サービス要求の発生頻度分布
  • サービス時間分布
  • サービス窓口の数

ではまずケンドールの記法から見ていきます。
これはどんなものかっていうと、M/M/1とかって表記されるようなやつなんですが、

最初のMがサービス要求の発生頻度分布
次のMがサービス時間分布
最後の1がサービス窓口の数

です。

待ち行列理論をコンビニで例えてみますと、
サービス窓口の数っていうのがレジの数です。1個って少ないですねー。
で、サービス時間分布っていうのは1回の処理時間の分布です。Mっていうのはランダムですよってことなんですが、
コンビニでいうと1人のお客さんにかかるレジの時間はランダムですってことです。全てのお客さんを1分でこなせます!って言えないですもんね。レジに持ってくる商品の量もわからないのに。それと同じでサーバーでも1回でどれぐらいの処理要求があるかわからないので、大抵ランダムだと思います。
んで、サービス要求の発生頻度分布がコンビニでいうとお客さんがレジに来る頻度です。こちらもMはランダムですってことです。
1時間でお客さんが20人絶対来ます!とはいえなくて、1時間で5人来るか、10人来るかわかりませんよ、ってのがランダムってことです。

ケンドールの記法は基本はこのM/M/1を覚えときゃいいかな、って思ってます。

ちょっと長くなってきたので、続きは次回やります。

プリペアステートメント

キットです。
ようやくPHP応用編が終わりました。
最近ちょっとサボり気味だったので今日は結構頑張りました。

ドットインストールで学んだことはPHPでもクラスは使えるってことと、prepareステートメントです。
このprepareステートメントjavaで使ったことあったのですんなり入ってきました。

prepareステートメントの説明はこちらに詳しく書いていただいてます。
PHP: プリペアドステートメントおよびストアドプロシージャ - Manual

アプリケーションで明示的にプリペアドステートメントを使用するように すれば、SQL インジェクションは決して発生しません (しかし、もし信頼できない入力をもとにクエリの他の部分を構築している のならば、その部分に対するリスクを負うことになります)。

prepareステートメントを使用すればSQLインジェクション攻撃の対策になるようです。

具体的な使い方として

$stmt = $dbh->prepare("insert into user (name,email,password) values(:name,:email,:password)");
$stmt->execute(array(":name"=>"n2","email"=>"e2","password"=>"p2"));

INSERTするときに値を:nameなどにしておいて、あとから":name"=>"n2"という書き方で"n2"という値に書き換えて、実行するイメージなのかな。
結果、name列には"n2"という値が入るというわけでした。

では、次回はcakePHPをやっていきます!

勉強できなかったです

お疲れ様です。キットです。

今日はあんまり勉強できなかったです。
てか、そろそろ応用情報の勉強していかないとさすがにまずいかな…。

ちょっとずつ本を読んでるんですが、なかなか進まないんですよねー。
それよりPHP早く進めたい気持ちが強くて。

明日は時間作れそうだからガッツリやるかな。
今日はなにもやってないので、特になしです。

では。

あきらめた

久しぶりです。キットです。

なぜ今回こんなに空いてしまったかというと、前回からやっているPostgreSQLPDOドライバをインストールしようとして
四苦八苦してたんです。


結果、タイトル通りですがあきらめました。
全然わからん!必死になって調べたんですが、まったくわかりませんでした!
インストールできたように見えてできてなかったのか、そのあとの設定でなにか必要なのか、
とにかくさっぱりわからないんです・・・。


結果


もうMySQLでやってしまおうと。



phpinfo()でMySQLのドライバが入ってることは確認してるので、なにも設定しなくてもいけるでしょ。
これで無理だったもうやめる!ぐらいの勢いでMySQLを起動し、適当にテーブルを作成。

pdoでDBに接続を試みる。

try {
	$dbh = new PDO('mysql:host=localhost;dbname=blog_app','ユーザー名','パスワード');
} catch (PDOException $e){
	var_dump($e->getMessage());
	exit;
}

echo "OK!";

$dbh = null;

そしてブラウザで表示
f:id:bird_cage313:20140226220902p:plain

できたーー!!
とりあえずMySQLでできました!

しかしPostgreSQLの設定がほんとわかんない…。
まあこれ以上悩んでてもモチベーション下がりっぱなしで続かないので、MySQLでやっていこうと思います。
誰かなんかわかる方がいたら助けてください。

では、やっとPDOでデータベースに接続できたので、次回からPHP応用編を進めていきたいと思います。
そういや、これで悩んでる間に気づいたらドットインストールのデザインが変わってました。

では!

続・PDOドライバのインストールがわからん

昨日の続きですー。

checking for pg_config... not found
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
ERROR: `/var/tmp/PDO_PGSQL/configure' failed

このエラーでつまづいてたんですが、ここは解決しました!

上記のエラーではpg_configが見つからないよって怒られてたっぽいんですが、ここのサイトで解決しました。
yumでPostgreSQLをインストールしてみよう — Let's Postgres

postgresql-develというのをインストール!

sudo yum -y install postgresql-devel

これでもう一度

pecl install pdo_pgsql

すると・・・

/var/tmp/PDO_PGSQL/pdo_pgsql.c:22:20: error: config.h: No such file or directory
make: *** [pdo_pgsql.lo] Error 1
ERROR: `make' failed

通ったけど…、通ったけどまた別のエラーが…。

なんかmakeってので落ちてるらしい。

とりあえずmakeってなんだって調べた結果がこちら
「./configure」、「make」、「make install」の意味 - PukiWiki

ソースファイルをコンパイルするらしい。意味わからん。
ただ、わかったのはずっとぼくが失敗してるpecl install pdo_pgsqlはここのサイトの一連の流れを実行してるっぽい。さっきまでハマってたconfigureもそうだしね。

どうしようといろんなサイトを見てみると
PDOのドライバーインストール - PHP::PEAR - dozo PukiWiki

こんなことが書いてありました。

実はpecl installではすんなり入ってくれない場合が多い。
理由はmysqlのパスが通っていないからだ。
その場合はコンパイルでインストールする

ふむ。では手動でやろう。

$ pecl download pdo_pgsql
$ tar xvfz PDO_PGSQL-1.0.2.tgz
$ cd ./PDO_PGSQL-1.0.2
$ phpize
$ ./configure --with-pdo-pgsql=/usr/pgsql-9.3/bin
$ make
# make install

あ、ちなみに前回わからなかったpostgresqlのディレクトリは/usr/pgsql-9.3ってことがわかりました。

./configure --with-pdo-pgsql=/usr/pgsql-9.3/bin

ここで指定してるパスはpg_configがあるパスです。

Build complete.
Don't forget to run 'make test'.

よっしゃーー!いけたっぽい?いけたっぽい?
phpinfoで確認!
PHP情報の確認方法 – phpinfoの使い方。 | btmup Blog

すると
f:id:bird_cage313:20140222003450p:plain

入ってないっぽい…。
で今気づいたんだけどmysqlsqliteはすでに入ってるっぽいね。
もう挫折してmysql使おっかな…。

んー、もうちょっと調べてみます。
では今日はこの辺で。