レガシーPHPで require_once とかいう呪いを退治できるかもしれない

レガシーPHPで require_once とかいう呪いを退治できるかもしれない

第125回 PHP勉強会@東京の発表資料です
公開しているライブラリはコチラになります。
https://packagist.org/packages/nazonohito51/require-path-fixer

B989cc865d53d8e26fdadac99727113c?s=128

Satoshi Kawashima

April 25, 2018
Tweet

Transcript

  1. ઒ౡܛ(.01FQBCP *OD 1)1ษڧձ ϨΨγʔ1)1Ͱ SFRVJSF@PODFͱ͔͍͏ढ͍Λ ୀ࣏Ͱ͖Δ͔΋͠Εͳ͍

  2. ΤϯδχΞ ઒ౡܛ!OB[POPIJUP 4)ࣄۀ෦+6(&.νʔϜ IUUQOB[POPIJUPKVHFNKQ

  3. SFRVJSF@PODFͬͯʁ wଞͷϑΝΠϧΛ1)1ϑΝΠϧͱͯ͠ಡΈࠐΜͰධՁ͢Δݴޠߏ଄ wJODMVEFJODMVEF@PODFSFRVJSFSFRVJSF@PODF͕͋Δ wίʔυΛෳ਺ϑΝΠϧʹ෼ׂ͢ΔͨΊͷखஈ wแׅతͳಡΈࠐΈϧʔϧ·ͰܾΊͯ͸͍ͳ͍ͷͰɺ࢖͍ख͕டংΛอ ͨͳ͚Ε͹͙͢ෳࡶԽ͢Δ

  4. டংʜʁ

  5. ॻ͖ͬ΀Γ͕όϥόϥ

  6. JODMVEF@QBUIϕʔεͰॻ͖͍ͨ೿ ΧϨϯτσΟϨΫτϦϕʔεͰॻ͖͍ͨ೿ Ͱด͍ͨ͡೿ ม਺ϕʔεͰॻ͖͍ͨ೿ จࣈྻ࿈݁͸εϖʔεͳ͠Ͱܨ͍͛ͨ೿ ͷखલʹεϖʔεೖΕ͍ͨ೿ Α͘Θ͔ΒΜج४Ͱจࣈྻ෼͚͍ͨ೿ Α͘Θ͔ΒΜج४Ͱվߦ͍ͨ͠೿ จࣈྻ࿈݁͸υοτͷࠨଆ͚ͩεϖʔε೿ ఆ਺ϕʔε೿

    @@%*3@@೿ EJSOBNF @@'*-&@@ ೿ ॻ͖ͬ΀Γ͕όϥόϥ EJSOBNF࿈ൃ೿
  7. டংͳΜͯແ͔ͬͨ w ಡΈࠐΈϧʔϧ͕ແ͍PSܧঝͰ͖ͯͳ͍ w ͍͍ͩͨͦͷ࣌ͷਓͷ޷ΈͰॻ͔Ε͍ͯ Δ w γϯλοΫεతʹόϥόϥ w ϕʔεύε΋όϥόϥ

    w ΤϯτϦϙΠϯτʢΧϨϯτσΟϨΫτ Ϧʣ΍ΠϯΫϧʔυύε΋όϥόϥ w ࣮ߦ్தͰมߋ΋͞ΕΔ
  8. ໰୊ϑΝΠϧ͕Ҡಈͮ͠Β͍ JODMVEF@QBUI IPHFQIQ GVHBQIQ JODMVEF1BUI%JS ͲͪΒͷϑΝΠϧΛಈ͔ͯ͠΋ εςʔτϝϯτΛॻ͖׵͑Δ ඞཁ͕͋Δ

  9. ໰୊ಡΈࠐΈઌϑΝΠϧ͕෼͔Βͳ͍ wಡΈࠐΈઌ͕੩తʹܾఆ͠ͳ͍ wΧϨϯτσΟϨΫτϦ·ͨ͸ΠϯΫϧʔυύεʹґଘͨ͠΋ͷ͸࣮ߦ ࣌·Ͱ෼͔Βͳ͍ w*%&ͷαϙʔτΛड͚ΒΕͳ͍ w࣮ߦύε͕௥͑ͳ͍

  10. ໰୊मਖ਼ͷ࡞ۀɾ৺ཧίετ͕ߴ͍ wγϯλοΫεతʹόϥόϥͳͷͰHSFQͳͲͰػցతʹஔ׵Ͱ͖ͳ͍ wࣦഊͨ͠৔߹ͷϦεΫ΋େ͖͍ wͦ΋ͦ΋਺͕ଟ͍

  11. ΋͸΍ढ͍

  12. ୀ࣏͢ΔϥΠϒϥϦΛ࡞ͬͨ

  13. ΍Γ͍ͨ͜ͱ wશͯͷεςʔτϝϯτʹடংΛ΋ͨΒ͢ wύεղܾͷϕʔεύεΛ౷Ұ͢Δ wઈରύεԽ͢Δ wγϯλοΫεΛۉ࣭Խ͢Δ

  14. ղܾํ๏  શͯͷεςʔτϝϯτΛั·͑Δ  ύε෦෼Λղܾ͢Δ  ಡΈࠐΈઌϑΝΠϧΛಛఆ͢Δ  ৽͍͠ϕʔεύεج४Ͱஔ׵͢Δ

  15.  શͯͷεςʔτϝϯτΛั·͑Δ

  16. શͯͷεςʔτϝϯτΛั·͑Δ wਖ਼نදݱͰั·͑Δͷ͸ා͍ wίϝϯτ΍վߦ͕ࠞͬͯ͘͟Δ w1)1ͷγϯλοΫεΛߟྀͨ͠ಡΈࠐΈΛ͍ͨ͠ 1)1ͷ͜ͱ͸1)1ʹ೚ͤΔ

  17. τʔΫϯύʔαͰࣈ۟ղੳ wUPLFO@HFU@BMM Ͱࣈ۟ղੳͰ͖Δ

  18. τʔΫϯύʔαͰࣈ۟ղੳ wUPLFO@HFU@BMM Ͱࣈ۟ղੳͰ͖Δ 5@%*3 5@3&26*3&@0/$& 5@$0/45"/5 @&/$"14&%@453*/( 5@7"3*"#-& 5@$0..&/5 5@453*/(

    5@3&26*3&@0/$& 5@3&26*3&@0/$& 5@3&26*3&@0/$& 5@$0/45"/5 @&/$"14&%@453*/( 5@$0/45"/5 @&/$"14&%@453*/( 5@$0..&/5 5@$0/45"/5 @&/$"14&%@453*/(
  19. ύε෦෼Λղܾ͢Δ

  20. ύε෦෼Λղܾ͢Δ w֤εςʔτϝϯτͷϑΝΠϧύεจࣈྻ෦෼ΛٻΊΔ wγϯλοΫεతʹόϥόϥ wఆ਺΍ؔ਺ݺͼग़͕͠࢖ΘΕ͍ͯͨΓ͢Δ 1)1ͷ͜ͱ͸1)1ʹ೚ͤΔ

  21. ͜Μͳεςʔτϝϯτ͕͋Δͱͯ͠ɺ require_once (dirname(dirname(__FILE__)).COMMON_DIR. “{$util}/path/to/file.php”);

  22. SFRVJSF@PODFΛSFUVSOʹॻ͖׵͑ͯɺ return (dirname(dirname(__FILE__)).COMMON_DIR. “{$util}/path/to/file.php”);

  23. ط஌ͷఆ਺ɾม਺Λఆٛͯ͠ɺ define(“KNOWN_CONSTANT”, __DIR__ . “/known”); define(“COMMON_DIR”, ”/common"); $util = “/utility”;

    return (dirname(dirname(__FILE__)).COMMON_DIR. “{$util}/path/to/file.php”);
  24. FWBM ͰQIQίʔυͱ࣮ͯ͠ߦ͢Δͱɺ $path = eval(‘ define(“KNOWN_CONSTANT”, __DIR__ . “/known”); define(“COMMON_DIR”,

    “/common”); $util = “/utility”; return (dirname(dirname(__FILE__)).COMMON_DIR. “{$util}/path/to/file.php”); ‘);
  25. ϑΝΠϧύεͬΆ͍จࣈྻ͕ฦͬͯ͘Δ $path = eval(‘ define(“KNOWN_CONSTANT”, __DIR__ . “/known”); define(“COMMON_DIR”, ”/common”);

    $util = “/utility”; return (dirname(dirname(__FILE__)).COMMON_DIR. “{$util}/path/to/file.php”); ‘); QBUIUPBQQSPPUDPNNPOVUJMJUZQBUIUPpMFQIQ ˣ
  26. ಡΈࠐΈઌϑΝΠϧΛಛఆ͢Δ

  27. ύεͷछྨͱରԠํ๏ छྨ ྫ ରԠํ๏ ઈରύε BQQSPPUQBUIUPpMFQIQ मਖ਼͢Δ ΧϨϯτσΟϨΫτϦϕʔ ε QBUIUPpMFQIQ

    ಡΈࠐΈઌϑΝΠϧΛ ಛఆ͔ͯ͠Βमਖ਼ ΠϯΫϧʔυύεϕʔε QBUIUPpMFQIQ ಡΈࠐΈઌϑΝΠϧΛ ಛఆ͔ͯ͠Βमਖ਼ ύεղܾͰ͖ͳ͔ͬͨ 6/,/08/@$0/45"/5bQBUIUPpMFQIQ`
 ·ͨ͸ύεղܾதʹΤϥʔ मਖ਼͠ͳ͍
  28. ಡΈࠐΈઌϑΝΠϧͷಛఆ wΧϨϯτσΟϨΫτϦ·ͨ͸ΠϯΫϧʔυύε͕ϥΠϒϥϦʹ౉͞Ε ͍ͯΔͳΒ͔ͦ͜Βղܾ w౉͞Ε͍ͯͳ͍৔߹͸ϦϙδτϦ಺෦͔ΒϚον͢ΔϑΝΠϧΛ୳͢ wύεจࣈྻతʹϚον͢Δͷ͕͔ͭ͠ͳ͍৔߹͸ͦͷϑΝΠϧͩͱ ͢Δ w্هͷ͍ͣΕͰ΋ಛఆͰ͖ͳ͍৔߹͸मਖ਼͠ͳ͍

  29. ৽͍͠ϕʔεύεج४Ͱஔ׵͢Δ

  30. ৽͍͠ϕʔεύεج४Ͱஔ׵͢Δ wXFCNP[BSUQBUIVUJMͷ1BUINBLF3FMBUJWF ʹ͔͚Δ͚ͩ

  31. ࣮ߦ݁Ռ

  32. ࣮ߦ݁Ռʢͦͷ̍ʣ     ઈରύε ΧϨϯτσΟϨΫτϦ ΠϯΫϧʔυύε ෆ໌ 

      ઈରύεݸ ઈରύεݸ ʢγϯλοΫεతʹ΋ۉ࣭ͳঢ়ଶʣ ˞૯਺͕มΘ͍ͬͯΔͷ͸ɺ్தͰෆཁϑΝΠϧҰ੾࡟আΛ࣮ࢪͨͨ͠Ί
  33. ࣮ߦ݁Ռʢͦͷ̎ʣ   ઈରύε ΧϨϯτσΟϨΫτϦ ΠϯΫϧʔυύε ෆ໌   

    ˞૯਺͕มΘ͍ͬͯΔͷ͸ɺϑΝΠϧΛҠಈͯ͠ΦʔτϩʔσΟϯάϔҠߦग़དྷͨͨΊ ઈରύεݸ ઈରύεݸ ʢγϯλοΫεతʹ΋ۉ࣭ͳঢ়ଶʣ
  34. ࣮ߦ݁Ռʢະ࣮ߦʣ         

                                
  35. ಘΒΕͨϝϦοτ wϑΝΠϧΛಈ͔͠΍͘͢ͳͬͨ w࣮ߦύε͕௥͍΍͘͢ͳͬͨ wJODMVEF@QBUIΛࣺͯΒΕͨ wQIQGQNͷSFBMQBUIDBDIF໰୊͕ղফͨ͠ w҉໧஌ͷܗࣜԽ

  36. ϥΠϒϥϦެ։ͯ͠·͢ IUUQTQBDLBHJTUPSHQBDLBHFTOB[POPIJUPSFRVJSFQBUIpYFS

  37. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠