Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPCON_TOKYO_2019_Bigginer.pdf

 PHPCON_TOKYO_2019_Bigginer.pdf

PHPカンファレンス 2019 初心者セッション
2019/12/1 @大田区産業プラザPiO
スライドの一部に古いデータが入っていました。すいません。

Hideo Kashioka

December 01, 2019
Tweet

More Decks by Hideo Kashioka

Other Decks in Programming

Transcript

  1. PHPΧϯϑΝϨϯε2019
    PHPॳ৺ऀηογϣϯ
    #phpcon #Track5
    ೔ຊPHPϢʔβձ
    ༗ݶձࣾΞϦ΢ʔϓ
    ദԬɹलஉ

    View Slide

  2. ΞδΣϯμ
    ࣗݾ঺հ
    PHPͷจ๏
    ࣮ફฤ
    ͓·͚

    View Slide

  3. ࣗݾ঺հ
    ༗ݶձࣾΞϦ΢ʔϓɹऔక໾ࣾ௕
    WEBγεςϜ։ൃɺνʔϜϏϧσΟϯά
    DevOps,CIͷಋೖίϯαϧςΟϯά
    εΫϥϜϚελʔ

    View Slide

  4. ର৅ͱͳΔօ༷
    PHPॻ͍ͨ͜ͱແ͍
    ೖ໳ॻಡΜ͚ͩͲɺ్தͰ࠳ં
    ଞͷݴޠͰೖ໳ఔ౓

    View Slide

  5. ҠಈλΠϜ

    View Slide

  6. PHPͱ͸

    View Slide

  7. PHPͱ͸
    PHP is a popular general-purpose scripting language
    that is especially suited to web development. Fast,
    flexible and pragmatic, PHP powers everything from
    your blog to the most popular websites in the world.
    http://php.net/ΑΓ

    View Slide

  8. PHPͱ͸
    WEB։ൃʹదͨ͠ݴޠ

    View Slide

  9. PHPͷྺ࢙
    1994೥ʹRasmus͕ΦϯϥΠϯͰެ։͍ͯ͠Δܦྺॻ
    ͷΞΫηεཤྺΛௐ΂ΔͨΊʹ࢖ΘΕ͍ͯ·ͨ͠
    ൴͸ͦͷεΫϦϓτ܈ΛʮPersonal Home Page
    Toolsʯͱ໊෇͚·ͨ͠ɻ
    http://php.net/manual/ja/history.php.php

    View Slide

  10. PHPͷsoftware

    View Slide

  11. EC-CUBE͸גࣜձࣾΠʔγʔΩϡʔϒͷ঎ඪͰ͢

    View Slide

  12. PHPͷ؀ڥ

    View Slide

  13. LAMP
    LAPP
    LEMP
    Linux Apache
    MySQL PHP
    Linux Apache
    Postgre PHP
    Linux Nginx
    MySQL PHP
    ݺͼํ͸
    OS+Web Server+Database+Script
    WAMPͱ͔LAMRɺMERNͱ͔΋ݕࡧͰ͸͋Γ·ͨ͠ɻ

    View Slide

  14. ͲΜͳ؀ڥͰ͸͡ΊΔ͔

    View Slide

  15. ϗεςΟϯά
    Ϩϯλϧαʔό

    View Slide

  16. AWS
    Azure
    GCP
    ͦͷଞ

    View Slide

  17. ϩʔΧϧ
    XAMPP
    MAMP

    View Slide

  18. aws cloud9
    ͔ͭͯ͸ಠཱͨ͠αʔϏεɻ
    ݱࡏ͸AWSʹ౷߹͞Εͨɻ
    ౦ژϦʔδϣϯ͸αϙʔτ͞Ε͍ͯͳ͍
    AWSͷ஌͕ࣝඞཁ
    ϦϞʔταʔό΁΋઀ଓͰ͖Δ
    http://c9.io

    View Slide

  19. Docker
    https://www.docker.com/
    Windows,MacରԠ

    View Slide

  20. Docker
    https://hub.docker.com/_/php/

    View Slide

  21. docker compose
    ෳ਺ͷίϯςφΛ؅ཧͰ͖Δɻ
    https://docs.docker.com/compose/gettingstarted/

    View Slide

  22. DockerʹΑΔ։ൃ؀ڥ
    docker-composeΛ࢖༻͢Δ৔߹
    dockerͷΠϯετʔϧ
    docker-compose.ymlͷ࡞੒
    dockerͷىಈ

    View Slide

  23. docker-compose.yml
    version: '3'
    services:
    php:
    image: php:7.4.0-fpm-alpine3.10
    expose:
    - '8080'
    ports:
    - '8080:80'
    volumes:
    - ./phpapps:/home/www-data
    working_dir: /home/www-data
    command: php -S 0.0.0.0:80
    docker
    Πϝʔδ໊
    ެ։ϙʔτ
    ϗετଆͱίϯς
    φͷϙʔτ
    ϘϦϡʔϜͷϚ΢ϯτ
    ίϚϯυͷ࣮ߦ

    ϏϧτΠϯαʔό

    View Slide

  24. σΟϨΫτϦߏ੒
    docker-compose.yml
    apps —>>͕͜͜dockerͱڞ༗͞Ε͍ͯΔʢϏϧτΠ
    ϯαʔόͷσΟϨΫτϦʣ
    ϩʔΧϧͷϑΝΠϧΛमਖ਼͢ΔͱdockerଆͰ࣮ߦՄ

    View Slide

  25. ىಈํ๏
    ର৅σΟϨΫτϦʹҠಈͯ͠
    docker-compose up -d ։࢝
    docker-compose stopऴྃ

    View Slide

  26. ࣮ߦͯ͠Έ·͠ΐ͏ɻ
    index.phpΛ࡞੒ͯ֬͠ೝͯ͠Έ·͠ΐ͏
    http://localhost:8888

    View Slide

  27. View Slide

  28. ؀ڥ͸͙͢ʹͰ͖·͢ɻ
    ࢼͯ͠Έ·͠ΐ͏ɻ
    ※ձ৔಺Ͱͷμ΢ϯϩʔυ͸͝ԕྀ͍ͩ͘͞

    View Slide

  29. PHPͷ֓ཁ

    View Slide

  30. PHPͷجຊ
    PHPͷจ๏͸௚ײతͰ͢ɻ
    ଞͷݴޠΛ΍͍ͬͯͳ͍ํ͕ށ࿭͍·ͤΜɻ
    WEBߏஙʹ࠷దͳݴޠͰ͢ɻ
    ࣌ʹ࣮຿Ͱ࢖͏ʹ͸৭ʑग़͖ͯ·͢
    ※ݸਓͷײ૝Ͱ͢

    View Slide

  31. PHPλά
    ɹPHPϞʔυ;
    HTMLͷλάͷΑ͏ͳΠϝʔδ;

    View Slide



  32. echo "͜Μʹͪ͸";
    ?>


    Ұ൪͔ΜͨΜͳαϯϓϧ
    http://localhost:8888/1st.php

    View Slide






  33. Ұ൪͔ΜͨΜͳαϯϓϧ
    http://localhost:8888/1st.php

    View Slide

  34. ֦ுࢠ
    ϑΝΠϧ໊.php

    View Slide

  35. ߏจ
    ม਺͸$Ͱ࢝·Δ;
    จ຤͸;ͰऴΘΔ
    ܕએݴͳͲ͸ݫີʹߦΘͳͯ͘OK͕ͩޙʑ
    ໘౗……
    ؆୯ͳαϯϓϧΛݟͯΈ·͠ΐ͏

    View Slide


  36. $a = '͜Μʹͪ͸';

    echo $a;

    View Slide

  37. PHP͔ΒHTML΋ग़ྗ

    View Slide


  38. echo "";

    echo "";

    echo "͜Ε͸PHPͰ͢";

    echo "";

    echo "";
    http://localhost:8888/sample0.php

    View Slide

  39. $a = “A” . “B”;
    $b = 1 + 2;
    μϒϧίʔςʔγϣϯ͸ด͡ͳͯ͘OK
    ଍ͨ͠Γ݁߹ͨ͠Γ

    View Slide

  40. $a = “A”;
    $b = “B”;
    $c = $a . $b;
    ม਺஋͕਺ࣈͳΒԋࢉ΋Մೳ
    ม਺Ͱ΋݁߹

    View Slide

  41. $a = "phpcon";
    $b = 2017;
    echo $a . ($b + 2);
    http://localhost:8888/sample2.php

    View Slide

  42. PHPͷؔ਺
    if
    foreach
    strlen
    htmlspecialchars
    nl2br
    mb_convert_encording

    View Slide

  43. if ʙ else (endif)
    ৚݅൑ఆΛߦ͏
    ৚݅Λຬͨ͢ຬͨ͞ͳ͍ͷ൑அΛߦ͏

    View Slide

  44. if($a) {
    echo '৚݅Λຬͨ͢';
    } else {
    echo '৚݅Λຬͨ͞ͳ͍';
    }

    View Slide



  45. ຬͨ͢

    ຬͨ͞ͳ͍


    View Slide

  46. ͲΜͳ࣌ʹ࢖͏͔
    ೖྗ஋͕༧૝ͱҧ͏
    औಘͨ͠஋ʹΑͬͯॲཧΛ੾Γ෼͚Δ

    View Slide

  47. HTML૊ΈࠐΈܕͷαϯϓϧ
    WordPressͷ৔߹
    wp-content/themes/twentynineteen/
    header.php

    View Slide

  48. ܁Γฦ͠ॲཧ

    View Slide

  49. foreach
    $numbers = array('2','3','4','5','6');
    foreach($numbers as $val) {
    echo $val;
    }
    http://localhost:8080/sample5.php

    View Slide

  50. htmlspecialchars
    ˍ"'<>ͱ͍ͬͨHTMLͰҙຯ͋ΔจࣈΛhtmlͷදࣔܗࣜʹม
    ׵͢Δ =
    javascriptɺෆਖ਼ͳsql࣮ߦ౳ʹΑΔηΩϡϦςΟʔϦεΫΛ
    ճආ͢Δɻ
    ೖྗ͞Εͨσʔλ͸ग़ྗ͢Δ௚લʹඞͣhtmlspecialchars
    Λ௨͢
    ϑϨʔϜϫʔΫΛ࢖͍ͬͯͯ΋֬ೝ͠·͠ΐ͏ɻ

    View Slide

  51. htmlspecialchars
    $new ="Test";
    echo $new;
    $new ="Test";
    echo htmlspecialchars($new,ENT_QUOTES);
    http://localhost:8888/sample3.php
    HTML͕ղऍ͞ΕΔ

    View Slide

  52. ϑΝΠϧͷಡΈࠐΈ
    htmlͷྔ࢈ʹ΋ศར

    View Slide

  53. require_once
    require_once('header.html');
    require_once('body.php');
    require_once('footer.html');
    http://localhost:8888/require.php

    View Slide

  54. ஋Λऔಘ͢Δ
    ೖྗϑΥʔϜ͔Βೖྗ͞Εͨ஋
    $_POST
    http://localhost:8888/get.php?id=123456
    $_GET
    Կ͕ೖͬͯ͘Δ͔Θ͔Βͳ͍ͷͰར༻·Ͱʹ஫ҙ͢Δʂ
    όϦσʔγϣϯ΍DBઐ༻ͷΤεέʔϓॲཧɺϓϦϖΞʔυε
    ςʔτϝϯτͳͲ

    View Slide

  55. ஋ͷऔಘ
    echo $_GET['id'];
    echo $_POST['id'];
    ࣮ࡍ͸htmlspecialchars()ͨ͠Γ

    View Slide

  56. ஋ͷ֬ೝ
    var_dump()
    http://localhost:8888/get.php?id=1

    View Slide

  57. ؔ਺
    ܁Γฦ͞ΕΔॲཧΛڞ௨Խ
    function ؔ਺໊([Ҿ਺,,,]) {
    }
    ͳΜͲ΋ग़ͯ͘ΔॲཧΛؔ਺Խ͓ͯ͘͠ɻ

    View Slide

  58. ؔ਺αϯϓϧ
    function hsp($str) {
    return htmlspecialchars($str,ENT_QUOTES);
    }
    function add1($num = 0) {
    return $num + 1;
    }

    View Slide

  59. ͜Ε͘Β͍Θ͔Ε͹OK
    ࣍͸Ϋϥεͷѻ͍ͳͲΛษڧ͠·͠ΐ͏
    PHPͷΦϯϥΠϯϚχϡΞϧͷॆ࣮౓͕ੌ͍
    PHPͷྺ࢙
    ݴޠϦϑΝϨϯε

    View Slide

  60. ࣍ͷҰา

    View Slide

  61. PHPΞϓϦέʔγϣϯΛ
    Πϯετʔϧͯ͠ΈΔ
    WordPress
    Drupal
    EC-Cube
    Xoops

    View Slide

  62. ϑϨʔϜϫʔΫΛ
    ࢖ͬͯΈΑ͏
    Laraval
    CakePHP
    Symphony

    View Slide

  63. ࣮ફฤ
    CSVϑΝΠϧΛಡΈࠐΜͰදࣔ͢ΔϓϩάϥϜΛ࡞Δ

    View Slide

  64. ࡐྉ
    ։ൃ؀ڥ
    ͓޷͖ͳΤσΟλ
    php.net ϚχϡΞϧ
    CSVϑΝΠϧ

    View Slide

  65. CSVΛಡΈࠐΉ
    ؔ਺໊͕Θ͔Βͳ͚Ε͹ͱΓ͋͑ͣݕࡧ

    View Slide

  66. fgetcsvͬͯͷ͕ݟ͔ͭͬͨ
    http://php.net/manual/ja/function.fgetcsv.php
    ͕Μ͹ͬͯಡΉͱΘ͔Δ
    Θ͔Βͳ͚Ε͹αϯϓϧΛ

    View Slide

  67. php.net ΑΓ

    View Slide

  68. php.net ΑΓ

    View Slide

  69. ϚχϡΞϧͰௐ΂ͯΈΑ͏
    Θ͔Βͳ͍ؔ਺Λӈ্ʹೖΕͯΈΔɻ

    View Slide

  70. ྫΛಡΜͰΈΔ
    fopen — ϑΝΠϧ·ͨ͸ URL ΛΦʔϓϯ͢Δ
    whileϧʔϓ͸ɺPHPͰ࠷΋؆୯ͳλΠϓͷϧʔϓͰ͢ɻ
    count — ม਺ʹؚ·ΕΔ͢΂ͯͷཁૉɺ ͋Δ͍͸Φϒ
    δΣΫτʹؚ·ΕΔԿ͔ͷ਺Λ਺͑Δ
    fclose — Φʔϓϯ͞ΕͨϑΝΠϧϙΠϯλΛΫϩʔζ͢Δ
    ͜ΕΛ౿·͑ͯ

    View Slide

  71. ͳΜͱͳ͘Θ͔ͬͨ

    View Slide

  72. αϯϓϧΛ࢖ͬͯΈΔ
    ಈ͔ͯ͠ΈΔ
    http://localhost:8080/sample1/list.php
    Warning: fopen(test.csv): failed to open stream: No such
    file or directory in /home/www-data/sample1/
    list.php on line 3
    Τϥʔ͕ͰΔͷͰcsvϑΝΠϧΛஔ͍ͯΈ·͠ΐ͏ɻ

    View Slide

  73. CSVσʔλΛ࡞Δ
    "෦԰","λΠτϧ","։࢝࣌ࠁ","࣌ؒ"
    "ക","LaravelͰTDDΛମݧ͠Α͏","11:00","60"
    "ക","PHP,Go,ElasticsearchʹΑΔɺ@cosmeΛ5ഒ଎͘͢ΔऔΓ૊Έ","13:00","25"
    "ക","ΞʔΩςΫνϟઃܭͱUXઃܭ͸ಉ͡ͳͷ͔!!??","13:35","25"
    "ക","Laravel × ϨΠϠʔυΞʔΩςΫνϟΛ࣮ફͯ͠ಘΒΕͨ஌ݟͱ൓ল","14:00","25"
    "᳉","ಠཱͨ͠ίΞϨΠϠύλʔϯʹΑΔ PHP ΞϓϦέʔγϣϯͷ࣮૷","11:00","60"
    "᳉","VOYAGEͷΤϯδχΞධՁ੍౓ͬͯͲΜͳײ͡ͳͷ͔25෼Ͱϛχ࠶ԋ","13:00","25"
    "᳉","PHPΛબͿཧ༝","13:35","25"
    test.csv

    View Slide

  74. ϑΝΠϧΛஔ͍࣮ͯߦͯ͠Έ·͠ΐ͏

    View Slide

  75. View Slide

  76. ςʔϒϧͰදࣔͯ͠Έ·͠ΐ
    ͏ɻ

    View Slide

  77. ςʔϒϧͷߏ଄
    ಉ͡Α͏ͳ෦෼ΛϧʔϓͰදࣔͤ͞Δ

    View Slide

  78. View Slide

  79. ৭ʑௐ੔ͯ͠ΈΑ͏
    දࣔ͢Δ߲໨Λબ୒͢Δ
    ද߲ࣔ໨ʹ͸htmlspecialchars()Λ͔͚Δ
    ߜΓࠐΈΛೖΕΔ
    http://localhost:8080/sample2/list.php

    View Slide

  80. αϯϓϧιʔε

    View Slide

  81. ίϯϕϯγϣϯϗʔϧηογϣϯ
    ߜΓࠐΈɿ᳉


    if (($handle = fopen("timetable2.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    if ($_GET['room'] === $data[0] ) {
    echo "";
    echo "". hsc($data[0])."\n";
    echo "". hsc($data[1])."\n";
    echo "". hsc($data[2])."\n";
    echo "". hsc($data[3])."෼\n";
    echo "";
    }
    }
    fclose($handle);
    }
    ?>

    function hsc($str) {
    return htmlspecialchars($str,ENT_QUOTES);
    }
    ?>

    View Slide

  82. View Slide

  83. ϚχϡΞϧͱ஥ྑ͘ͳΖ͏

    View Slide

  84. ࠙਌ձ
    ଞͷ։ൃऀ΍εϐʔΧʔͱ௚઀࿩͢νϟϯε!

    View Slide

  85. ͓קΊॻ੶
    ʮ͍ͪ͹Μ΍͍͞͠PHPͷڭຊʯࢲ͕ॻ͍͍ͯ·͢ɻ
    ͍·ԿΛ࡞͍ͬͯΔͷ͔Λߟ͑Δ

    View Slide

  86. ·ͱΊ
    PHPͷ؀ڥΛ࡞ͬͯΈ·͠ΐ͏ɻ
    PHPΞϓϦέʔγϣϯΛΠϯετʔϧͯ͠Έ·͠ΐ͏
    ؆୯ͳϓϩάϥϜΛॻ͍ͯΈ·͠ΐ͏ɻ
    ϑϨʔϜϫʔΫͷνϡʔτϦΞϧΛͯ͠Έ·͠ΐ͏ɻ
    ΞϓϦͷΧελϚΠζΛͯ͠Έ·͠ΐ͏ɻ

    View Slide

  87. ͥͻ͓ࢼ͍ͩ͘͠͞ʂ

    View Slide

  88. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
    ΧϯϑΝϨϯεΛָ͠ΜͰ͍ͩ͘͞ʂ
    ໌೔ͷ։ൃΧϯϑΝϨϯε
    ΞεΧϯτʔΫφΠτɹ
    ΞεΧϯτʔΫφΠτͰݕࡧʂ
    12/6։࠵༧ఆʂ

    View Slide

  89. PHPॳ৺ऀηογϣϯ
    ༗ݶձࣾΞϦ΢ʔϓ
    ദԬɹलஉ
    twitter,facebook
    @kashioka

    View Slide

  90. View Slide