!!!¥¤¥ó¥¹¥È¡¼¥ë¤ÈÀßÄê
!!apache¤Î¾ì¹ç
http://doruby.kbmj.com/hanafubuki_on_rails/20080227/Rails_CakePHP_
!ɬÍפʴĶ
¡¦PHP4.3.2°Ê¾å¡¢¤¢¤ë¤¤¤ÏPHP5°Ê¾å¤¬Æ°ºî¤¹¤ë¥µ¡¼¥Ð
!¥¤¥ó¥¹¥È¡¼¥ë
¥À¥¦¥ó¥í¡¼¥É¤·¤Æ²òÅह¤ë¤À¤±
!URL¤Èmod_rewite¤ÎÀßÄê
mod_rewrite¤ÎÀßÄê¤Ï¡¢
/cake /.htaccess
/cake /app /.htaccess
/cake /app /webroot /.htaccess
¤Î3¤Ä¤Î.htaccess¥Õ¥¡¥¤¥ë¤Ç¹Ô¤ï¤ì¤Æ¤¤¤Þ¤¹¡£
¤½¤·¤Æ¡¢mod_rewrite¤òÍøÍѤǤ¤ë´Ä¶¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤ÊURL¤¬ÍѤ¤¤é¤ì¤Þ¤¹¡£
http://ÀßÃÖURL / ¥³¥ó¥È¥í¡¼¥é / ¥á¥½¥Ã¥É / ¥Ñ¥é¥á¡¼¥¿1 / ¥Ñ¥é¥á¡¼¥¿2 /...
Î㤨¤Ð¡¢
http://doruby.kbmj.com / members / regist / 3
¤È¤¤¤¦URL¤Î¾ì¹ç¡¢
members_controller.php ¤ÎÃæ¤Îregist() ¥á¥½¥Ã¥É¤Ë°ú¿ô¡Ö3¡×¤òÆþ¤ì¤Æ¼Â¹Ô¤¹¤ë
¤È¤¤¤¦°ÕÌ£¤Ë¤Ê¤ê¡¢¼ÂºÝ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Ï¡¢
¥³¥ó¥È¥í¡¼¥é¡§ /cake /app /controllers /members_controller.php
¥Æ¥ó¥×¥ì¡¼¥È¡§ /cake /app /views /regist.thtml
¤È¤Ê¤ê¤Þ¤¹¡£
´Ä¶¤Ë¤è¤Ã¤Æ¤Ï.htaccess ¤Ë RewriteBase ¤òÄɲ䷤ʤ¤¤Èư¤«¤Ê¤¤¡£
/blog/.htaccess
RewriteEngine on
RewriteBase /blog
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
/blog/app/.htaccess
RewriteEngine on
RewriteBase /blog/app
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
/blog/app/webroot/.htaccess
RewriteEngine On
RewriteBase /blog/app/webroot
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
!mod_rewrite¤¬»È¤¨¤Ê¤¤¾ì¹ç
mod_rewrite¤¬ÍøÍѤǤ¤Ê¤¤¾ì¹ç¤Ï¡¢°Ê²¼¤Î3¤Ä¤Îºî¶È¤¬É¬Íפˤʤê¤Þ¤¹¡£
¡core.php¤Î½¤Àµ
/cake /app /config /core.php
¤Î°Ê²¼¤Î¥³¥á¥ó¥È¤ò³°¤·¤Æ¤¯¤À¤µ¤¤¡£
AllowOverride FileInfo
:php.ini.patch:
878c878
< ;date.timezone =
---
> date.timezone = "Asia/Tokyo"
!Nginx¤ò»È¤¦¾ì¹ç
:¥Ç¥£¥ì¥¯¥È¥ê¹½À®:
.
¨§¨¡¨¡ docker-compose.yml
¨§¨¡¨¡ Dockerfile
¨§¨¡¨¡ cakephp.conf
¨§¨¡¨¡ nginx.repo
¨§¨¡¨¡ php.ini.patch
¨§¨¡¨¡ www.conf.patch
¨¦¨¡¨¡ src
¨¦¨¡¨¡ cakephp <- CakePHPËÜÂÎ
:docker-compose.yml:
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
# user: "1000:1000"
volumes:
- ./src:/var/www/html
ports:
- 1080:80
command:
bash -c "php-fpm & /usr/sbin/nginx -g 'daemon off;'"
:Dockerfile:
From centos:7
RUN echo "RUN¤Ïbuild»þ¤Ë¼Â¹Ô"
COPY nginx.repo /etc/yum.repos.d/
RUN yum -y install php
RUN yum -y install nginx
RUN yum -y install php-fpm
RUN yum -y install patch
RUN mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf_back
COPY cakephp.conf /etc/nginx/conf.d/
COPY www.conf.patch /tmp
RUN patch /etc/php-fpm.d/www.conf < /tmp/www.conf.patch
COPY php.ini.patch /tmp
RUN patch /etc/php.ini < /tmp/php.ini.patch
COPY php-fpm.conf.patch /tmp
RUN patch /etc/php-fpm.conf < /tmp/php-fpm.conf.patch
COPY docker.conf /etc/php-fpm.d
CMD echo "CMD¤Ïrun»þ¤Ë¼Â¹Ô"
:cakephp.conf (nginx¤ÎÀßÄê¥Õ¥¡¥¤¥ë):
server {
listen 80;
root /var/www/html/;
error_log /dev/stdout info;
access_log /dev/stdout;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
:nginx.repo:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
:php.ini.patch:
878c878
< ;date.timezone =
---
> date.timezone = "Asia/Tokyo"
:www.conf.patch:
39c39
< user = apache
---
> user = nginx
41c41
< group = apache
---
> group = nginx
:php-fpm.conf.patch:
24c24
< error_log = /var/log/php-fpm/error.log
---
> ; error_log = /var/log/php-fpm/error.log
:docker.conf:
[global]
error_log = /proc/self/fd/2
[www]
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2
clear_env = no
; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
!!!cakephp 2.3 °Ê¹ß¤ÎÃí°ÕÅÀ
!!default.ctp
!¥³¥ó¥Æ¥ó¥Äɽ¼¨
¥ì¥¤¥¢¥¦¥È¤Î default.ctp ¤Î½ñ¤Êý¤¬ÊѤï¤Ã¤Æ¤¤¤ë¤Î¤ÇÃí°Õ¡£
¥³¥ó¥Æ¥ó¥Ä¤òɽ¼¨¤¹¤ë¤Ë¤Ï¡¢2.3°ÊÁ°¤Ç¤Ï
$content_for_layout
¤È½ñ¤¤¤Æ¤¤¤¿¤¬¡¢2.3°Ê¹ß¤Ï
fetch('content'); ?>
¤È¤¹¤ë¡£
!META¥¿¥°¤Îʸ»ú¥³¡¼¥É
Html->charset(); ?>
¤È¤¹¤ë¤È¡¢ /path/to/cakephp/app/Config/core.php¤Î
Configure::write('App.encoding', 'UTF-8');
¤ÎÆâÍÆ¤«¤é
¤Èɽ¼¨¤·¤Æ¤¯¤ì¤ë¡£
!!!View¤äControllers¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò³¬Áز½¤¹¤ë
Config/bootstrap.php
App::build(array(
'Controller' => array(
ROOT.DS.APP_DIR.DS.'Controller'.DS.'app1'.DS,
ROOT.DS.APP_DIR.DS.'Controller'.DS,
)
));
App::build(array(
'View' => array(
ROOT.DS.APP_DIR.DS.'View'.DS.'app1'.DS,
ROOT.DS.APP_DIR.DS.'View'.DS,
)
));
¤Ê¤É¤Î¤è¤¦¤Ë½ñ¤¯¤È¡¢¥³¥ó¥È¥í¡¼¥é¤ä¥Ó¥å¡¼¤òõ¤·¤Ë¹Ô¤Ã¤Æ¤¯¤ì¤ë¡£
¥¢¥¯¥»¥¹¤¹¤ëºÝ¤ÎURL¤Ï¡¢³¬Áز½¤·¤Ê¤¤¡£
http://www.test/hoge/¥³¥ó¥È¥í¡¼¥é/¥á¥½¥Ã¥É
¤Ç¤Ï¤Ê¤¯¡¢
http://www.test/¥³¥ó¥È¥í¡¼¥é/¥á¥½¥Ã¥É
¤Î¤Þ¤Þ¤Ê¤Î¤ÇÃí°Õ¡£
!!!View¤äController¤Ë²Ã¤¨¤ÆURL¤ò³¬Áز½¤¹¤ë¡£¡Ê¤½¤Î£±¡Ë
URL¤Î³¬Áز½¤·¤¿¤¤¾ì¹ç¡¢¾åµÀßÄê¤Ë²Ã¤¨¤Æ¡¢routes.php¤Ë°Ê²¼¤ÎÀßÄê¤ò²Ã¤¨¤ë¡£
Router::connect('/app1/:controller/:action/*', array());
Router::connect('/app1/:controller/*', array('action' => 'index'));
http://xxxxx/app1/controller/action
¤Ç¥¢¥¯¥»¥¹¤¬¤¢¤Ã¤¿ºÝ¤Ë¡¢bootstrap.php¤Ç»ØÄꤵ¤ì¤¿²Õ½ê¤«¤éController¤òõ¤¹¡£
Ãí°Õ¤È¤·¤Æ¤Ï¡¢Controller¤òõ¤·¤¿ºÝ¤ËƱ¤¸Ì¾Á°¤ÎController¤¬¤¢¤Ã¤¿¾ì¹ç¤Ï¡¢Àè¤Ë¸«¤Ä¤±¤¿Êý¤ò»È¤¦¡£
!!!View¤äController¤Ë²Ã¤¨¤ÆURL¤ò³¬Áز½¤¹¤ë¡£¡Ê¤½¤Î£²¡Ë
http://taka.at/blog/1234436530.html
http://blog.elkc.net/?p=515
https://liginc.co.jp/programmer/archives/1331
°ì¤Ä¤ÎCakePHP¤Î²¼¤ËÊ£¿ô¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò´Þ¤á¤¿¤¤¾ì¹ç¡¢
Controller¤äView¡¢URL¤ò³¬Áز½¤·¤¿¤¤¡£
¾åµ¤ÎÊýË¡¤Ç¤Ï¡¢Æ±¤¸Ì¾Á°¤ÎController¤äView¤¬»È¤¨¤Ê¤¤¡£
Ʊ¤¸Ì¾Á°¤ÎController¤äView¤ò»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ïbootstrap.php¤ò½ñ¤´¹¤¨¤ëɬÍפ¬¤¢¤ë¡£
¡¦¥¢¥×¥ê£±
http://hoge/Sub1/Hoge/action
¡¦¥¢¥×¥ê£²
http://hoge/Sub2/Hoge/action
³Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÇƱ¤¸Ì¾Á°¤ÎController¤äView¤ò»È¤¦¡£
!Config/bootstrap.php
$base = $_SERVER["SCRIPT_NAME"];
$indexUrl = "app/webroot/index.php";
$base = mb_substr($base, 0, mb_strlen($base) - mb_strlen($indexUrl));
$subDir = mb_substr($_SERVER["REQUEST_URI"], mb_strlen($base));
$sepPos = mb_strpos($subDir, DS);
if ($sepPos !== false) {
$subDir = mb_substr($subDir, 0, $sepPos);
}
$isSubDir = false;
if ($subDir === "Sub1" || $subDir === "Sub2") {
$isSubDir = true;
}
if ($isSubDir) {
App::build(array(
'Controller' => array(
ROOT.DS.APP_DIR.DS.'Controller'.DS.$subDir.DS,
ROOT.DS.APP_DIR.DS.'Controller'.DS,
)
));
App::build(array(
'View' => array(
ROOT.DS.APP_DIR.DS.'View'.DS.$subDir.DS,
ROOT.DS.APP_DIR.DS.'View'.DS,
)
));
}
!Config/routes.php
Router::connect('/Sub1/:controller/:action/*', array());
Router::connect('/Sub1/:controller/*', array('action' => 'index'));
Router::connect('/Sub2/:controller/:action/*', array());
Router::connect('/Sub2/:controller/*', array('action' => 'index'));
!Config/core.php
Cache::config('_cake_core_'.... ¤Î°ú¿ô¤ò¾ò·ï¤Ë¤è¤Ã¤ÆÊѹ¹¤¹¤ë¡£
Sub1¤äSub2¤Î¾ì¹ç¤Ï¥¥ã¥Ã¥·¥åÀè¤òÊѹ¹¤¹¤ë
$subApps = array("Sub1", "Sub2");
$base = $_SERVER["SCRIPT_NAME"];
$indexUrl = "app/webroot/index.php";
$base = mb_substr($base, 0, mb_strlen($base) - mb_strlen($indexUrl));
$subDir = mb_substr($_SERVER["REQUEST_URI"], mb_strlen($base));
$sepPos = mb_strpos($subDir, DS);
if ($sepPos !== false) {
$subDir = mb_substr($subDir, 0, $sepPos);
}
if (array_search($subDir, $subApps) !== false) {
print "hoge
\n";
print dirname(CACHE).DS.$subDir.DS."
\n";
print CACHE."
\n";
Cache::config('_cake_core_', array(
'engine' => $engine,
'prefix' => $prefix . 'cake_core_',
'path' => CACHE . 'persistent' . DS.$subDir.DS,
'serialize' => ($engine === 'File'),
'duration' => $duration
));
} else {
Cache::config('_cake_core_', array(
'engine' => $engine,
'prefix' => $prefix . 'cake_core_',
'path' => CACHE . 'persistent' . DS,
'serialize' => ($engine === 'File'),
'duration' => $duration
));
}
!!!¥Æ¡¼¥Þ¤ÎÍøÍÑ
!¥Ç¥£¥ì¥¯¥È¥ê¹½À®
app°Ê²¼¤ÎView¥Ç¥£¥ì¥¯¥È¥ê¤Ë Themed ¤òºîÀ®¤¹¤ë¡£
³Æ¥Æ¡¼¥Þ°Ê²¼¤Ïwebroot¤ÈƱ¤¸¹½À®¤Ë¤¹¤ë¡£
³Æ¥Æ¡¼¥Þ¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ÏÂçʸ»ú¤Ç¤Ï¤¸¤á¤ë¤³¤È¡£
View
`-- Themed
`-- HelloTheme
`-- webroot
`-- css
|-- cake.hello.css
!¥Æ¡¼¥Þ¤ÎÍøÍÑ
¥³¥ó¥È¥í¡¼¥é¤Ç
$this->theme = 'helloTheme';
¤È¤¹¤ì¤Ð¡¢¥Æ¡¼¥Þ¤¬Å¬ÍѤµ¤ì¤ë¡£
!!!Ãí°ÕÅÀ
!̵Â̤ʲþ¹Ô¤Ë¤Ä¤¤¤Æ
Controller ¤Î
¤Î¤¢¤È¤Ë̵Â̤ʲþ¹Ô¤¬¤¢¤ë¤È¡¢¤½¤Î¤Þ¤Þ²þ¹Ô¤¬½ÐÎϤµ¤ì¤ë¤Î¤ÇÃí°Õ
!¸Å¤¤cake¤È¿·¤·¤¤PHP¤ÎÁȤ߹ç¤ï¤»
¥¨¥é¡¼¤Î¼ïÎà¤È¤·¤Æ
¡¦E_NOTICE
¡¦E_DEPRECATED
¤¬Äɲäµ¤ì¤Æ¤¤¤ëPHP¤Ç¡¢¸Å¤¤cake¤òư¤«¤¹¤È¥á¥Ã¥»¡¼¥¸¤¬Âçµù¤Ëɽ¼¨¤µ¤ì¤ë¡£
cake Æâ¤Î
error_reporting
¤ò
== E_ALL & ~E_NOTICE & ~E_DEPRECATED==
E_ALL & ~E_STRICT & ~E_DEPRECATED
¤¹¤ë¤È¥á¥Ã¥»¡¼¥¸¤¬¾Ã¤¨¤ë¡£
!½ÐÎϤκǸå¤ÎËä¤á¹þ¤Þ¤ì¤ë¼Â¹Ô»þ´Ö¤Ë¤Ä¤¤¤Æ
cakephp ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤è¤Ã¤Æ¤Ï¡¢¼Â¹Ô»þ´Ö¤¬¥½¡¼¥¹¤ËÅǤ½Ð¤µ¤ì¤ë¤³¤È¤¬¤¢¤ë¡£
¼ÙËâ¤Ê¾ì¹ç¤Ï
/app/webroot/index.php
¤Ë¤¢¤ë
¡¦¡¦¡¦¡¦¡¦¡¦s -->
¤¬½ñ¤«¤ì¤Æ¤¤¤ë¹Ô¤ò¾Ã¤¹
!!!¥â¥Ç¥ë¤òÊ£¹ç¥¡¼¤ËÂбþ¤µ¤»¤ë
CakePHP 3.X ¤«¤é¤Ï¥â¥Ç¥ë¤¬Ê£¹ç¥¡¼¤ËÂбþ¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ë¤è¤¦¤À¤¬
2.X¤Ç¤Ï¡¢Ê£¹ç¥¡¼¤ËÂбþ¤·¤Æ¤¤¤Ê¤¤¡£
http://piyopiyocs.blog115.fc2.com/blog-entry-358.html
¤ò»²¹Í¤ËÊ£¹ç¥¡¼¤ËÂбþ¤·¤¿¥â¥Ç¥ë¤òºîÀ®¤¹¤ë¤ÈÎɤ¤¡£
!!!Oracle¤Ê¤É¤ËÀܳ¤¹¤ëºÝ¤Ëʸ»ú¥³¡¼¥É¤ò»ØÄꤹ¤ë
Â礤¯2¤Ä¤ÎÊýË¡¤¬¤¢¤ë¡£
¤É¤Á¤é¤ÎÊýË¡¤Ç¤âÎɤ¤¡£¾õ¶·¤Ë¤è¤Ã¤Æ»È¤¤Ê¬¤±¤ë¡£
!!Àܳ»þ¤Ëʸ»ú¥³¡¼¥É¤ò»ØÄꤹ¤ë
public $default = array(
'datasource' => 'hogehoge',
...............
'charset' => 'AL32UTF8',
);
!!´Ä¶ÊÑ¿ô¤Ëʸ»ú¥³¡¼¥É¤ò»ØÄꤹ¤ë
¶ñÂÎŪ¤Ë¤Ïapache¤¬¼Â¹Ô¤µ¤ì¤ëºÝ¤ËÀßÄꤵ¤ì¤ë´Ä¶ÊÑ¿ô¤Ë NLS_LANG ¤òÀßÄꤹ¤ë¡£
/etc/sysconfig/httpd
export NLS_LANG=Japanese_Japan.UTF8
{{category2 ¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì,PHP}}