Help us understand the problem. What is going on with this article?

CakePHP ver 2.x の環境構築を行った際のメモ

More than 3 years have passed since last update.

Welcome

はじめに

バイトでCakePHPで作られたシステムの保守をすることになり、環境構築する際にやったことや躓いたところを記録しました。
初心者なので許してください。

CakePHP

CakePHPはオープンソースで開発されたPHP用のフレームワークです
必要なものはWeb ServerとCakePHPのみでWeb Serverにそのままアップロードすれば使えるようになる
Ruby on Railsの影響を強く受けていて、Webアプリケーションを高速に開発するための技術が多く入っている
Apacheで動かすことを想定しているが、lighttpdやMicrosoft IISのようなWeb Serverでも動かすことは可能

システム要件

HTTPサーバ
PHP 5.3.0以上
データベース(必要な人のみ)
 MySQL(4以上)
 PostgreSQL
 Microsft SQL Server
 SQLite

利点:

習得がとても容易
エラーがとても親切
日本語の資料が豊富

CakePHPメモ

CakePHPではテーブル名とフィールド名にも意味がある。
データベースの命名規則とクラスの命名規則に従っておくと勝手にやってくれる。

[posts]というテーブル名にしておくと、自動的にPostモデルが呼び出され[modified][created]というフィールドがあると、自動的にCakePHPが管理するようになる。

モデル(Model)

Postという名前にするとCakePHPは自動的に、このモデルはPostsControllerで使用されるのだろうと考えます。
そして、postsという名前のデータベーステーブルと結びつけられます。
モデルはapp/Modelの中に入れる

コントローラ(Controller)

投稿記事とやりとりするためのビジネスロジックが入るところ
幾つかのモデルとやりとりし、投稿記事に関連する作業を行う場所
コントローラはapp/Controllerの中に入れる

「routes」という機能を使って、URLとコードを結びつけることができる。

ビュー(View)

アプリケーションのレイアウトの内側にはめ込まれる、データ表示用の断片部品です。
たいていの場合はPHPのコードが含まれるHTMLになりますが、XML、CSV、バイナリのデータにもなりえます。
ビューはapp/Viewの中にコントローラ名に対応するフォルダの中に保存

CTPファイル

PHPによるWebアプリケーションフレームワークの一つであるCakePHPで、ビューを保存するためのファイル形式。

権限の確認

app/tmpディレクトリとサブディレクトリは、Web Serverとコマンドラインユーザの両方で書き込みが可能な権限が必要なことがある

CakePHPのデフォルトページにCSSや画像がちゃんと適用されていない

/private/etc/apache2/httpd.conf
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

上記を有効にする

上記を有効にしてInternal Server Error500や有効にしないとnot foundが出た場合

http://localhost/cake/posts
mod_rewrite.soを有効にして上記のURLを踏みInternal Server Error500
mod_rewrite.soを有効せず上記のURLを踏みnot found
この場合は、CakePHPフォルダの中に間違った権限を与えると起こってしまう

$ chow -R _www app/tmp

のような正しい場所に適切な権限を与えないと上のような状態になってしまう
(_wwwは<?php echo exec('whoami'); ?>で確認した)

CakePHPのデフォルトページで出たエラーや警告

デフォルトタイムゾーンのエラー→CakePHPのダウンロードとインストール
Security.salt,Security.cipherSeedのエラー(Notice(1024)→CakePHPのダウンロードとインストール
database.phpに関するエラー→database.phpの作成とデータベースの用意
NrQueryErrorAffectedNum. rowsTook (ms)→CakePHPインストール※失敗
                   →1.2系下に出るクエリ情報を消すAdd Star※成功
CSSや画像がうまく適応されていない→http://book.cakephp.org/2.0/ja/installation/url-rewriting.html

参考サイト

CakePHP のフォルダ構造
MVC(Model-View-Controller)を理解する

cakephp a database connection using mysql was missing or unable to connect

http://localhost/cakephp/postsにアクセスした際に出たエラー
cakephp 【DB接続エラー】
localhostを127.0.0.1に変更しただけで解決しました。

MacでのApache

Macでは標準でapacheがインストールされている。
apacheの起動

$ sudo apachectl start

設定ファイルの場所

/private/etc/apache2/httpd.conf

作業フォルダの変更

/private/etc/apache2/httpd.conf
DocumentRoot "/Library/WebServer/Documents"
↓
DocumentRoot "自分が作業したいフォルダのパス"

<Directory "/Library/WebServer/Documents">
↓
<Directory "自分が作業したいフォルダのパス"

困ったとき

$ sudo apachectl configtest

configtestは設定ファイルである[httpd.conf]に文法が間違っていないかチェックしてくれる

httpd.confで躓いたこと

 VirtualHostが勝手に想定ではないルーティングをしていて、うまくいかないことがあった
 

ApacheでPHPを有効にする

index.htmlなどは返してくれるんだが、wordpressやCakePHPを入れたとき、階層が表示されたりする場合はPHPが有効になっていない可能性が高い。
ApacheでPHPが有効になっているか、確認する部分は3つある

/private/etc/apache2/httpd.conf
#LoadModule php5_module libexec/apache2/libphp5.so
↓
LoadModule php5_module libexec/apache2/libphp5.so

#Include /private/etc/apache2/extra/httpd-userdir.conf
↓
Include /private/etc/apache2/extra/httpd-userdir.conf

#Include /private/etc/apache2/other/*.conf
↓
Include /private/etc/apache2/other/*.conf

下の2つは既に有効になっている可能性が高いが、誰かにいじられたり、
自分がいじったりして、無効になっている場合もある

参考サイト

apacheを使ってローカルサーバーを構築する方法

MacにMySQLのインストール

Homebrewのインストール

Homebrew公式サイト
以下のコマンドを実行

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brewコマンドを利用してmysqlをインストール

以下のコマンドを実行

$ brew install mysql

brew install mysqlで出たエラー

エラー1

Error: Cannot write to /usr/local/Cellar

/usr/local/Cellarの権限がないというエラーでsudoをつけてもダメみたい。
解決策はCellarに今使ってるユーザが書き込める権限を与える
Macでbrew installをしたらPermissionで怒られた時の対処(簡易的に)

$ sudo chown -R ユーザ名 /usr/local/Cellar

MySQLを起動

$ mysql.server start

mysql.server startで出たエラー

エラー1

$ ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザ名.local.pid)

ログファイルの所有権が悪さをしているらしい。
解決策はユーザ名.local.errに権限を与えてあげれば良い
MySQLが起動しないエラー(The server quit without updating PID file)

$ sudo chown username /usr/local/var/mysql/ユーザ名.local.err
$ mysql.server restart

参考サイト

MacにMySQLをインストールして触ってみる

MySQLとPHPをつなげる

MySQLとPHPを繋げるには、php.iniを修正する。
フレームワークによってはPDOを利用するので、PDOを利用できる設定も必要

php.iniの設定

MySQLのsocketを確認する

$ mysql -u root -p
mysql> status

上記のコマンドによりUNIX socket:を確認する
通常だと UNIX socket: /tmp/mysql.sock

/etc/php.ini.default を /etc/php.ini という名前でコピーする

php.ini
pdo_mysql.default_socket = 

pdo_mysql.default_socket = /tmp/mysql.sock

mysql.default_socket = 

mysql.default_socket = /tmp/mysql.sock

mysqli.default_socket =

mysqli.default_socket = /tmp/mysql.sock

参考サイト

Yosemite(Mac OS X 10.10)PHPの設定

PDOを利用できるようにする

;extension=php_mysql.dll
↓
extension=php_mysql.dll

;extension=php_pdo_mysql.dll
↓
extension=php_pdo_mysql.dll

※;はコメントアウトです

参考サイト

MacでMySQL
database.phpの作成とデータベースの用意はCakePHPでエラーの理由を発見できた理由

MacでHomebrewを使ってMySQLをインストールした場合の完全削除

Mac OS X El CapitanでMySQLをクリーンインストールする
mac OS XにHomeBrewでmysqlインストール。からの設定(mysql_install_db、mysql_secure_installation、my.cnf)やらアンインストールやら

MySQLのエラー

QLSTATE[HY000] [1524] Plugin '*0B025000DCF68B1D374153A7005639E320D41D5B' is not loaded

$ mysql -u ユーザ名 -p
QLSTATE[HY000] [1524] Plugin '*0B025000DCF68B1D374153A7005639E320D41D5B' is not loaded

最近のMySQLではpluginにデフォルトでmysql_native_passwordという値が入るのだが、ユーザを作るときに設定しなかったり、変な値を入れてしまうと上記のエラーが起こってしまう。
OS X上でのMySQLのエラー(plugin is not loaded)について

mysql> SELECT user, host, password, plugin FROM mysql.user where='ユーザ名';
+-----------+-----------+-------------------------------------------+
| user      | host      | plugin                                    |
+-----------+-----------+-------------------------------------------+
| root      | localhost | mysql_native_password                     |
| mysql.sys | localhost | mysql_native_password            |
| Kurowasi  | localhost | *0B025000DCF68B1D374153A7005639E320D41D5B |
+-----------+-----------+-------------------------------------------+

上記のようにpluginに変な値が入っていたらデフォルトに戻してあげるとエラーが発生しなくなる。

mysql> UPDATE mysql.user SET plugin='mysql_native_password' WHERE user='test';

SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)

$ mysql -u ユーザ名 -p
SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)

ログイン時にパスワードが存在していない、あるいは間違っているか
ユーザが存在していない、あるいは間違っている可能性がある。
パスワード関係の権限問題の可能性もあるそうです。
MySQLのユーザー作成でハマったこと解決策メモ。
接続失敗時のエラー表示

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

mysqlソケットエラー解決法

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした