
éçºã®ãã£ãªã¢ãå§ãããšãã Phil Karltonã«èµ·å ãããã¬ãŒãºãèªãã§éåžžã«é©ããŸããã ãã¬ãŒãºã®æ¬è³ªãç解ããŠããªãã£ãã®ã§ããããä¿¡ããããªãã»ã©åããŸããã ããããå°ãåŸã«ç§ã¯ç解ãå§ããŸããã
ç§ãã¡ã®çç£ã€ã³ãã©ã¹ãã©ã¯ãã£ã§ããã»ã©åã«ééããåé¡ã«ã€ããŠè©±ãããã§ãã å±éãæåããçŽåŸã«ãæ°ãããªãªãŒã¹ã§å€æŽãããããŒãžãæŽæ°ãããšãæ°ããã³ãŒãããã°ãã衚瀺ãããŸããã§ããã å®éãããã¯PHPã§äœæãããWebã¢ããªã±ãŒã·ã§ã³ã§ã¯çããããšã§ã¯ãããŸããã ç§ãã¡ã¯ããã«çŽé¢ããŠããŸããããæ°ããå®çšŒåç°å¢ãžã®ç§»è¡åŸãåé¡ã¯ããé¡èã«ãªããŸããã ãããã£ãŠã調æ»ããããšã«ããŸããã
å±éæé
ç§ãã¡ã®æè¡ã¯äž»ã«PHPã§æžãããŠããã SymfonyãšZendãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããŸãã ã³ãŒããå®çšŒåç°å¢ã«éä¿¡ããã«ã¯ã shark-doå
éšãããžã§ã¯ãã䜿çšããŸãããã®äœæè
ã¯LucaããŒã ã®ãªãŒããŒã§ãã
ãµã¡ã®å²åŠïŒ
ããããè¡ãããšãã§ããã°ãbashã§è¡ãããšãã§ããŸããã
ãããžã§ã¯ãã¯ãã¿ã¹ã¯ãèå¥ããŠã¢ã«ãŽãªãºã ã«åŸã£ãŠå®è¡ã§ããbashã¹ã¯ãªããã§ãã åãããžã§ã¯ãã«ã¯ãããšãã°ãäžèŠãªãã¡ã€ã«ã®åé€ãæ§æãã¡ã€ã«ã®çæãªã©ãããŸããŸãªæ®µéã管çããããã®ç¬èªã®ã¢ã«ãŽãªãºã ããããŸãã
ããšãã°ã1æ¥5å以äžã shark-do deploy collaboratori
ã³ãã³ãã䜿çšããŠãäœæ¥äžã®collaboratoriãããžã§ã¯ãã®å±éã¿ã¹ã¯ãèµ·åããŸãã éåžžãå±éã¯æ¬¡ã®æé ã§æ§æãããŸãã
- æåŸã®ã³ãããã¯masterãã©ã³ãããååŸãããŸãã
- ãã©ã«ããŒãæ§æãããäžèŠãªãã¡ã€ã«ãåé€ããããªãªãŒã¹ã®äœæãéå§ãããŸãã
- ãã©ã¡ãŒã¿ãŒãèšå®ããããªã³ã«ãŒã®ã€ã³ã¹ããŒã«ãéå§ããããªãœãŒã¹ãããŠã³ããŒããããŠè¿œå ãããŸãã
- ãªãªãŒã¹ã¢ãŒã«ã€ããäœæãããåŸãèŠå¡ãã·ã³ã«è»¢éãããŠå±éãããŸãã
- ã€ã³ãã©ã¹ãã©ã¯ãã£ã®REST APIã䜿çšããŠããªãªãŒã¹ã®ããŒã«ããã¯ãéå§ããããã«Ansibleããã·ãŒãžã£ãåŒã³åºãããŸãã
- ã·ã¹ãã ãæ°ãããªãªãŒã¹ã«åãæ¿ãããå€ããªãªãŒã¹ãã¯ãªã¢ãããŠèŠå¡ãã·ã³ããåé€ãããŸãã
- æ°ãããªãªãŒã¹ã¯New Relicã§ç¥ãããSlackãã£ãã«ã«å±éã¿ã¹ã¯ã®å®äºã«é¢ããéç¥ã衚瀺ãããŸãã
5çªç®ã®ã¹ããããæ€èšããŠãã ããã Ansibleã¹ã¯ãªããã¯å¿çããŸãïŒ
- èŠå¡ãã¹ããããã¹ãŠã®ã¿ãŒã²ãããã·ã³ïŒããã³ããšã³ããããããªã©ïŒã«æ°ãããªãªãŒã¹ãã³ããŒããããã
- ãã¹ãŠã®ãã©ã«ããŒãšã¢ã¯ã»ã¹èš±å¯ãèšå®ããŸãã
- ãã£ãã·ã¥ããŠã©ãŒã ã¢ãããããªãªãŒã¹ãåãæ¿ããŸãã
åå±éæé ã¯å€ãã®å¿
èŠãªæäœã§æ§æãããŠããŸããã転æç¹ã¯çŸåšã®ãããžã§ã¯ããã©ã«ããŒã®å€æŽã§ããããã¯ã以åã®ãªãªãŒã¹ãã©ã«ããŒããæ°ãããã®ãžã®ã·ã³ããªãã¯ãªã³ã¯ã䜿çšããŠè¡ãããŸãã çŸåšã®ãããžã§ã¯ããã©ã«ãã¯ãç¹å®ã®Webã¢ããªã±ãŒã·ã§ã³ã®ããã¥ã¡ã³ãã®ã«ãŒãå Žæã§ãã
äŸïŒ
ln -sf /var/www/{APP_NAME}/releases/@YYYYMMDDHHIISS /var/www/{APP_NAME}/current
-s
ãã·ã³ããªãã¯ãªã³ã¯ãäœæããããã«äœ¿çšããã -f
ã¯ãã¿ãŒã²ãããæ¢ã«ååšããå Žåã«ãã®ãããªãªã³ã¯ã®äœæã匷å¶ããããã«äœ¿çšãããŸãã {APP_NAME}
ã¯ãããžã§ã¯ãã®ååã§ãã
PHPã®æšæºçãªå±éæŠç¥ã䜿çšããŸãã 1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã®ãªãªãŒã¹ã¯éçšãµãŒããŒã«ä¿åãããã·ã³ããªãã¯ãªã³ã¯ãä»ããŠçŸåšã®ããŒãžã§ã³ãåç
§ããŸãã ããã«ãããäœæ¥ãã©ãã£ãã¯ã«åœ±é¿ãäžããããšãªãã ã¢ãããã¯ãã€å®å
šã«å±éã§ããŸãã
æåŸã«ãã©ãŠã³ãããã³ããªã·ãŒã䜿çšãããã©ã³ãµãŒã®èåŸã«ã¯ã15å°ã®ããã³ããšã³ããµãŒããŒããããŸãïŒä»¥åã®2.5åïŒã 質åïŒãªãªãŒã¹åãæ¿ãåŸã¯ã©ããªããŸããïŒ
PHP OPCacheïŒïŒïŒã®ãã
ããã€ãã®æ³šæç¹ïŒPHPã¹ã¯ãªããã®æµãã«ã€ããŠã¯æãäžããŸããããåé¡ã«ã€ããŠã®ç§ã®çç±ãç解ããããããããã®äž»ãªäºé
ã«ã€ããŠèª¬æããŸãã ãŸããPHP 7ã®ã¿ãæ€èšããŸãã
PHPã³ãŒãã®å®è¡æ¹æ³ãèŠããŠãããšäŸ¿å©ãªå ŽåããããŸãã ã¹ã¯ãªãããéå§ããããšããœãŒã¹ã³ãŒãã¯4ã€ã®æ®µéãçµãŸãã

æåã®ãã§ãŒãºã¯ã PHPåå¥è§£æããã°ã©ã ã«ãã£ãŠå¶åŸ¡ãããŸã ã 圌ã¯ã function
ã return
static
ãªã©ã®èšèªããŒã¯ãŒãããéåžžtokensãšåŒã°ããåã
ã®éšåãšäžèŽããã責任ãããstatic
ã å€ãã®å ŽåãåããŒã¯ã³ã«ã¯æ¬¡ã®ãã§ãŒãºã«å¿
èŠãªã¡ã¿ããŒã¿ãè¿œå ãããŸãã
2çªç®ã®ãã§ãŒãºã¯ãPHPããŒãµãŒã«ãã£ãŠå¶åŸ¡ãããŸãã 圌ã¯ã1ã€ä»¥äžã®ããŒã¯ã³ã®åæãšãããããèšèªæ§é ã®ãã³ãã¬ãŒããšæ¯èŒãã責任ããããŸãã ããšãã°ã $foo + 5
ãã€ããªã®ãå ç®ãæŒç®ãšããŠèªèããã $foo
ãšæ°å€5
ãªãã©ã³ããšããŠèªèãããŸãã ããŒãµãŒã¯ã æœè±¡æ§æããªãŒïŒASTïŒãååž°çã«æ§ç¯ããŸã ã éåžžãåå¥è§£æããã°ã©ã ãšããŒãµãŒã®äœæ¥ã¯1ã€ã®ã¿ã¹ã¯ãšèŠãªãããŸãã
3çªç®ã®ãã§ãŒãºã¯ã³ã³ãã€ã«ã§ãã ASTã¯ãåœä»€ã³ãŒãã®é åºä»ãã·ãŒã±ã³ã¹ã«å€æãããŸãã åãªãã³ãŒãã¯ã Zendä»®æ³ãã·ã³ã®äœã¬ãã«ã®æäœãšèããããšãã§ããŸãã ãµããŒããããŠãããªãã³ãŒãã®å®å
šãªãªã¹ãã¯ã ããã«ãããŸã ã
æåŸã«ãæåŸã®ãã§ãŒãºã¯å®è¡ã§ãã Zend VMã¯ããªãã³ãŒãã«èšè¿°ãããŠããåã¿ã¹ã¯ãå®è¡ããçµæãçæããŸãã
æåã®3ã€ã®ãã§ãŒãºïŒåå¥è§£æãããŒãµãŒãã³ã³ãã€ã©ïŒã¯ããã€ãã©ã€ã³ãã«çµåãããŸãã ããã«ã第3ãã§ãŒãºã§ã¯ããå€ãã®æéãããããããå€ãã®ãªãœãŒã¹ïŒã¡ã¢ãªãšããã»ããµïŒãæ¶è²»ããŸãã ã³ã³ãã€ã«ãã§ãŒãºã®éã¿ãæžããããã«ãPHP 5.5ã§Zend OPCacheæ¡åŒµæ©èœãå°å
¥ãããŸããã ã³ã³ãã€ã«ãã§ãŒãºã®åºåïŒãªãã³ãŒãïŒãå
±æã¡ã¢ãªïŒshmãmmapãªã©ïŒã«ãã£ãã·ã¥ãããããåPHPã¹ã¯ãªããã¯äžåºŠã ãã³ã³ãã€ã«ãããã³ã³ãã€ã«ãã§ãŒãºãªãã§ç°ãªããªã¯ãšã¹ããå®è¡ã§ããŸãã éçºçšã§ã¯ãªãç°å¢ã§ã³ãŒãããã£ãã«å€æŽãããªãå ŽåãPHPã®å®è¡é床ã¯å°ãªããšã2åã«ãªããŸãã
OPCacheæ¡åŒµæ©èœããªãã³ãŒãã®æé©åãæ
åœããŸãããããã¯ãã§ã«ãã®èšäºã®ç¯å²å€ã§ãã
äžèšã«é¢é£ããŠãå®çšŒåç°å¢ã§ééããå¥åŠãªåäœã®åå ã¯OPCacheã«ãããšèããã®ãè«ççã§ãã ãã®ä»®å®ããã¹ãããããã«ãDockerã³ã³ãããŒãPHP 7.0ããã³Apache 2.4ããç°¡åãªãã¢ç°å¢ãäœæããŸããã å®å
šãªã³ãŒãã¯ãã¡ãããããŠã³ããŒãã§ããŸã ã
äœæ¥ãç°¡çŽ åããããã«ãããã€ãã®ã¹ã¯ãªãããäœæããŸããã
start.sh
ã¯ãæ£ããæ§æã§Dockerã³ã³ãããŒãéå§ããŸããrelease-switcher.sh
ã10ç§ããšã«çŸåšã®ãªãªãŒã¹ãžã®ã·ã³ããªãã¯ãªã³ã¯ãããŒãããŸããrelease-watcher.sh
ãHTTPãªã¯ãšã¹ããæ¯ç§éä¿¡ããApacheãæäŸããçŸåšã®ãªãªãŒã¹ã確èªããŸãã
GitHubãªããžããªã®ã¯ããŒã³ãäœæããã ãã§ãDockerããã§ã«ã€ã³ã¹ããŒã«ãããŠãããã©ããã確èªã§ããŸãã
git clone https://github.com/salvatorecordiano/facile-it-realpath_cache cd facile-it-realpath_cache docker pull salvatorecordiano/realpath_cache
ãã£ãã·ã¥ã®åé¡ãåçŸããã«ã¯ããããã®ã³ãã³ãã3ã€ã®ç°ãªãã³ãã³ãã©ã€ã³ã§äžŠè¡ããŠå®è¡ããå¿
èŠããããŸãã
# start the container with production configuration ./start.sh production # start switching the current release ./release-switcher.sh # start watching the current web server response ./release-watcher.sh
å®è¡çµæïŒ
å®çšŒåæ§æã§ã®å®è¡ã
ãã£ãã·ã¥ã®åé¡ãç¹°ãè¿ãããŸããããªãªãŒã¹ãåãæ¿ããåŸãHTTPãªã¯ãšã¹ãã®åŸã«æ£ããã³ãŒãã衚瀺ãããŸããã
OPCacheãç¡å¹ã«ããŠããã¹ããç¹°ãè¿ããŸãã
# start the container with production configuration and opcache disabled ./start.sh production-no-opcache # start switching the current release ./release-switcher.sh # start watching the current web server response ./release-watcher.sh
å®çšŒåno-opcacheæ§æã§ã®å®è¡ã
é©ãã¹ãããšã«ãåé¡ãæ®ã£ãŠããããã OPCacheã¯äœã®ããã§ããªããšããä»®å®ã¯èª€ãã§ããã
realpath_cacheïŒæ¬åœã®ç¯äºº
ããããinclude/require
é¢æ°ãŸãã¯PHPã¹ã¿ãŒãã¢ããã䜿çšãããšãã realpath_cacheã«ã€ããŠèããå¿
èŠããããŸãã å®éã®ãã¹ãã£ãã·ã¥ã䜿çšãããšããã¡ã€ã«ãšãã©ã«ããŒã®ãã¹ã¢ã¯ã»ã¹èš±å¯ããã£ãã·ã¥ã§ããããããã£ã¹ã¯ã®æ€çŽ¢ã«è²»ããæéãççž®ãããããã©ãŒãã³ã¹ãåäžããŸãã SymfonyãZendãLaravelãªã©ã®å€ãã®ãµãŒãããŒãã£ã©ã€ãã©ãªãŸãã¯ãã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåãããã¯éåžžã«å€ãã®ãã¡ã€ã«ã䜿çšãããããéåžžã«äŸ¿å©ã§ãã
ãã£ãã·ã¥ã¡ã«ããºã ã¯ãPHP 5.1.0ã§ç»å ŽããŸããã çŸåšããã®æ©èœã¯å
¬åŒããã¥ã¡ã³ãã§ã¯èšåãããŠããŸããããé¢æ°realpath_cache_get()
ã realpath_cache_size()
ã clearstatcache()
ããã³php.ini
ãã©ã¡ãŒã¿ãŒrealpath_cache_size
ããã³realpath_cache_ttl
ãé€ããŸãã å€éšãœãŒã¹ããã¯ã2014幎ã«Julien Paulãæžããå€ãæçš¿ããèŠã€ãããŸããã§ããã æåãªPHPéçºè
ã§ããPaulieãããã¹è§£æ±ºã¡ã«ããºã ã®ä»çµã¿ã説æããŠããŸãã
ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ãããšãPHPã¯stat()
ãUnixã·ã¹ãã ã³ãŒã«ã䜿çšããŠãã¹ã®è§£æ±ºãè©Šã¿ãŸãstat()
é©çšããããã¡ã€ã«å±æ§ïŒã¢ã¯ã»ã¹æš©ãæ¡åŒµåãããã³ãã®ä»ã®ã¡ã¿ããŒã¿ïŒãè¿ããŸãã Unixã®äžçã§ã¯ãiããŒãã¯ãã¡ã€ã«ããã£ã¬ã¯ããªãªã©ã®ãã¡ã€ã«ã·ã¹ãã ãªããžã§ã¯ããèšè¿°ããããã«äœ¿çšãããããŒã¿æ§é ã§ãã PHPã¯ãã·ã¹ãã ã³ãŒã«ã®çµæããæš©éãææè
ãªã©ã®äŸå€ãé€ãã realpath_cache_bucket
ãšããããŒã¿æ§é ã«å
¥ããŸãã ãããã£ãŠãåããã¡ã€ã«ã«å床ã¢ã¯ã»ã¹ããããšãããšãã¡ã¢ãªå
ã®ãã±ãããæ€çŽ¢ãããšãïŒãã±ããæ€çŽ¢ïŒãå¥ã®é
ãã·ã¹ãã ã³ãŒã«ãä¿åãããŸãã 詳现ãç¥ãããå Žåã¯ã PHPãœãŒã¹ã³ãŒããã芧ãã ããã
realpath_cache_get
é¢æ°ã¯ãPHP 5.3.2ã§ç»å ŽããŸããã ããã«ãããå®éã®ãã¹ã®ãã£ãã·ã¥ãšã³ããªã§æ§æãããé
åãååŸã§ããŸãã é
åã®åèŠçŽ ã§ã¯ãããŒã¯è§£æ±ºããããã¹ã§ãããå€ã¯key
ã is_dir
ã realpath
ã is_dir
ãªã©ã®ããŒã¿ãæã€å¥ã®é
åã§ãã
次ã«ãåºåprint_r(realpath_cache_get())
ãæ¥ãŸãã ãã¹ãããã«ãŒç°å¢ã§ïŒ
Array ( [/var/www/html] => Array ( [key] => 1438560323331296433 [is_dir] => 1 [realpath] => /var/www/html [expires] => 1504549899 ) [/var/www] => Array ( [key] => 1.5408950988325E+19 [is_dir] => 1 [realpath] => /var/www [expires] => 1504549899 ) [/var] => Array ( [key] => 1.6710127960665E+19 [is_dir] => 1 [realpath] => /var [expires] => 1504549899 ) [/var/www/html/release1] => Array ( [key] => 7631224517412515240 [is_dir] => 1 [realpath] => /var/www/html/release1 [expires] => 1504549899 ) [/var/www/current] => Array ( [key] => 1.7062595747834E+19 [is_dir] => 1 [realpath] => /var/www/html/release1 [expires] => 1504549899 ) [/var/www/current/index.php] => Array ( [key] => 6899135167081162414 [is_dir] => 0 [realpath] => /var/www/html/release1/index.php [expires] => 1504549899 ) )
ããã«ïŒ
key
ã¯æµ®åå°æ°ç¹æ°ã§ããããã¹ã®ããã·ã¥ã§ããis_dir
ããŒã«å€ãèš±å¯ããããã¹ããã£ã¬ã¯ããªã®å Žåã¯trueã ãã以å€ã®å Žåã¯falseãrealpath
èš±å¯ããããã¹ãæååãexpires
æŽæ°ãæå»ã瀺ãããã¹ãã£ãã·ã¥ã¯ç¡å¹ã«ãªããŸãã ãã®å€ã¯ã realpath_cache_ttl
ãã©ã¡ãŒã¿ãŒã«å³å¯ã«é¢é£ããŠããŸãã
åã®äŸã§ã¯6ã€ã®ãã¹ããããŸãããããããã¯ãã¹ãŠ/var/www/current/index.php
ãã¹ã®è§£æ±ºã«é¢é£ããŠããŸãã PHPã¯1ã€ã®ãã¹ã®ã¿ã解決ããããã«6ã€ã®ãã£ãã·ã¥ããŒãäœæããŸããã ãã®ããããã¹ã¯éšåã«åå²ããããããããé£ç¶çã«è§£æ±ºãããŸãã /var/www/current
ã¯/var/www/html/release1
ãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ããããããã®äŸã§ã¯ããå®éã®ããã¹ã¯/var/www/html/release1/index.php
ã§ãã
ãžã¥ãªã¢ã³ããŠãªã®æçš¿ã«ã¯æ¬¡ã®ããã«ãæžãããŠããŸãã
ããã®ãã¹ã®ãã£ãã·ã¥ã¯ããã»ã¹ã«ã¢ã¿ãããããŠãããå
±æã¡ã¢ãªã«åãŸããŸãããã
ããã¯ã ããã»ã¹ããšã«ãã£ãã·ã¥ãå€ããªã£ãŠããããšãæå³ããŸã ã PHP-FPMã䜿çšããŠWebãµãŒããŒå
šäœãã¯ãªãŒã³ã¢ããããå ŽåãããŒã«å
ã®åã¯ãŒã«ãŒã®ãã£ãã·ã¥ãæéåãã«ãªãã®ãåŸ
ã€å¿
èŠããããŸãã ããã¯ã production-no-opcache
ã䜿çšãããã¹ãäžã«äœãèµ·ããããç解ããã®ã«åœ¹ç«ã¡production-no-opcache
ã ã·ã³ããªãã¯ãªã³ã¯ãåãåã£ãåŸã«OPCacheãç¡å¹ã«ããŠããPHPã¯ãã¹ãŠã®ããã»ã¹ã«ãã¹ã®é³è
åããã£ãããšéç¥ããŸãã
å®éã®éçšç°å¢ã§ã¯ãå€ãã®Webã¢ããªã±ãŒã·ã§ã³ããã¹ããã15å°ã®ããã³ããšã³ããµãŒããŒãããããšãèæ
®ããå¿
èŠããããŸããã åãµãŒããŒã«ã¯1ã€ã®PHP-FPMããŒã«ããããåããŒã«ã¯35ã®ã¯ãŒã«ãŒãš1ã€ã®ãã¹ã¿ãŒããã»ã¹ã§æ§æãããŠããŸãã ããã¯ããªãæ°ããç°å¢ã§ãå¥åŠãªåäœããããé¡èã«ãªã£ãã®ãã説æããŠããŸãã realpath_cache_size
ããã³realpath_cache_ttl
ã䜿çšããŠãWebã¢ããªã±ãŒã·ã§ã³ã®çŸåšã®ãã¹ã®ãã£ãã·ã¥ã®å¹æã調æŽã§ãrealpath_cache_ttl
ãæåã®realpath_cache_ttl
ã¯ãPHPã䜿çšãããã±ããã®ãµã€ãºã決å®ããŸãã ããã¯æŽæ°ã§ããããã®å€ã倧ãããããšãèšå€§ãªæ°ã®ãã¡ã€ã«ãåŠçããWebã¢ããªã±ãŒã·ã§ã³ã«åœ¹ç«ã¡ãŸãã 2çªç®ã®ãã©ã¡ãŒã¿ãŒrealpath_cache_ttl
ã¯ãæ¢ã«è¿°ã¹ãããã«ãçŸåšã®ãã¹ã«é¢ããæ
å ±ããã£ãã·ã¥ããæéïŒç§åäœïŒã§ãã
ãã¹ãŠãæ確ã«ãªã£ãã®ã§ããµã€ãºãšã©ã€ãã¿ã€ã ã調æŽããããšã§ãOPCacheãå床æå¹ã«ããå®éã®ãã¹ã®ãã£ãã·ã¥ãç¡å¹ã«ã§ããŸãã
realpath_cache_size=0k realpath_cache_ttl=-1
ãã¹ããå床å®è¡ããŸãã
# start the container with production configuration, opcache enabled and realpath_cache disabled ./start.sh production-no-realpath-cache # start switching the current release ./release-switcher.sh # start watching the current web server response ./release-watcher.sh
æ§æproduction-no-realpath-cacheã䜿çšããå®è¡ã
PHPã¯ãã¹ãŠã®ãã¹ãèš±å¯ããããã«åŒ·å¶ãããŠãããããã©ãŒãã³ã¹ã«æªåœ±é¿ãäžãããããæ¬çªç°å¢ã§ã¯æåŸã®æ§æã匷ããå§ãããŸãã ã
ãããã«
ç§ã¯ãç¥ç§çãªãã£ãã·ã¥ã®åé¡ã解決ããããšãOPCacheãšãã®ãã¹ã®ãã£ãã·ã¥ã«ã€ããŠåŠãã ããšãããã³ãããã®éãã«ã€ããŠè©±ããããã£ãã®ã§ãã èšäºã®åé ã§èª¬æããã¹ã¯ãªãããèæ¡ãããŸããããããšãã°ããªã¯ãšã¹ããã³ãŒãã®1ã€ã®ããŒãžã§ã³ã§å§ãŸãå Žåãå®è¡äžã«ä»ã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããšãããã®åŸã®ããŒãžã§ã³ã®ã³ãŒãã§æŽæ°ã移åãåé€ãããå Žåãå®éã®åé¡ãçºçããå¯èœæ§ããããŸãã ææªã®å Žåã2ã€ã®é£ç¶ãããªãªãŒã¹ã®äºææ§ã確ä¿ããå¿
èŠããããŸããã説æãããŠããæ¡ä»¶ã§ã¯ããããéæããã®ã¯éåžžã«å°é£ã§ãã
ã¢ãããã¯å±éæŠç¥ãå®è£
ããå¿
èŠããããŸãïŒå³å¯ãªæå³ã§ïŒã ããšãã°ããããã€ããããªãªãŒã¹ããšã«ã³ã³ãããŸãã¯æ°ããPHP-FPMãµã³ãããã¯ã¹ã䜿çšã§ããŸãã åŸè
ã®å Žåãåæã«åäœããFPMããŒã«ãä¿æã§ããããã«ããã«ã¯ãã¡ã¢ãªéãå°ãªããšã2åã«ããå¿
èŠããããŸãã
mod_realdoc
ãšããApacheã¢ãžã¥ãŒã«ã䜿çšããŠãã¢ãããã¯ãããã€ã¡ã³ãããµããŒãããããšãã§ããŸãã ããã¯ã©ã¹ãã¹ã»ã©ãŒãã«ãã«ãã£ãŠæžãããŸããã ãã®ã¢ãžã¥ãŒã«ã«ã¯ããªãã¯ãå®è£
ãããŠããŸãããªã¯ãšã¹ãã®éå§æã«ãã·ã³ããªãã¯ãªã³ã¯DOCUMENT_ROOT
ã䜿çšããŠå®éã®ãã¹ãåŒã³åºããããªã¯ãšã¹ãå
šäœã®çµ¶å¯Ÿãã¹ãå®éã®ããã¥ã¡ã³ãã«ãŒããšããŠèšå®ãããŸãã ãããã£ãŠãã·ã³ããªãã¯ãªã³ã¯ãå€æŽãããåã«éå§ãããèŠæ±ã¯ã以åã®ã·ã³ããªãã¯ãªã³ã¯ã¿ãŒã²ããã«é¢é£ããŠå®è¡ãããŸãã ãã®ã¢ãžã¥ãŒã«ã®äž»ãªæ¬ ç¹ã¯ã Apache Multi-Processing ModuleïŒMPMïŒ preforkã䜿çšããå¿
èŠãããããšã§ãã ãã®ããªãã©ãŒã¯ã¯ããã©ãŒã¯ããŒã¹ã䜿çšããéã¹ã¬ãããµãŒããŒãå®è£
ããŸãã ãµãŒããŒã¯æ°ããããã»ã¹ãäœæãããªã¯ãšã¹ããåŠçããããã«ããããä¿æããŸãã ããã¯ååé¡ãåé¢ããã®ã«æé©ãªMPMã§ãããããåé¡ãçºçããŠããããèŠæ±ãä»ã®èŠæ±ã«åœ±é¿ãäžããããšã¯ãããŸããã ãããããµãŒããŒã®è² è·ãé«ãå ŽåãMPMã¯ãªã¯ãšã¹ãããšã«1ã€ã®ããã»ã¹ã䜿çšãããããããç Žæãããããåæãªã¯ãšã¹ãã®çµæãšããŠååãªãªãœãŒã¹ããªãããããµãŒããŒããã»ã¹ã解æŸããããŸã§åŸ
æ©ããå¿
èŠããããŸãã realpath(__FILE__)
ã§ã¡ã€ã³ã«ãŒããã©ã«ããŒãå®çŸ©ãããšãã¢ããªã±ãŒã·ã§ã³ã®ããã³ãã³ã³ãããŒã©ãŒã§PHPã¬ãã«ã§mod_realdoc
ãšåãçµæãmod_realdoc
ããšãã§ããŸãã
PHPã®åã«nginxã䜿çšããå Žåã幞éã§ãïŒ ã¯ãšãªã®å®è¡æã«ã·ã³ããªãã¯ãªã³ã¯ãæŽæ°ãããªãããã«ããã«ã¯ãnginxã«ã·ã³ããªãã¯ãªã³ã¯ãæå¹ã«ããããããDOCUMENT_ROOT
å²ãåœãŠãå¿
èŠããããŸãã ãµãŒããŒãããã¯å
ã®æ°è¡ã®ã³ãŒããå€æŽããã ãã§ååã§ãã
# default configuration fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $document_root; # configuration with real path resolution fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root;
ãã®çµæãnginxã¯ã·ã³ããªãã¯ãªã³ã¯ãèš±å¯ããPHPããé衚瀺ã«ããŸãã
ãããã¯ããã®æ¹æ³ã§ãã£ãã·ã¥ã®åé¡ã«å¯ŸåŠããæ¹æ³ã®ã»ãã®äžéšã§ãã æ®éçãªãæ£ãããæ¹æ³ã¯ãããŸããã èŠä»¶ãšã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¿ããŠãçæ³çãªãœãªã¥ãŒã·ã§ã³ãèŠã€ããå¿
èŠããããŸãã
åç
§è³æ