Share
Embed
Transcript
272 slides
-
!!!!!! » Nullable types » Void return type » Iterable
pseudo-type » Class constant visiblity modifiers » Square bracket syntax for list() and the ability to specify keys in list() » Catching multiple exceptions types -
PHPϚϧνόΠτͷจࣈྻಡΈॻ͖Ͱ͖·͢ɻ php > echo mb_strlen("͍͋͏͓͑"); 5 » ϚϧνόΠτରԠؔ(mbؔ)Λ͏ࣄͰਖ਼͘͠ॲཧ͕Ͱ͖Δ » ͨͩ͠ɺੈͷதUTF-8͚ͩͰͳ͍
» UTF-16LE, SJIS, EUC-JP ... -
mbؔɺѻ͏จࣈίʔυΛઃఆ͔Βஅ͍ͯ͠Δ php > var_dump( ini_get("mbstring.internal_encoding")); string(5) "UTF-8" » ͔ͩΒɺ͖͞΄Ͳmb_strlen͕ਖ਼͑͘͠ΒΕͨ »
mbstring.internal_encodingͱ͍͏Ωʔʹɺ "UTF-8"ͱ͍͏͕͍͍ͬͯ·͢ɻ ͜Ε͕php.iniͷઃఆͰ͢ɻ » ͜͏͍͏ઃఆ͕ɺʢڥʹΑΔ͕ʣΏ͏ʹ200ݸҎ্͋Δ -
ઃఆΛɺUTF-8͔Βม͑ͯΈΔ php > echo mb_strlen("͍͋͏͓͑"); 5 php > ini_set("mbstring.internal_encoding", "SJIS-win");
php > echo mb_strlen("͍͋͏͓͑"); 8 » ͱ͍͏͜ͱͰɺ෦ॲཧΛSJIS-win(cp932)ʹ͢Δͱ… » ͦͷ͔ΒΤϥʔͳ͘ɺจࣈ͕ਖ਼͘͠ΧϯτͰ͖ͳ͘ͳΔɻ -
PHP3.0ͷphp.ini-distʢൈਮʣ [PHP_3] engine = On ; enable PHP 3.0 parser
short_open_tag = On ; allow the <? tag. otheʙ precision = 14 ; number of significant dʙ y2k_compliance = Off ; whether to be year 2000ʙ safe_mode = Off safe_mode_exec_dir = max_execution_time = 30 ; Maximum execution tiʙ memory_limit = 8388608 ; Maximum amount of meʙ error_reporting = 7 -
PHP7ͷiniʢൈਮ [PHP] engine = On short_open_tag = Off precision =
14 serialize_precision = 17 zend.enable_gc = On expose_php = On max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT -
มΘͬͯͳ͍Ͱ͢Ͷ » օ͞Μ͕͠Έ͋Δ߲͔Γ » safe_modey2k_complianceʢջ͔͍͠ʣͱ͔ফ͑ͨ » memory_limitͷσϑΥϧτͱ͔ແ(?)૿͑ͨ » error_reportingఆԽ »
php3 213ߦ => php7 1933ߦ » ʢίϝϯτ͕ಛʹ૿͑ͨʣ -
» ʮphp.iniͷࣝ20͑Δ!ʯʢ͔ͩΒʁ » ͨͿΜ php8,9,10ʂʢ͋Δͷ͔ʁ » ͍҃PHP2020ͱ͔Ͱ͔ͭ͑ΔͩΖ͏ » ʮ(͓ͦΒ͘)20Ҏ্͑Δphp.iniΛ֮͑ΔͷόϦϡʔ!(?)ʯ »
ʮͳΜͱHHVMͰ͔ͭ͑Δٕज़✌ʯ » (.hdfͱ͍͏ίϯϑΟάແ͔ͬͨࣄʹ͞Εͭͭ͋Δ) -
جૅࣝ » phpΠϯλϓϦλݴޠͰ͢ » ΣϒΞϓϦέʔγϣϯ։ൃʹΘΕΔલఏͰ͢ » ࠓphpΛ » ࣮ߦΤϯδϯ »
SAPI » ͰɺΘ͚ͯߟ͑·͠ΐ͏ -
PHPͷ࣮ߦڥͬͯ৭ʑ͋Δ » Apache+mod_php » Apache+CGI » nginx+FastCGI » IIS+FastCGI »
builtin server » (ͬͱ͋Δ) -
» ʮ͡Ό͋ɺPerlͰɺmod_perlͱCGIͱPlackͰ̍ίʔυͰಉʹಈ ࡞͢ΔΣϒΞϓϦͷॻ͍ͯΑʂʂʂʂʯ » ʮ͡Ό͋ɺRubyͰʢ͈́ʯ » ʮ͡Ό͋ɺ͡Ό̱ʢ͈́ʯ » ʮʢ͈́ʯ »
ʢεʔύʔΤϯδχΞͳΒॻ͚Δ͔͠Εͳ͍͚Ͳɺ ɹ૬มͳίʔυʹͳΔʣ -
ڥͷࠩΛຒΊͯΔͷ͕SAPI » SAPI͕ɺڥͱPHPΤϯδϯͷؒͰͱΓͳ͍ͯ͠Δ » SAPIͷ͓ӄͰɺphpʢͰॻ͔ΕͨϓϩάϥϜʣ » echo͢Εϒϥβʹग़Δ » Τϥʔ͕ΤϥʔϩάʹͰΔ »
$_POST$_FILEͰύϥϝλ͕ͱΕΔ » ແ৺Ͱηογϣϯ͕͑Δʢ$_COOKIEɺhttpϔομʣ » …ͱ͍ͬͨ͜ͱ͕ීวతʹѻ͑Δ -
SAPIͱʁ » Server API ͷུ » mod_phpɺCGIɺFastCGIɺCLIɺʑ » Έ߹ΘͤΔhttpdڥʹ߹ΘͤͯબͿ »
apacheͳΒmod_php,CGI,FastCGI » nginxͳΒFastCGI » IISͳΒCGI,FastCGI -
» httpdͱಉҰϓϩηεͰ͏͘͝ ʢmod_phpʣ » ඪ४ೖग़ྗͰΓͱΓ͢Δ ʢCGI,CLIʣ » FastCGIϓϩτίϧͰΓऔΓ͢Δ ʢFastCGIʣ »
httpͰΓऔΓ͢Δ …ͷͳΜͱແ͍ » ʢBuiltin server։ൃ༻Ͱ͢ʣ -
» (ྫ֎͋Γ·͢) » (ʮPHPࣗମʯ͕httpdʹͳΔͭͱ͔ » (reactPHP » (Swoole » (AppServer.IO
» ( » (Ͱɺݟͨࣄͳ͍Ͱ͠ΐʁ) -
Ͱɺຊͷphp.iniͱSAPIɺͲ͏͕ؔʁ » ৭ʑΛSAPI͕ٵऩͯ͠ɺphpίʔυʹޓੑ͕͋Δ » ͔͠͠ɺphp.iniͦ͏͍͔ͳ͍ͷͰ͋ͬͨ » αʔόʔߏ͕શવҧ͏ » વɺઃఆͷํ݁ߏҧ͏ »
ɺઃఆͰ͖Δ߲͕ଟগҧ͏ » ͭ·Γɺphp.iniΛΔʹSAPIΛҙࣝ͢Δඞཁ͕͋Δ -
్த·ͱΊ » ༷ʑͳ࣮ߦڥ͕͋Δ͕ɺphpͲ͜Ͱಉ༷ʹಈͧ͘ʂ! » ࠩҟSAPI͕ٵऩ͍ͯ͠Δ" » ͔͠͠ɺphp.iniʢͦͷपลʣͦͷݶΓͰͳ͍# » ʢͱ͍͑ɺϝδϟʔͳڥͷใάάΕ͙͢Ͱ͖ͯ·͢ɻ ɹେਓؾPHPͩΜʣ
» ʢ"PHP ʹΑΔ hello world ೖ"ͱ͍͏هࣄ͕ͱͯྑ͍Ͱ͢ ɹhttp://tech.respect-pal.jp/php-helloworld/ʣ -
[PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; PHP's initialization
file, generally called php.ini, is responsible for ; configuring many of the aspects of PHP's behavior. ུ engine = On expose_php = On max_execution_time = 30 max_input_time = 60 -
Ͳ͜ʹ͋Δͷ͔! » /etc ҎԼΛ୳͢ » CLIͰ php --ini » phpinfo()
ͷʮLoaded Configuration Fileʯͱ ʮAdditional .ini files parsedʯ » php_ini_loaded_file() ͱ php_ini_scanned_files();ͷฦ -
ҙ » ✅ʮௐ͍ͨڥͷɺௐ͍ͨϑΝΠϧͰ͠ΒΖʂʯ » ⚠ʮCLIͷphpͱɺوํ͕ௐ͍ͨڥຊʹಉ͡php͔ʁʯ » ·Δ͖ͬΓผͷϑΝΠϧͳΜͯࣄ͕βϥʹ͋Δ# » SAPIͰphp.iniͷॴ͕ࢦఆͰ͖Δ »
ଞʹ͋Δ͚Ͳޙड़ » ⚠ඇtext/htmlͳAPIphpinfo()໘ͩͧʢޙड़ʣ -
ඞવతʹ » php_ini_loaded_file() ͱ php_ini_scanned_files();ͷฦ͕ɺ ҆શͩͱ͓ΘΕ·͢ʢݸਓతҙݟͰ͢ʣ » ͜ΕΛฦͰऔಘ͠ɺͲ͔͜ͷϑΝΠϧʹͰॻ͖ग़͍ͯͩ͘͠͞ » ʢ!ʮ໘ɺҙ͢Εphp
--iniphpinfoͰ͍͍ͷͰʁʯ ɹ"ʮ͍ɺ΅͘Αͦ͘ΕͰௐ·͢ʯʣ -
ௐ͍ͨॴʹίʔυૠೖ $info = php_ini_loaded_file().",\n"; $info .= php_ini_scanned_files(); error_log($info); // ϑΝΠϧʹग़ྗ
ҎԼ݁Ռ /Users/uzulla/.phpenv/versions/7.0.1/etc/php.ini, /Users/uzulla/.phpenv/versions/7.0.1/etc/conf.d/xdebug.ini, /Users/uzulla/.phpenv/versions/7.0.1/etc/conf.d/my_special.ini -
tips: σόοάϩάΛͲ͔͜ʹग़͢ͳΒ… » file_put_contents('/tmp/info.txt', $info); » ఆ൪ɺָͰ͋Δ » ೋճͬͨΒ্ॻ͖͞ΕͪΌ͏…ʢAppend͢Δʁʣ »
/tmp ʹݟ͔ͭΒͳ͍ࣄ » ࠷ۙ private tmp ͱ͍͏ͷ͕͋ͬͯͳ… -
» phpʹerror_log()ͱ͍͏ศར͕ؔ͋Δ » error_log($info); » نఆͷΤϥʔϩάʹͰ·͢ » ʢͨͱ͑ɺapacheͷerror_logʹग़Δʣ » error_log($info,
$filename); ͱϑΝΠϧ໊ࢦఆͰ͖·͢ » ʮ͍ͱΓࣺͯΒΕΔͷͰɺͦͷ߹php.iniͰ log_errors_max_lenΛ;͠·͠ΐ͏ʯʮ͏ʔΜʯ -
» Config file scan directoryͱΑΕɺ࠷ۙΑ͔ͭ͘ΘΕ͍ͯ·͢ » php --ini Ͱ͠ΒΒΕ·͢(Scan for
additional .ini files) » ༗ΔσΟϨΫτϦҎԼͷ *.ini ͕શ෦ಡ·Ε·͢ɺ/etc/php.ini ͱ ಉ » ʮΠϯϑϥετϥΫνϟʔΞζίʔυʹͽͬͨΓ!ʯ » ʢphp.iniͷઃఆΛॻ͖͑Δͷʹɺsedͱ͔͏ͨ͘͠ͳ͍͔Β Ͷ…ʣ » ͳ͓ɺಉҰͷઃఆهड़͕͋ͬͨ߹ɺ্ॻ͖͞Ε·͢ -
ϑΥʔϚοτʹ͍ͭͯ ; comment here [hoge] key = value key2 =
"this is value2" key3 = On key4 = This is value4 ; ΫΦʔτ࣮ෆཁ -
» γϯϓϧͳɺΩʔͱϖΞ » ;ͷޙίϝϯτͰ͢ » [ʙ]͜Εແࢹ͞Ε·͢ɺԿΛॻ͍ͯҙຯͳ͍Ͱ͢ɻ » ͦ͏ʮ⚠sectionʹҙຯແ͍ʯΜͰ͢ʢҎ֎ͱΒΕͯͳ͍ʣ » ҹͰ͔͠ͳ͍
» (hoge[] = fugeͱ͍͏ॻ͕ࣜ͋Δ͕ɺݟ͔͚ͳ͍) -
ܕ(࣮࣭)ೋछྨ͚ͩ » String » Boolean » On/Off, true/false, yes/no,none »
⚠booleanஸೡʹ͔͍͋ͭ·͠ΐ͏ -
ҎԼͷߦɺͲΕ͕ʮΤϥʔʯʂʁ k1 = 1 k2 = True k3 = On
k4 = "On" k5 = text contain new line. k6 = text -
ਖ਼ղɺʮΤϥʔʯʹͳΓ·ͤΜʂʂ » ʮΤϥʔͰ͓͜ΒΕͳ͍͚Ͳʯk5ͷ"text contain"ͱͳΔ » A=B ܗࣜҎ֎ಡΈඈ͞ΕΔ » ⚠ͭ·Γɺϛε͖͔ͬͯͮͳ͍ͧʢҙʂʣ »
⚠BooleanʹޡͬͨςΩετΛ͋ͯͯແࢹ͞Ε·͢ » Α͋͘Δྫ: hoge = enable ͱ͔… -
ҎԼͷߦɺͲΕ͕ʮΤϥʔʯʂʁ ຊਓ = ຊޠ # hoge = 1 1 echo
! ⭕=❌ [] ] -
ΤϥʔʹͳΒͳ͍ͷා͍ʁlint͍ͨ͠ʁ » iniΛύʔε͢Δؔ͋Γ·͢ » parse_ini_file, parse_ini_string » http://php.net/manual/ja/function.parse-ini-file.php php >
var_dump(parse_ini_file('dummy.ini')); array(9) { ["k1"]=> string(1) "1" ུ -
ө͞Εͳ͍Μ͚ͩͲʁ! » ͪΌΜͱ࠶ىಈͨ͠ʁCLIͱmod_phpผͰ͢Α » nginxΛ࠶ىಈͯ͠ͳ͍ʁ(fpmΛ࠶ىಈ͠·͠ΐ͏) » php.iniͷॴɺؒҧ͑ͯͳ͍ʁ » ಠཱͨ͠phpinfo()Ͱө͞Εͯͳ͍ʁ »
ө͕ޙʑ্ॻ͖͞Ε͍ͯͳ͍ʁʢޙड़ʣ » ҰԠϩάݟΑ͏ -
Ͳ͜ͰઃఆͰ͖ͯศརͳphpͷઃఆॴࣄྫ » php.ini scan dirͷ.ini » httpd.conf nginx.conf
» .htaccess .user.ini » ϢʔβʔϓϩάϥϜ » ʮ͋Δؔ()Λ࣮ߦ͢Δͱɺ҉ʹมΘΔʯ » ڥมɺWindowsͷϨδετϦ…etcetc -
ௐΔͨΊͷؔ » phpinfo > লུ » ini_get > Α͔ͭ͘͏ »
ini_get_all > ࢲΑ͔ͭ͘͏ » get_cfg_var > త͕ҧ͏ -
ini_get() » ini_get ( string $varname ) » ݱࡏͷઃఆΛҰͭऔಘͰ͖Δ »
⚠ࣦഊ࣌ʹFalse͕ฦΔ » ⚠ฦʮStringʯͰ͋Δ -
ʮࣦഊ࣌ʹfalseΛฦ͠·͢ʯ » ϛΤϛΤͷ᠘ » ⚠PHPͷࣗಈมͰɺfalseͱۭจࣈΛϛεΔ » Α͋͘Δϛε͕ҎԼ if( ini_get('display_error') ){
die('display_errorফ͠·͠ΐ͏'); } -
if( ini_get('display_errors') ){ die('display_errorsফ͠·͠ΐ͏'); } » ʢ͜ͷίʔυ͕Ͳ͏ͳͷ͔ɺͱ͍͏ͷଞॴʹஔ͘ͱͯ͠ʣ » ͨͩ͘͠display_errorsʢݸਓతʹΑ͋͘ΔTypoʣ »
ΩʔΛؒҧ͑Δͱɺ͔ͳΒͣfalseʹͳΔ » ʮ·͋ɺ===Ε͍͍Ͱ͢ΑͶʂʯʢ܇࿅͞Εͨਓؒͷൃʣ -
// php.iniʢϑΝΠϧʣͰ Off ͩͱ… short_open_tag = Off // ͜ͷΑ͏ʹۭจࣈ͕ฦͬͯ͘Δ php
> var_dump(ini_get('short_open_tag')); string(0) "" » php.ini هड़ͷ··Ͱͳ͍ʢྫ֎͋Δʣ » มΘΔͷྑ͍͕ɺॳݟࡴ͠Ͱ͢ » ͳͥ On/Offɺtrue/falseɺ1/0 Ͱͳ͍ͷ͔… » ʮࣗಈมͷPHPͰ͢ɺ׳Ε·͠ΐ͏!ʯ -
php > var_dump( ini_get('upload_max_filesize')); string(4) "2M" » upload_max_filesize هड़͕ͦͷ··Ͱ͖ͯ·͢ »
upload_max_filesize ͷࢦఆʹɺK,M,GͳͲͷॖه๏͕͑ͯਓ ͕ಡΈ͘͢Ͱ͖Δɻ » http://php.net/manual/ja/ faq.using.php#faq.using.shorthandbytes » ͔͜͠͠ΕʹΑͬͯҾ͖ى͜͞ΕΔ൵ܶʂ() -
php > echo ini_get('upload_max_filesize'); 2M // 2Mbyte = 2*1024*1024 if(
1*1024*1024 > ini_get('upload_max_filesize') ) { die("plz more!!!"); } //-> plz more!! // ͋ΕΕΕʁ php > echo (int)"2M"; // "2M"ΛΩϟετ 2 » ⚠օ͞Μ͝ଘ͡ɺ"2M" ͕ධՁͰ 2 ʹͳΔ҆ఆͷࣗಈม » ͪͳΈʹɺॖه๏ΛόΠτʹม͢Δؔͳ͍ɻͳΜͰ… » ֤ࣗॻ͔͘ɺൿͷͨΕΛάάΓ·͠ΐ͏(ͬͯͳ͍͔֬ೝ) -
ini_get_all() » ini_get_all([str $extension [,bool $details]]) » ݱࡏͷઃఆΛɺશ෦ΛऔಘͰ͖Δ » Ҿ(null,
false)͕͓͢͢Ί » ฦΩʔͱͷྻ -
php > var_dump(ini_get_all()); array(233) { ["allow_url_fopen"]=> // Ωʔ໊ array(3) {
["global_value"]=> // άϩʔόϧͷʢʁʣ string(1) "1" ["local_value"]=> // ݱࡏͷ string(1) "1" ["access"]=> // ΞΫηεϨϕϧ int(4) } -
null, false ࢦఆྫ php > var_dump( ini_get_all(null,false)); array(233) { ["allow_url_fopen"]=>
string(1) "1" ["allow_url_include"]=> string(0) "" -
php > var_dump(ini_get('upload_tmp_dir')); string(0) "" php > var_dump(ini_get_all(null, false)['upload_tmp_dir']); NULL
// ಥવͷNULLʂʂ » ʮ໊લ͕ࣅͯΔ͚ͩͰɺೋͭؔͷฦ͕ಉ͡ͱ୭͕ݴͬͨʁʯ » ຊདྷ upload_tmp_dir ɺ(php.netᐌ͘)σϑΥϧτ͕NULL » ini_getͷ΄͏͕ਖ਼͘͠(?)ͳ͍ » ܕΛҙࣝͨ͘͠ͳΓ·͢Ͷʂ -
ΈΜͳେ͖print_r… php > echo print_r("",1); // ͳʹͰͳ͍ php > echo
print_r(null,1); // ͳʹͰͳ͍ php > echo print_r(true,1); // true1ʹͳΔ… 1 » ͜ͷΑ͏ʹprint_rܕΛͩ͞ͳ͍ » ͠ܕͳ͍ͷͰɺผͷಓ۩͕ඞཁ -
meanwhile in php conference 2015... » PHP࡞ऀͷϥεϜε͕͖͍ͯͨ » ʮࣃϒϥγʯͰ༗໊ͳਓ »
ϔλͳӳޠͰ͜ͷ݅Λૌ࣭ » ࡞ऀʮͦΕͦ͏͍͏ͷͩɺobΛ͔ͭ͑!ʯࢲʮ͍…"ʯ » PHPʹٹ͍ͳ͔ͬͨ » ࢲʹ৯͍Լ͕Δӳޠྗͳ͔ͬͨ(fin…) -
serialize() php > echo serialize(0); // i:0; php > echo
serialize("false"); // s:5:"false"; php > echo serialize(false); // b:0; php > echo serialize(null); // N; » ҰจࣈͰܕ͕Θ͔ͬͯศརʂ! » i:int, s:string, b:bool, N:null » օɺPHPͷγϦΞϥΠζܗࣜΛಡΉΑ͏ʹͳΓ·͢ʢΑͶʁʣ -
json_encode php > echo json_encode(""); // "" php > echo
json_encode(null); // null php > echo json_encode(true); // true php > echo json_encode("true"); // "true" php > echo json_encode(1); // 1 php > echo json_encode("1"); // "1" » ܕɺͪΌΜͱΈΕΘ͔Δ! -
ݸʑͰͳ͘ɺશ෦ͷઃఆΛݟ͍ͨ࣌ php > echo json_encode(ini_get_all(null,false), JSON_PRETTY_PRINT); { "allow_url_fopen": "1", "allow_url_include":
"", "arg_separator.input": "&", » ݁ՌΛjson_encodeͰɺJSON_PRETTY_PRINT » ൺֱʹศརͰ͢ʢॏཁʣ! -
jsonͱdiffͰࡶʹൺֱ͢Δྫ! $ diff 56.json 7.json 26c25 < "date.timezone": "Asia\/Tokyo", ---
> "date.timezone": "", 42c41 < "error_reporting": "-1", --- > "error_reporting": "22527", » ֤ࣗπʔϧΛదʹ -
tips͓ΘΓ » ✅ී௨ json_encode() ͕Ұ൪Ͱʁ » ػցతॲཧʹ͍͍ͯΔ » ଞʹvar_export()ͳͲ͔ͭ͑·͢ɺ΄΅jsonʹ͍ۙ͠ݟ͢͞ »
serialize() ΛਓྗͰಡΉͷʹɺ࣌ؒܦݧ͕͍Δ -
» ֬ೝͨ͠Β࣍ઃఆͰ͢ΑͶ » ʮ͏ͬͨͷͰʁʯʮͦͷ݅Ͱͳ͍ʯ » php.ini(ϦΞϧ)ͷઃఆʮ࣮ߦ࣌ʹมߋͰ͖Δʯ <a href="<?php ini_set('display_errors', 0);
some_broken_func(); ini_set('display_errors', 1); ?>">ࢮ</a> -
ini_set » ini_set ( string $varname , string $newvalue )
» ΩʔͱΛηοτ͠·͢ » StringͰ͢ʢҙʣ » ⚠ฦʮมߋલͷʯͰ͢ʢҙʣ » ⚠ࣦഊ࣌FALSE͕ฦΓ·͢ʢҙʣ » ⚠ઃఆͰ͖ͳ͍ͷ͋Γ·͢(ޙड़) -
php > ini_set('mbstring.strict_detection', 'On'); php > var_dump(ini_get('mbstring.strict_detection')); string(2) "On" php
> var_dump(mb_get_info()['strict_detection']); string(3) "Off" <-- !!?? » mbstring.strict_detectionͰ֬ೝ » boolܕͳͷͰɺphp.iniͰ"On"Λࢦఆ͢Δ » ͔͠͠ini_set ɺ"On"Λਖ਼͘͠ड͚͚·ͤΜʂ! -
৭ʑͳΛini_setܦ༝Ͱboolʹ͍ΕΔͱ… » OnʹͳΔ » true, 1, -1 » OffʹͳΔ »
false, "true", "false", 0, "On", "Off" ͏ʔΜ͜ͷ! -
ࢿྉΛΈͯΈ·͠ΐ͏ » php.iniͰ true/false,on/off, yes/no, none ͱࢦఆ͢Δ http://php.net/manual/ja/configuration.file.php ; ཧɺ࣍ͷ͍ͣΕ͔Ͱࢦఆ͠·͢
; true, on, yes ; ·ͨ false, off, no, none » ͔͠͠ɺ"true"Λ͍ΕΔͱɺΦϑʹͳΔ…ͷ͕… » ·͕ͪ͑ͳ͚ΕͲ͏ͱ͍͏͜ͱͳ͍! -
ଞʹҋ͕ » σϑΥϧτNULLͷmbstring.substitute_character » ini_setͰNULLΛ͍Εͯ""ʹͳΔΑ͒… » ʢͨͩɺ""≒NULLͰ͋Γɺࠔͬͨ͜ͱͳ͍…ʣ php > ini_set('mbstring.substitute_character',
null); php > var_dump(ini_get_all()['mbstring.substitute_character']); string(0) "" -
ΞΫηεϨϕϧ࢛छ » PHP_INI_ALL =>Ͳ͜ͰઃఆՄೳɺଟ͕͘ίϨ » PHP_INI_USER =>΄΅ଘࡏ͠ͳ͍ » PHP_INI_PERDIR =>.htaccess,.user.ini,php.ini,httpd.conf()
» PHP_INI_SYSTEM =>php.iniɺhttpd.conf() -
» PHP_INI_PERDIR » max_input_varsɺmax_input_time » auto_append_fileɺauto_prepend_file » post_max_size » session.use_trans_sid
» short_open_tag » upload_max_filesize -
·ͱΊ » php.iniʹ̐छͷΞΫηεϨϕϧ͕͋Δ » ͨͩɺཧऀ੍͕ݶͨͦ͠͏ͳɺmemory_limitͱ͔ɺ max_execution_timeΈ͍ͨͳͷALLͰ͋Δ » ηΩϡϦςΟΑΓɺΠϯλϓϦλͳͲͷಈ࡞্ͷ߹͕ϝΠϯͷ۠ ͚ͬΆ͍ »
ʮphp.iniͬͯݖҖ͕ͳ͘ͳ͍…ʁβϧͰʁʯ » ͬͱɺͦΕΛ͙खஈ͋Δ(ޙड़) -
CLI » /etc/php.ini » ͋Δ͍-c /path/to/php.ini php.iniΛύεͰࢦఆ » ͋Δ͍/etc/php-cli.ini ͷઃஔ
» ຊདྷͷphp.iniͷdirʹɺphp-{SAPI໊}.ini͕͋Δͱphp.iniʹ༏ ઌ͞ΕΔ -
CLIಠಛ͕͋͞Δ » CLI͍͔ͭ͘ڍಈ͕ҧ͏ʢ૬ख͕TERMͳͷͰʣ » phpinfoग़ྗ͕txtϞʔυʹͳͬͨΓ » ࣮ߦ࣌ؒͳͲ֤छϦϛοτ͕֎ΕͨΓ » CLIखܰͰ৭ʑ֬ೝͰ͖Δ͕ɺσϑΥϧτ͕มΘΔͷͰɺςετ ʹ͏࣌ҙ͠·͠ΐ͏
» cli-d memory_limit=-1ͳͲͱCLIΦϓγϣϯͰࢦఆՄೳ -
mod_phpͷՃσΟϨΫςΟϒ » php_value key value ͱStringͷઃఆ͕Մೳ » php_admin_value ಉ্͕ͩɺϢʔβ͕ઃఆ্ॻ͖Ͱ͖ͳ͘ͳΔ »
php_flag key on ͱBoolͷઃఆ͕Մೳ » php_admin_flag ಉ্͕ͩɺϢʔβ͕ઃఆ্ॻ͖Ͱ͖ͳ͘ͳΔ -
CGI » /etc/php.iniͳͲ » .user.ini » .htaccessͷphp_valueͷ༻ɺه๏php.iniͱಉ͡ » ಉҰDir͔ΒDocRoot·Ͱͷؒʹઃஔ͢Δ »
ҰಡΉͱσϑΥϧτͰ̑Ωϟογϡ͞Ε·͢ » publicʹஔ͘=࿙Ӯʹҙʂʢ.htaccessΈ͍ͨʹ403ʹ͠Α͏ʣ -
nginx+FastCGI » جຊCGIͱಉ༷ʢphp.iniɺ.user.iniʣ » nginxͷfast_cgi_paramͰՃࢦఆՄೳ » fastcgi_param PHP_VALUE "memory_limit=-1; max_execute_time=-1";
» ಉ༷ʹɺPHP_ADMIN_VALUE͋Δ » /etc/php-fpm.conf(ϓʔϧઃఆϑΝΠϧɺ࣍ϖʔδ) -
ϓʔϧઃఆϑΝΠϧ php_flag[display_errors] = off php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M » ·ͨ৽ͨͳه๏͕͏·Εͨ…! -
·ͱΊ » php.iniͷޙʹɺ֤SAPIʹΑΔઃఆ͕Ͱ͖Δ » ֤SAPIͰઃఆϑΝΠϧख๏͕͕ͪ͏ » ઃఆͰ͖ΔΩʔ໊ͳͲಉ͡ » ⚠ͨͩ͠ɺphpͷఆར༻Ͱ͖ͳ͍ʢҙʣ »
✅php_admin_*ͰɺϢʔβʔʹ੍Λͭ͘ΕΔ -
͍ʹ͑͠ͷ࣮ߦڥ » PHP5.1ɺ5.2ɺ5.3͋ͨΓ7ͱ૬͕ͪͬͨΓ͢Δ » ʮͦͷ࣌Λੜ͖͖ͯͨԶͨͪʯʹΑ͍͚Ͳɺͦ͏Ͱͳ͍ਓͭ Βͦ͏ » php.netͷΛΑΈ·͠ΐ͏ » ࣮ػͰ৺ߦ͘·Ͱࢼ͠·͠ΐ͏
» ςετ༻ʹݹ͍phpΛϏϧυ͢Δͷʹ͔ͭΕͨΒɺ ݹ͍LinuxσΟετϦΛDL͢ΔͱΑ͍Ͱ͢(ਅإ) -
σϑΥϧτมߋΛ֬ೝ͢Δ » php.netʹʮʯͱ͍͏ʮ͜Εͦ͜ຊฤʯΈ͍ͨͳใ͕͋Δ » ͦ͜ΛͪΌΜͱνΣοΫ͢Εɺେମେৎ » php -n -aͰiniΛϩʔυͤͣʹini_get_allΛಈ͔ͯ͠ɺࠩΛݟΔ »
͕ࠩ͋ͬͨΒɺదʹຒΊΔiniΛॻ͘ // ϦϞʔτͱखݩΛ֬ೝ͢Δ༗໊ςΫɻ͕ͩɺલड़ͨ͠Α͏ʹ҆қʹcliͰ֬ೝ͢Δͷ͓קΊ͠ͳ͍ɻ diff <(php -r 'phpinfo();') <(~/.phpenv/versions/5.6.9/bin/php -r 'phpinfo();') diff <(php -r 'phpinfo();') <(ssh remote 'php -r "phpinfo();"') diff <(ssh remote1 'php -r "phpinfo();"') <(ssh remote2 'php -r "phpinfo();"') -
্͕Γଓ͚Δόʔδϣϯɺେม » ࡢࠓPHPͰΨϯΨϯόʔδϣϯΛ্͍͛ͯ͘ελΠϧ » όʔδϣϯ্͛Δલʹςετ͠·͠ΐ͏Ͷʙ » phpɺphpenvͱ͔Ͱෳόʔδϣϯཧ͘͢͠ͳΓ·͔ͨ͠Β » ʢೖΕ͍͢ͱݴ͍ͬͯͳ͍ʣ »
σΟετϦͷඪ४ɺಛʹRHCentOSͷΜͼΓͯ͠ΔͷͰɺΏΔ; ΘͦΕͰ… » ʢver্͕Βͳ͍͚Ͳɺ͋Δఔύον߱ͬͯ͘ΔͷͰ…ʣ -
tips ࢁͷphp.iniΛ๊͑ͨԶͨͪͲ͏͢Ε » ຖճphp.iniΛΤσΟλͰ͍͡ΔͷେมͳͷͰ… » php.ini͞ΘΒͣɺඞཁͳઃఆΛ͔͍ͨiniΛconf.dʹίϐʔ͠ɺ্ ॻ͖͢Δͱָ » ࢲɺखݩͷphpenv૬खπʔϧΛ͔͍ͯͲ͏ʹ͔ͯ͠·͢ »
https://github.com/uzulla/setmyphpini.php -
tips Ͱɺmod_phpͲ͏͢Ε͍͍ͷΑ » php-buildphpbrew͕͋ΔݱͰɺmod_phpҰखؒ » ͪΌΜͱapacheͰ֬ೝ͢Δ͔͠ͳ͍… » ࢲapacheΛbuiltin serverΈ͍ͨʹαοͱཱͯΔπʔϧΛॻ͍ͯɺ ͦΕͰͬͯ·͢
» https://github.com/uzulla/apachehere » ʢlibphpX.soͭ͘Δͷɺґવͱͯ͠μϧ͍ʣ -
log_errors = On ; ͦͦΤϥʔϩάΛऔΔ͔ error_reporting = E_ALL & ~E_DEPRECATED
& ~E_STRICT display_errors = Off ; ը໘ʹΤϥʔΛग़͔͢ display_startup_errors = Off ; PHPͷىಈγʔέϯεʹ͓͍ͯൃੜͨ͠ΤϥʔΛը໘ʹग़͔͢ log_errors_max_len = 1024 ; Τϥʔϩάͷ࠷ʢΓࣺͯ error_log = ; ग़ྗઌɺলུ࣌SAPI html_errors = On ; SAPIग़ྗ࣌ɺΤϥʔจࣈྻΛhtmlԽ͢Δ͔ -
» phpͷΤϥʔ͔ΘΓͭͭ͋Δ » php<=5.6 ྫ֎ͱΤϥʔ͕ผ » php>=7 ྫ֎ͱΤϥʔ͕ʮࣅͯΔʯ » Errorʢ෦తʹྫ֎ͳͷ͕ͩɺϢʔβʔ࡞Εͳ͍ʣ
» Exceptionʢྫ֎ˍϢʔβʔྫ֎ʣ » ྫ֎Ωϟον͖͠Εͳ͚ΕΤϥʔͱͳΓɺͦΕϩάʹग़Δ -
» error_reporting ʹεΠονࢦఆ͢Δ » දݱ͕ͩɺఆͷϏοτԋࢉͰࢦఆͰ͖Δ » PHPer͕།ҰϏοτԋࢉΛ͢ΔͰ͢ʢʁʣ » ྫ E_ALL
& ~E_DEPRECATED & ~E_STRICT » = 22527 ɺ֮͑ΒΕΔ͔ʂ(ͳͷͰbitԋࢉ) » શ෦ͷΤϥʔ͔ΒɺඇਪΤϥʔͱɺStrictΤϥʔΛൈ͍ͯΔ » ఆͳͷͰ*.iniini_setҎ֎Ͱ͜ͷه๏͔ͭ͑ͳ͍ » ʮԿߟ͑ͣɺ-1 ʹ͓͚ͯ͠ΦοέʔʯʢݸਓͷײͰ͢ʣ -
» ͍ͬͯ͏͔ɺ-1 Ҏ֎ʹઃఆ͢ΔਓɺΘ͔͍ͬͯΔͷ͔ͳ͍ͷ͔ » ࠷ॳʹ͔͍͚ͨͲɺݟ͑ͳͯ͘͠Δ͚ͩͰʁ » E_DEPRECATEDɺݱʹΑͬͯʮΘ͔Δʙํͳ͍ΑͶʙʯ » E_NOTICEΛάϩʔόϧʹམͱ͢ਓָ؍తͰɺਓੜָͦ͠͏() »
Θ͔ͬͯͬͯΔͳΒ͍͍ͱ͓͍·͢ » ʮPHP੍ࣗ৺͕ͱΊΒΕΔݴޠʯ -
» log_errors_max_len » ΨϯΨϯμϯϓ͢Δਓͷ͠·͠ΐ͏ » display_errorsɺdisplay_startup_errors » ։ൃ͔࣌ΓOnͷ΄͏͕͔ͲΔࣄଟ͍Ͱ͢ » PHPࠣࡉͳΤϥʔɺͦͷ··͢͢Μ͡Ό͏ͷͰɺdisplay͠ͳ
͍ͱΤϥʔϩάݟͳ͍͔͗Γແݴɻ » ʮΤϥʔΤϥʔʂNoticeͰͱ·ͬͯ΄͍͠ʂʯ » ʢࢭΊΔςΫ͋Γ·͢ʣ -
» error_log » ະࢦఆ࣌SAPIͷΤϥʔϩάɺࢦఆ͢Δͱ͖ͳϑΝΠϧ SYSLOGʹΤϥʔΛग़ͤ·͢ɻ » ApacheͷΤϥʔϩάେ͗ͯ͢ݟͮΒ͍ͱ͔ɺਂԕͳཧ༝ͰΤ ϥʔϩά͕ཌʹͳΒͳ͍ͱݟΕͳ͍ɺͷ߹ʹศར() » ॻ͖ࠐΊͳ͍߹ɺSAPIͷϩάʹϑΥʔϧόοΫ͞Ε·͢
» ͏͔ͬΓ ini_set('error_log', 'php.log');ͱ͔ͬͯɺެ։ σΟϨΫτϦʹग़ྗ͠ͳ͍Α͏ʹؾΛ͚͍ͯͩ͘͞Ͷɺϑϧύε ࢦఆʹͳΔΑ͏ʹॻ͜͏ʂ -
» ⚠error_logɺphp.iniͰࢦఆ͠ͳ͍΄͏͕͍͍ » ⚠Builtin serverCLIͰը໘ʹΤϥʔͰͯ͜ͳ͘ͳΓ·͢(᠘) » SAPIଆͷphp_valueͰઃఆ͢Δͷ͕ྑ͍Ͱ͠ΐ͏ » (͋Δ͍ɺہॴini_set͕Α͍͔ͱ) php
> echo ini_get("error_log"); /tmp/php_errors.log php > echo $a; // ະఆٛมΛ৮͍ͬͯΔͷͰɺΤϥʔ͕ͰΔ͕ͣͩग़ͳ͍ php > ^D $ tail /tmp/php_errors.log [XXXX] PHP Notice: Undefined variable: a in php shell code on line 1 -
» ϩάϩʔςʔγϣϯͱ͔ɺແ͍ɻ // init.dͰɺڥมࢦఆͰɺޙ࠶ىಈͰ…ʂʁ export D_OF_WEEK=`date +%w` rm -f /path/to/php_errorlog.$D_OF_WEEK
// php.ini error_log = php_errorlog.${D_OF_WEEK} - ʢδϣʔΫͰ͢ʣ - ૉʹlogrotateઃఆͯ͠࠶ىಈͨ͠΄͏͕ປ͕ߴ͍Ͱ͢ - ύΠϓͰ͖ͳ͍ͷͰɺ rotatelogsͱ͔͑͵ -
» error_reporting = -1 ͕࠷ڧ! » ʢલड़ͷ௨ΓͳͷͰʣ֬ೝ͍͢͠͠ » ʮ͔͠͠ݱ࣮ੈքਏ͍ۤ͘͠"ʯ »
E_NOTICE͕མͱͯ͋ͬͨ͠ΒɺղΓ͍͢ةݥϑϥά » <s>ෆՄආͳίʔυɺͦ͜Ͱ͚ͩerror_reportingΛม͑ͨΓ@Λ ͚ͭΑ͏ɺͬͺΓPHPศར</s> -
date.timezone ·ΘΓ date.timezone = "Asia/Tokyo" ;date.default_latitude = 31.7667 ;date.default_longitude =
35.2333 ;date.sunrise_zenith = 90.583333 ;date.sunset_zenith = 90.583333 -
༨ஊɿṖͷҢܦ ;date.default_latitude = 31.7667 ;date.default_longitude = 35.2333 ;date.sunrise_zenith = 90.583333
;date.sunset_zenith = 90.583333 » ʮdate_sunrise() ͱ date_sunset() ͰͷΈ༻͞Ε·͢ɻʯ » ͳΜͱదʹઃఆ͢Δ͜ͱͰͷग़ͱͷೖΓΛܭࢉͰ͖·͢ʂ » php.iniʹ࣋ͭඞཁ͕͋ΔͷͩΖ͏͔…ਂԕͳΔཧ༝͕͋Γͦ͏ʂ -
৭ʑ͋Δ͚Ͳɺେ͜ΕͰΑ͍✅ default_charset = "UTF-8" ; Content-Type ͷσϑΥϧτ internal_encoding = "UTF-8"
[mbstring] mbstring.language = Japanese mbstring.internal_encoding = "UTF-8" mbstring.strict_detection = On -
༨ஊ(ʁ)ʮdefault_charsetͱҰମ…ʯ ; Use of this INI entry is deprecated, use
global internal_encoding instead. ; internal/script encoding. ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding ;mbstring.internal_encoding = » ʮmbstring.internal_encodingͱ͔࣌Εɺ ࣌default_charsetҰՕॴͰ͓̺!!!ʯ » ࢲʮʔͦ͏ͳΜͩʯ -
» ʮʢdefault_charsetʣ mbstring.internal_encoding ͕ະઃఆ ͷ߹ͷσϑΥϧτͱͯ͠༻͍ΒΕ·͢ʯ » ʔɺ͍͢͝ɺָͰ͍͍Ͷʂ » ͕ʂ೦ʂ »
SJIS-winɺೖΕͯө͞Εͳ͍ʂʢίϝϯτʹॻ͍ͯ͋Δʣ » eucJP-winμϝͬΆ͍ʂ » UTF-8ͳΒɺͦͦσϑΥϧτΖ͕͍ » ʮ…·ɺੲͳ͕Βʹઃఆ͠·͢Θɺ৴༻Ұ൪ʯ -
ՃͰ… » mbstring.substitute_character » จࣈྻͷΤϯίʔσΟϯάΛมͨ͠ࡍʹɺมͰ͖ͳ͔ͬͨจࣈ Λʮήλ(ˤ)ʯͷಛఆจࣈʹஔ͢Δ͜ͱͰɺม࿙ΕΛΘ͔ Γ͘͢Ͱ͖Δɻ » SJIS,EUC,JISڞଘ࣌ͷҨײ͋Δ »
UTF-8ͷ࣌͏͍Βͳ͍ͷͰ » ʢͱɺࢥ͍͍͚ͨͲ·ͩ·ͩcp932Λ͏ࣄ͋ΔͶ…ʣ -
ҎԼةݥͳͷͰར༻͠ͳ͍͜ͱ! ;mbstring.http_input = ;mbstring.http_output = ;mbstring.encoding_translation = Off ;mbstring.func_overload =
0 ;mbstring.http_output_conv_mimetype= » ؒҧͬͯʮศརʂʯͱࢥ͍͚ͬͯͳ͍ -
·ͱΊ » ✅σϑΥϧτUTF-8ʹͳ͚ͬͨͲɺ֮ࣗͷҝʹࢦఆ͠·͠ΐ͏ɻ » ࣗಈมܥɺؔΦʔόʔϩʔυμϝઈର » ίϝϯτphp.netͱ࣮ػͷ৯͍ҧ͍ɺૉʹ࣮ػ༏ઌ͠·͠ΐ͏ » ଞʹɺίϝϯτʹ͋Δ http://php.net/internal-encoding
ͳͲͷURL͕404ͩͬͨΓ͢ΔͷͰ͢ » ʮphp.net࠷ߴʂʯͱ͔͍͍·͕͢ɺͦΜͳΜͳͷͰ͢ -
Ϧιʔε੍ݶ » PHPer͕ॳΊͯάάΔࣄʹͳΔͷ͕͜͜ΒΜͰ » max_execution_time = 30 » memory_limit =
128M » ʢ࣮ࡍɺͬͱͬͱΒͯ͠Α͍ʣ -
҆શห » PHPͲΜͳʹΞϗͳίʔυΛ͔͍ͯɺ͜͜ΒΜΛҋӢʹ͛ͳ ͚Εʢൺֱతʣ҆શͳͷͰ͢ » ʮPHPΏΔ;ΘίʔυΛࣻ͢!ʯ » ʢ݅ࣜΛ͍ͭϊϦͰॻ͍ͯɺແݶϧʔϓ͢Δͷݟ͔ͯΒ͢λ Πϓͷਓͱ͔ʣ »
ʢ2GB͘Β͍͋ΔϩάϑΝΠϧͷઌ಄1ߦΛͩͨ͢Ίʹɺશ෦Λ file_get_contentsͨ͠Γ͢Δਓͱ͔ʣ -
צҧ͍͞Ε͕ͪͳࣄ » max_execition_timeCPU࣌ؒҎ֎ɺಛʹI/O࣌ؒϊʔΧϯτ ͳͷͰҙ » ʮʢ࣌ܭΛݟͯʣ͋ͱ10ඵͰڧ੍ऴྃʯͰͳ͍ɻ » ⚠ͨͱ͑DBϚλʔͳߴෛՙͰશવऴྃ͠ͳ͍ » ී௨ͷΣϒΞϓϦͰԿඵCPU࣌ؒ৯͏ͳΜͯ͋Γ͑ͳ͍
» ʢצҧ͍ͯ͠ɺApache+mod_phpͰΨϯΨϯϓϩηεΛ্͛Δɺ ِεέʔϧΞοϓපʹؕΔ=>ѱԽ͕Ճʣ -
» memory_limitͱɺfpmͳΒϓϩηε΄Ͳ΄Ͳʹ͠Α͏ » ʢfpmͷpm.max_children) » ʮ΄Ͳ΄Ͳͱʁʯʮଟͯ͘ίΞͷ10ഒ͑ͯͨ͜ΒɺҰݕ ূͯ͠Α͍ͷͰʯ(ݸਓͷײͰ͢) » ʮmod_phpʁʯʮલஈʹnginxஔ͘ͱΑ͍ͷͰ()ʯ »
ࣗ৴͕ͳ͍ʁisuconͬͯͭͷաڈͰͨΊͯ͠ΈΔͱ͍͍Αʂ! ԾʹΘ͔ͣʹεϧʔϓοτ্͕ͬͯɺϝϞϦރׇͰͷswapOOM KillerͷڪාͱΓ߹Θͳ͍Α -
file_uploads = On upload_tmp_dir = upload_max_filesize = 2M max_file_uploads =
20 post_max_size = 8M -
» upload_max_filesize΄Ͳ΄Ͳʹ » ϑΝΠϧαΠζ͕σΧΠͱ߈ܸʹͳΓ͏Δ » ࠷ۙճઢ͍͠ɺDiskͷখ͍͞ΠϯελϯεͩͱϠϥΕΔ » post_max_sizeͷมߋΛΕ͕ͪ » post_max_size
> upload_max_filesize » ʢෳΞοϓϩʔυߟྀ͠·͠ΐ͏ʣ -
» 2GBҎ্ͷΞοϓϩʔυΛѻ͏߹… » ʮҟৗʁେৎʁʯʮҎ্Ͱ͢ɺେৎͰ͢ʯ » 64bitڥʹ͠·͠ΐ͏ » php>=5.6ʹ͠·͠ΐ͏ » nginx/apacheͷઃఆʢ੍ݶʣ֬ೝ͠·͠ΐ͏
ʢඇৗʹΑ͋͘ΔϋϚϦॴʣ » ܦ࿏ʹ͋ΔϦόʔεϓϩΩγ -
» max_input_time » ʮεΫϦϓτ͕ POSTɺGET ͳͲͷೖྗΛ ύʔε͢Δ࠷େͷ࣌ؒΛɺ ඵ୯ҐͰࢦఆ͠·͢ɻ ͜ΕɺαʔόʔଆͰ PHP
͕ىಈ͔ͯ͠Βε ΫϦϓτͷ࣮ߦΛ։࢝͢Δ·Ͱͷ࣌ؒͰ͢ɻʯ » Α͘Θ͔ΒΜͶʁਖ਼ԶΑ͘Θ͔ΒΜ » େ͜ΕͬͱΒͤ·͢ » ʮ͜ΕηΩϡϦςΟͳͷʁʯʮ͏ʔΜ…͍ΕΔॴ͕…ʯ -
» max_input_nesting_level = 64 » PHPhoge[hage]Έ͍ͨͳύϥϝλ͕ࣗಈతʹྻͱͯ͠ѻ͑Δɺ ͦͷ࠷େਂ͞Ͱ͋Δɻ » σϑΥϧτͷ64ɺͭ·Γ64࣍ݩม·ͰڐՄ »
ͦΜͳʹڪΖ͍͠ϓϩάϥϜ͕͋ΔͷͩΖ͏͔…! ͱೲಘͤ͞Δύϫʔ͕PHPʹ͋Δ » ਫ਼ʑ5ͱ͔Ͱʁ -
» max_input_vars = 1000 » POSTGETͷΫΤϦύϥϝλͷ࠷େ » 1000Λଟ͍ͱΈΔ͔গͳ͍ͱΈΔ͔ɺਓʹΑ༷ͬͯʑͰ͠ΐ͏ɺͲ ͏Ͱ͔͢ʁ »
1000ͰͨΓͳ͍͜ͱ͋Δʢਅإʣ » ओʹDoSରࡦ͕ϕʔεʢϋογϡίϦδϣϯ߈ܸͱ͔ʣ » ͑ΔͱʁWARN͕ͰͯɺΓࣺͯΒΕͯɺ࣮ߦਐߦ͢Δʢҙʣ -
» open_basedir = /var/www/html:/tmp » phpίʔυ্͔Βࢦఆ͞Εͨpathͷ֎ΛಡΈॻ͖Ͱ͖ͳ͍Α͏ʹ » ʮ҆શͦ͏ͩʂ͜ΕPHPքͷSELinux͔ʂ!ʯ » ʢͭ·Γɺ͙͢ʹΦϑʹ͞Ε·͢ʣ
» ʢ͔͠ɺPHP_INI_ALLͰ͢ʣ » ෳࢦఆ࣌PathΛ:Ͱͭͳ͙͕ɺWinͷ߹;Ͱͭͳ͙ » ҰจࣈͷΘΓʹɺ͍PATH_SEPARATORఆΛ͔ͭ͑ղܾ -
» allow_url_fopen = On » $html = file_get_contents('https://example.com/'); » ΛڐՄ͢Δ͔
» ڐՄ͠·͠ΐ͏! » ʢ͜Ε͕Ͱ͖ͳ͔ͬͨΒͳͥPHPΛ͔͍ͭͬͯΔͷ͔ٙΛ๊͍ͯ͠ ·͏…ʣ -
» allow_url_include = Off » require ('http://example.com/super_lib.php'); » ΛڐՄ͢Δ͔ɻ »
ʮϠόͳ͍ʁ!ʯʮωοτ͔ΒίʔυDLͱ͔Ҿ͘Θ"ʯ » curl https://hoge/installer.sh | bash ͬͯͬͨ͜ͱ͕ͳ͍ਓͦ͏ݴͬͯྑ͍ » Ͱ·͊ɺແ͍Θʔ -
» sql.safe_mode = Off » ʮ໊લ͔Βͯͭ͠Αͦ͏ʂ!ʯ » ͔͠͠ʮPHPͰ͍͏ͱ͜Ζͷsafe_modeʯͱ͍͏ҙຯͰ͋Γɺผʹ safeͰͳ͍" »
ʮΦϯʹ͢ΔͱɺσϑΥϧτ͕ࢦఆ͞Ε͍ͯΔσʔλϕʔεଓؔ ɺ ҾͰࢦఆ͞ΕͨΑΓσϑΥϧτΛ༏ઌͯ͠༻͠· ͢ɻ ʯ » ʢphpʹ͓͚Δʮsafe modeʯͱɺϢʔβʔͷϙΧʢѱҙʣΛଟ গअຐ͢Δͱ͍͏ҙຯͰ͢ʣ -
» expose_php = On » X-Powered-By: PHP/7.0.9 ͳͲΛӅ͢ » ·͋Φϑʹ͍ͨ͠ਓΦϑʹͨ͠΄͏͕ΑΖ͍͠
» ʢϔομʔʹPHP͔͍ͬͯͯ͋Δͱ͏Ε͍͔͠Β൱ఆͮ͠Β͍ʣ » ෭࡞༻ͱͯ͠ɺʮΠʔελʔΤοάʯ͕͔ͭ͑ͳ͘ͳΓ·͢ -
࠷ॳʹॻ͍͓͕ͯ͘… » ϝʔϧؔ࿈ͷઃఆΛ͍͡Δ߹ɺmail()ͱ͔ɺmb_send_mail()ͱ͔ ͷڍಈΛม͍͑ͨͷͩΖ͏ͱ͓͏ » ⚠Ί͓ͯ͜͏⚠ » ✅ྑ͍ϝʔϧૹ৴ϥΠϒϥϦΛ͔͓ͭ͏ʂ » ͢ΔͱͩͶɺઃఆͷ΄ͱΜͲ͕ཁΒͳ͘ͳΔΜͩͳ…
» ʮͦͦɺएऀMailgunͱ͔SESͱ͔͔ͭ͏Μ͡ΌΖʁʯ -
tips: sendmail_pathʹࣗ࡞ͷϓϩάϥϜΛࢦఆ͢Δͱศར #!/usr/bin/perl my $out_file_name = '/tmp/mailout'; open(my $fh, ">>",
$out_file_name) or die $!; while(<STDIN>){ print $fh $_; } -
PHPҎ֎ͷݴޠͷํʑɺPHPͷηογϣϯ… » దʹൃ൪͞ΕͨηογϣϯID͚͕ͩCookieʹอଘɺૹ৴͞Εɺ » ΞΫηε࣌ʹɺࣗಈతʹSIDʹώϞ͍ͨΩʔΛݩʹɺ » (ࣗ࡞Ͱ͖Δ)ηογϣϯετϨʔδϋϯυϥ͔ΒσʔλΛͻ͖ͩ ͠ɺ$_SESSIONσγϦΞϥΠζɻ » ऴྃ࣌ʹɺࣗಈతʹٯํͰ$_SESSIONΛγϦΞϥΠζͯ͠อଘɻ
» ηογϣϯIDͷ࠶ׂΓͯܰʑʂ » …ͱɺ͍ͬͨͷ͕ݴޠʢڥʣͰ༻ҙ͞Ε͓ͯΓ·͢ɻ -
» ηογϣϯID(SID)ͷཧ » ԿͰΓऔΓ͢Δ͔ » URL » Cookie » IDͷੜɺཧ
» γʔυ » ͞ʢڧʣ » ηΩϡϦςΟڧԽͷઃఆ -
» ςϯϓϨɺSessionͰCookieΛ͏֤छઃఆ session.use_cookies = 1 ; SIDΛCookie͔ΒಡΊΔΑ͏ʹ session.use_only_cookies = 1
; ͍·Ͳ͖URLʹຒΊࠐ·ͳ͍ͷͰɺOn session.name = PHPSESSID ; CookieΩʔ໊ session.cookie_secure = 1 ; httpsͰͷΈηογϣϯͷCookieΛΓͱΓ session.cookie_domain = ; ະࢦఆͰݱࡏͷυϝΠϯʹͳΔͷͰɺ௨ৗෆཁ session.cookie_path = / ; ηογϣϯΫοΩʔͷPath session.cookie_httponly = 1 ; SIDΛJS͔Βݟ͑ͳ͘͢Δ session.use_strict_mode = 1 ; SIDΛೖͤ͞ͳ͍ -
session.cookie_lifetime = 0 ; ηογϣϯΫοΩʔͷExpireΛࢦఆ » 0ϒϥβΛด͡Δ·Ͱ༗ޮ » ʢݱͰʮϒϥβΛด͡Δʯͱ…ʁʣ »
sessionΛҡ࣋͢Δʹɺదʹઃఆ͢Δ » ʮࠓ͔ΒNඵʯ » ผ్ɺετϨʔδͷlifetimeͷઃఆ͍Δʢޙड़ʣ » ʮ͔͋͘͞Δ͠ʯͷٞ͜͜Ͱ͠ͳ͍ -
ηογϣϯIDͷੜखஈؔ » ηΩϡϦςΟʹίμϫϦ͕͋ΔͳΒม͑ͯΑ͍ͷͰ » มߋ͢Δͱɺݱࡏͷશηογϣϯ͕ফ͑·͢ʢͨΓલ͕ͩ…ʣ session.hash_function = 1 ; ηογϣϯͷϥϯμϜจࣈͷ͞
; 0:md5͔1:sha1͔ࢦఆͰ͖Δɺ͚Ͳ7.1Ͱফ͑·ͨ͠ session.entropy_length = 32 ; PHP 7.1Ͱফ͑·ͨ͠ session.entropy_file = /dev/urandom ; PHP 7.1Ͱফ͑·ͨ͠ -
ͳ͓ɺphp7.1͜ͷΑ͏ʹγϯϓϧʹͳͬͨ » php.iniͷσϑΥϧτͩͱޙํޓੑͷͨΊʹ26จࣈʹͳ͍ͬͯΔ ͕ɺͬͱͷͨ͠΄͏͕͍͍ͧͱ͍͏͜ͱΒ͍͠ɻ ; Shorter length than default is
supported only for compatibility reason. ; Users should use 32 or more chars. ; Default Value: 32 ; Development Value: 26 ; Production Value: 26 session.sid_length = 26 -
session.cache_limiter = nocache ; Ωϟογϡͤ͞ͳ͍ session.cache_expire = 180 » ηογϣϯ͕͍ͭͨϨεϙϯεΛͲ͏Ωϟογϡͤ͞Δ͔
» ͳʹ͔ͷ߹ෛՙͷࣄΛଞॴʹ͢ΕɺσϑΥϧτͰେৎ -
session.save_handler = files ; σϑΥϧτͷfileετϨʔδΛ͏ session.save_path = "/tmp" ; fileετϨʔδͷઃఆͰɺͲ͜ʹใΛอଘ͢Δ͔
» session.save_pathʹηογϣϯใ͕อଘ͞ΕͨେྔͷϑΝΠϧ ͕Ͱ͖Δ » अຐͩͱ͔ɺCronͰআ͞Εͳ͍Α͏ʹͱ͔ɺnfsͰڞ༗͍ͨ͠ ͱ͔(ݹ)ɺඞཁ͕͋Εมߋ͢Δ » ʢύʔϛογϣϯʹҙʂʣ » ʮPHPҎ֎ͰɺηογϣϯϑΝΠϧΛࣗલͰಡΈॻ͖͢ΔʯͳͲ ͱ͍ͬͨɺڧ·ͬͨΞϓϦΛॻ͘ͳΒ͜ͷpathΛ֬ೝ͢Δ -
» $_SESSIONΛγϦΞϥΠζ͢ΔϋϯυϥΛࢦఆ » ʮมߋ͢Δͷʁڧ͍Ͷʙʯ session.serialize_handler = php ; $_SESSIONΛԿͰγϦΞϥΠζ͢Δ͔ ;
ଞʹphp_serializeͳͲ͕͋Δ ;session.lazy_write = On ; 7͔Βɺߋ৽͕͋Δ߹ͷΈॻ͖ࠐΉࣄͰੑೳ্ » ղͬͯΔਓ͚͕͍ͩ͡Δ߲Ͱ͢ -
» ηογϣϯͷ༗ޮظؒؔ࿈ » gc_maxlifetimeɺσϑΥϧτͷ24͍Α͏ͳɺ͍Α͏ͳ… session.gc_maxlifetime = 1440 ; ηογϣϯ༗ޮظؒɺඵ ;
ΞΫηεຖʹgc_probability/gc_divisorͷαΠίϩΛৼΓɺ ; ֬తʹsessionͷGCཁٻ͕ߦΘΕΔ session.gc_probability = 1 session.gc_divisor = 1000 -
ʮʢηογϣϯʣΩϨͯͳʙ͍ʯ » ετϨʔδଆͷGCɺαΠίϩͤɺஸʹফ͑Δ͜ͱͳ͍ » ʮԿͰηογϣϯ͕ΕΔͷ͔อূ͍ͯͩ͘͠͞ʯʮ໘ͳ…ʯ » ͦͷ߹ɺExpireΛPHPʹͤΔͳΒఘΊͯɺ$_SESSIONͷதʹ ࣌ࠁ͖ͷใΛ͍Ε·͠ΐ͏ ; ͳ͓ɺ͜ͷΑ͏ͳΠΧαϚαΠίϩ۪ߟͰ͢
session.gc_probability = 1 session.gc_divisor = 1 -
» ݬͷػೳɺupload_progress ;session.upload_progress.enabled = On ;session.upload_progress.cleanup = On ;session.upload_progress.prefix =
"upload_progress_" ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" ;session.upload_progress.freq = "1%" ;session.upload_progress.min_freq = "1" » ͳΜͱʮϑΝΠϧΞοϓϩʔυͷϓϩάϨεόʔʯΛग़ͤΔ » ΞοϓϩʔυதʹผͷϦΫΤετΛඈͯ͠ɺηογϣϯΛݟΔͱɺ ͕औΕΔ » ਅ໘ʹ͔ͭͬͨ͜ͱͳ͍ -
» ʮͳΜͱʂදʹೋճొ͠·͢ʂʯ » ͖ͬͱॏཁ͔ͩΒͳΜͰ͠ΐ͏ʂ » ʢ͔ͭͬͨ͜ͱͳ͍ʣ » ʮ·ͨɺPHP 7.1.0 Ͱআ͞Ε·ͨ͠ɻʯ
» ʮ͑ʁphp.iniϑΝΠϧʹͬͯΔΜ͚ͩͲ…ʯʢini_getͰ͖·ͤ ΜͰͨ͠ʣ » ʢ㙽ʹ֯·͋ɺͦΜͳ͔͍͋ͭͩͱ͍͏͜ͱͰ͢Ͷʣ -
; -1 ίϯύΠϧ࣌ແࢹɺ0 ࣮ߦ͠ͳ͍ɺ1 ࣮ߦ͢Δ zend.assertions = -1 ;assert.exception =
On ; fail࣌ྫ֎(ʁ)εϩʔ ; ͜ΕҎԼԼҐޓੑͷͨΊ͍ͬͯΔ͕ɺ͔ͭ͏ͳͱ ;assert.active = On ;assert.warning = On ;assert.bail = Off ;assert.callback = 0 ;assert.quiet_eval = 0 -
curl.cainfo=/path/to/cacert.pem » SSL certificate problem: unable to get local issuer
certificateΈ͍ͨͳΤϥʔ͕ग़ͨΒରԠ » ূ໌ॻݕূͯͦ͜͠ɺCURLOPT_SSL_VERIFYPEERΛfalseʹ͢Δͱ͔ μϝઈର » cacert.pemhttps://curl.haxx.se/ca/cacert.pemͳͲ͔Βೖख -
ࢁ͋Δͧʂࠓͤͳ͔ͬͨ͜ͱ » cgi.force_redirectͱ͔ͷ » urlrewriterͷ » filterͷ » realpth_cacheͱ͔ͷ »
zend.enable_gcͷਆ » report_memleaksͷظͱઈ -
͋͋ʂphp.ini໘͍͘͞ʂ » ʮphp.iniͳΜͯͳͯ͘͠͠·͍͍͑ʂ!ʯ » લड़͚ͨ͠Ͳɺͳͯ͘͏͖͝·͢ » ͨͩ͠ɺphpͷόʔδϣϯΞοϓͰσϑΥϧτมΘΔ » ʮϚΠφʔͰେมߋ͕ೖΔࣄͰఆධͷ͋ΔPHPʯ »
ΤϯίʔσΟϯάͷσϑΥϧτ͕UTF-8ʹ » datetime.zoneσϑΥϧτ͕UTCʹ » ʮѲ͠ଓ͚Δ͘Β͍ͳΒɺphp.iniΛॻ͍ͨํ͕ϚγͰʯ -
» ʮͨΕͰ͍͍͡ΌΜ!ʯ » ·͋ɺݱ࣮ͱͯͦ͠ΕͰ͍͍Μ͚ͩͲɺϋϚͬͨ࣌ͭΒ͍ » ಛʹɺΑ͘Θ͔ΒΜଞਓͷPHPڥΑ͘Θ͔ΒΜ » ͦ͏͍͏ॴʮͳΜ͔৭ʑม͑ͨΒۮવಈ͍ͨʂʯˠʮൿͷλ ϨԽʯ͓ͯ͠Γ… »
ʮ͜Ε͏͍Βͳ͍Ͱ͠ΐʯʮফ͞ͳ͍Ͱ͍ͩ͘͞ʂʯ » ʮ͜ͷ.htaccess͕ஔ͚ͳ͚Εࢮʯʮͪ͜ͱΒnginxʯ » ͷ͕ൃੜ -
» ʮphp.iniʹઃఆ͕͋Δͱཧ͕େม…!ʯͱࢥ͏ਓଟ͍ » ຊసͬΆ͍͚Ͳɺʮશ෦ίʔυʹຒΊࠐΈʯ » ࣮ɺ͜Ε͜ΕͰղܾࡦͰ͋Δ » ʢPHP_INI_SYSTEMͳͲΔ͕…ʣ » ࢲɺini_setΛଟ༻͢Δ
» ͔͠͠ɺࣗҎ֎͕৮Δ͔͠Εͳ͍Μͩͧ » CLIͰόονճ͢ͱ͖ʹϋϚΔͧ -
php.iniϚελʔʹͳΔʹ » php.netΛख़ಡ͢Δʢ͕ɺ࠲ֶͰ৴༻͢Δͳʣ » php.iniΛख़ಡ͢Δʢ͕ɺ࠲ֶͰ৴༻͢Δͳʣ » ini_get_allͷΛશ෦ݟ͍ͯ͘ » ࣮ͰϋϚ֮ͬͯ͑Δ »
20࣋ͭphp.iniͩ͠ɺ͋ͱ10ΘΕͦ͏(ʁ)