!!!¥¤¥ó¥¹¥È¡¼¥ë¤ÈÀßÄê !!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}}