{"id":3382,"date":"2025-03-24T08:46:20","date_gmt":"2025-03-23T23:46:20","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3382"},"modified":"2025-03-24T08:46:51","modified_gmt":"2025-03-23T23:46:51","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91codeigniter3%e3%81%a7%e4%bd%9c%e3%82%8b%e9%ab%98%e9%80%9f%ef%bc%86%e5%a0%85%e7%89%a2%e3%81%aaweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3382","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011CodeIgniter3\u3067\u4f5c\u308b\u9ad8\u901f\uff06\u5805\u7262\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a &#8211; \u73fe\u5f79\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u6559\u3048\u308b7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">CodeIgniter3\u3068\u306f\uff1f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u3068\u9078\u3076\u3079\u304d\u7406\u7531<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u51e6\u7406\u304c\u53ef\u80fd\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-2\">\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u304f\u3001\u77ed\u671f\u9593\u3067\u7fd2\u5f97\u53ef\u80fd\u306a\u8a2d\u8a08\u601d\u60f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u5927\u624b\u4f01\u696d\u3067\u306e\u63a1\u7528\u5b9f\u7e3e\u3068\u5b89\u5b9a\u3057\u305f\u5b9f\u7e3e<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">CodeIgniter3\u306e\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u308b\u5b9f\u8df5\u7684\u306a\u958b\u767a\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u30b5\u30fc\u30d0\u30fc\u8981\u4ef6<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u52b9\u7387\u7684\u306a\u958b\u767a\u306e\u305f\u3081\u306eIDE\u8a2d\u5b9a\u3068\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u5b9f\u73fe\u3059\u308b\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u8a2d\u8a08<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u30e2\u30c7\u30eb\u30fb\u30d3\u30e5\u30fc\u30fb\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5f79\u5272\u3068\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068URL\u306e\u8a2d\u8a08\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u9069\u5207\u306a\u914d\u7f6e\u3068\u8cac\u52d9\u306e\u5206\u96e2<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u4e07\u5168\u306b\u3059\u308b\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">XSS\u5bfe\u7b56\u3068CSRF\u5bfe\u7b56\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u3068\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u306e\u5b89\u5168\u306a\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6700\u9069\u5316\u3068CDN\u306e\u6d3b\u7528<\/a>      <\/li>      <li>        <a href=\"#i-20\">\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5\u306b\u3088\u308b\u30ec\u30b9\u30dd\u30f3\u30b9\u6539\u5584<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u3068\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-22\">\u30ed\u30b0\u7ba1\u7406\u3068\u76e3\u8996\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u8ca0\u8377\u30c6\u30b9\u30c8\u3068\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u7279\u5b9a\u624b\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-24\">\u5b9f\u8df5\u7684\u306aCodeIgniter3\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5177\u4f53\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-25\">EC\u30b5\u30a4\u30c8\u306e\u958b\u767a\u4e8b\u4f8b\u3068\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-26\">REST API\u306e\u5b9f\u88c5\u3068\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-27\">\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u624b\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-28\">CodeIgniter3\u306e\u904b\u7528\u4fdd\u5b88\u3068\u5c06\u6765\u6027<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-29\">\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3068\u4e92\u63db\u6027\u306e\u7dad\u6301<\/a>      <\/li>      <li>        <a href=\"#i-30\">\u30e2\u30c0\u30f3PHP\u958b\u767a\u624b\u6cd5\u3068\u306e\u7d71\u5408\u30a2\u30d7\u30ed\u30fc\u30c1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-31\">CodeIgniter4\u3078\u306e\u79fb\u884c\u3092\u898b\u636e\u3048\u305f\u8a2d\u8a08\u65b9\u91dd<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">CodeIgniter3\u3068\u306f\uff1f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u3068\u9078\u3076\u3079\u304d\u7406\u7531<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u51e6\u7406\u304c\u53ef\u80fd\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<p>CodeIgniter3\u306f\u3001\u9ad8\u901f\u306a\u51e6\u7406\u901f\u5ea6\u3068\u8efd\u91cf\u306a\u8a2d\u8a08\u3092\u7279\u5fb4\u3068\u3059\u308b\u3001\u4fe1\u983c\u6027\u306e\u9ad8\u3044PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u57fa\u672c\u30b7\u30b9\u30c6\u30e0\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306f\u308f\u305a\u304b2MB\u7a0b\u5ea6\u3068\u975e\u5e38\u306b\u8efd\u91cf\u3067\u3001\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u3067\u52d5\u4f5c\u3092\u958b\u59cb\u3067\u304d\u308b\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e3b\u306a\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u3067\u5373\u5ea7\u306b\u958b\u767a\u958b\u59cb\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u30b3\u30a2\u304c\u8efd\u91cf\uff08\u7d042MB\uff09\u3067\u9ad8\u901f\u306a\u51e6\u7406\u3092\u5b9f\u73fe<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u6a5f\u80fd\u306e\u307f\u3092\u9078\u629e\u7684\u306b\u5229\u7528\u53ef\u80fd\u306a\u67d4\u8edf\u306a\u8a2d\u8a08<\/li>\n\n\n\n<li>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e2d\u6838\u6a5f\u80fd\u306b\u96c6\u4e2d\u3057\u305f\u7121\u99c4\u306e\u306a\u3044\u69cb\u6210<\/li>\n<\/ul>\n\n\n\n<p>\u7279\u306b\u51e6\u7406\u901f\u5ea6\u306b\u3064\u3044\u3066\u306f\u3001\u4ed6\u306e\u4e3b\u8981\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u3082\u512a\u4f4d\u6027\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-1f6f9bed-c1e9-4bdd-936b-439beb76860e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u57fa\u672c\u51e6\u7406\u901f\u5ea6\uff08ms\uff09<\/th><th>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\uff08MB\uff09<\/th><\/tr><\/thead><tbody><tr><td>CodeIgniter3<\/td><td>0.8-1.2<\/td><td>2-3<\/td><\/tr><tr><td>Laravel<\/td><td>2.5-3.0<\/td><td>8-10<\/td><\/tr><tr><td>Symfony<\/td><td>2.0-2.5<\/td><td>6-8<\/td><\/tr><tr><td>Yii<\/td><td>1.5-2.0<\/td><td>4-6<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u304f\u3001\u77ed\u671f\u9593\u3067\u7fd2\u5f97\u53ef\u80fd\u306a\u8a2d\u8a08\u601d\u60f3<\/h3>\n\n\n\n<p>CodeIgniter3\u306e\u5927\u304d\u306a\u7279\u5fb4\u306e\u4e00\u3064\u304c\u3001\u76f4\u611f\u7684\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\u8a2d\u8a08\u601d\u60f3\u3067\u3059\u3002PHP\u306e\u57fa\u672c\u7684\u306a\u77e5\u8b58\u304c\u3042\u308c\u3070\u3001\u77ed\u671f\u9593\u3067\u5b9f\u8df5\u7684\u306a\u958b\u767a\u3092\u59cb\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5b66\u7fd2\u3057\u3084\u3059\u3044\u7406\u7531\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u660e\u78ba\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\n<ul class=\"wp-block-list\">\n<li>application\/: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9<\/li>\n\n\n\n<li>system\/: \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30b3\u30a2<\/li>\n\n\n\n<li>public\/: \u516c\u958b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u8a08 <code>\/\/ URL\u30d1\u30bf\u30fc\u30f3: example.com\/controller\/method\/param class Blog extends CI_Controller { public function view($id) { \/\/ example.com\/blog\/view\/1 \u3067\u30a2\u30af\u30bb\u30b9 $this-&gt;load-&gt;model('blog_model'); $data['post'] = $this-&gt;blog_model-&gt;get_post($id); $this-&gt;load-&gt;view('blog_view', $data); } }<\/code><\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8\n<ul class=\"wp-block-list\">\n<li>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u5145\u5b9f<\/li>\n\n\n\n<li>Stack Overflow\u306a\u3069\u3067\u306e\u60c5\u5831\u304c\u8c4a\u5bcc<\/li>\n\n\n\n<li>\u65e5\u672c\u8a9e\u306e\u6280\u8853\u60c5\u5831\u3082\u591a\u6570\u5b58\u5728<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u5927\u624b\u4f01\u696d\u3067\u306e\u63a1\u7528\u5b9f\u7e3e\u3068\u5b89\u5b9a\u3057\u305f\u5b9f\u7e3e<\/h3>\n\n\n\n<p>CodeIgniter3\u306f\u3001\u591a\u304f\u306e\u5927\u624b\u4f01\u696d\u3084\u91cd\u8981\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u63a1\u7528\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u306e\u5b9f\u7e3e\u306f\u5b89\u5b9a\u6027\u3068\u4fe1\u983c\u6027\u3092\u8a3c\u660e\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e3b\u306a\u63a1\u7528\u4f01\u696d\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ExpressionEngine\uff08CMS\uff09: CodeIgniter\u3092\u30d9\u30fc\u30b9\u306b\u958b\u767a<\/li>\n\n\n\n<li>MaxCMS: \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051CMS<\/li>\n\n\n\n<li>\u56fd\u5185\u306e\u5927\u624bEC\u4f01\u696d\u306e\u57fa\u5e79\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u653f\u5e9c\u6a5f\u95a2\u306eWeb\u30b5\u30fc\u30d3\u30b9<\/li>\n\n\n\n<li>\u6559\u80b2\u6a5f\u95a2\u306e\u5b66\u7fd2\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0<\/li>\n<\/ul>\n\n\n\n<p>\u9577\u671f\u904b\u7528\u306e\u30e1\u30ea\u30c3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u7d99\u7d9a\u7684\u306a\u63d0\u4f9b<\/li>\n\n\n\n<li>\u5e83\u7bc4\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u3088\u308b\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u5b9f\u7e3e\u306b\u57fa\u3065\u304f\u4fe1\u983c\u6027<\/li>\n\n\n\n<li>\u591a\u6570\u306e\u5b9f\u88c5\u4f8b\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u5b58\u5728<\/li>\n<\/ol>\n\n\n\n<p>CodeIgniter3\u306f\u3001\u7279\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u901f\u306a\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u6c42\u3081\u3089\u308c\u308bWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u5236\u9650\u304c\u3042\u308b\u74b0\u5883\u3067\u306e\u958b\u767a<\/li>\n\n\n\n<li>\u77ed\u671f\u9593\u3067\u306e\u958b\u767a\u304c\u5fc5\u8981\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30e2\u30c0\u30ca\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u305d\u306e\u8efd\u91cf\u6027\u3001\u9ad8\u901f\u6027\u3001\u5b66\u7fd2\u306e\u3057\u3084\u3059\u3055\u304b\u3089\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u306b\u9078\u3070\u308c\u7d9a\u3051\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30b7\u30f3\u30d7\u30eb\u3055\u3092\u91cd\u8996\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3044\u3066\u3001CodeIgniter3\u306f\u975e\u5e38\u306b\u6709\u52b9\u306a\u9078\u629e\u80a2\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">CodeIgniter3\u306e\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u308b\u5b9f\u8df5\u7684\u306a\u958b\u767a\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u30b5\u30fc\u30d0\u30fc\u8981\u4ef6<\/h3>\n\n\n\n<p>CodeIgniter3\u3092\u52b9\u7387\u7684\u306b\u904b\u7528\u3059\u308b\u305f\u3081\u306b\u3001\u307e\u305a\u306f\u9069\u5207\u306a\u74b0\u5883\u69cb\u7bc9\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u8a73\u7d30\u306a\u624b\u9806\u3068\u8981\u4ef6\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30b5\u30fc\u30d0\u30fc\u8981\u4ef6\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP \u30d0\u30fc\u30b8\u30e7\u30f3 5.6\u4ee5\u4e0a\uff08\u63a8\u5968\uff1aPHP 7.3\u4ee5\u4e0a\uff09<\/li>\n\n\n\n<li>MySQL (5.1+)\u3001PostgreSQL\u3001SQLite\u3001\u307e\u305f\u306fMSSQL<\/li>\n\n\n\n<li>Apache\/Nginx\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc<\/li>\n\n\n\n<li>mod_rewrite\u30e2\u30b8\u30e5\u30fc\u30eb\uff08\u304d\u308c\u3044\u306aURL\u306b\u5fc5\u8981\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Composer\u3092\u4f7f\u7528\u3057\u305f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Composer\u3092\u4f7f\u7528\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\ncomposer create-project codeigniter\/framework project-name\n\n# \u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ncd project-name\ncomposer install\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u624b\u52d5\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># GitHub\u304b\u3089\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\ngit clone https:\/\/github.com\/bcit-ci\/CodeIgniter.git\n# \u307e\u305f\u306f\u516c\u5f0f\u30b5\u30a4\u30c8\u304b\u3089ZIP\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\n# \u30d5\u30a1\u30a4\u30eb\u3092\u9069\u5207\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e\nmv CodeIgniter\/* \/var\/www\/html\/\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u8a2d\u5b9a\u306f<code>application\/config\/database.php<\/code>\u3067\u884c\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u4f8b\n$db['default'] = array(\n    'dsn'          =&gt; '',\n    'hostname'     =&gt; 'localhost',\n    'username'     =&gt; 'your_username',\n    'password'     =&gt; 'your_password',\n    'database'     =&gt; 'your_database',\n    'dbdriver'     =&gt; 'mysqli',\n    'dbprefix'     =&gt; '',\n    'pconnect'     =&gt; FALSE,\n    'db_debug'     =&gt; (ENVIRONMENT !== 'production'),\n    'cache_on'     =&gt; FALSE,\n    'cachedir'     =&gt; '',\n    'char_set'     =&gt; 'utf8',\n    'dbcollat'     =&gt; 'utf8_general_ci',\n    'swap_pre'     =&gt; '',\n    'encrypt'      =&gt; FALSE,\n    'compress'     =&gt; FALSE,\n    'stricton'     =&gt; FALSE,\n    'failover'     =&gt; array(),\n    'save_queries' =&gt; TRUE\n);\n<\/pre>\n\n\n\n<p>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306e\u6709\u52b9\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/config\/migration.php\n$config['migration_enabled'] = TRUE;\n$config['migration_type'] = 'timestamp';\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/migrations\/20240305000000_create_users_table.php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\nclass Migration_Create_users_table extends CI_Migration {\n    public function up() {\n        $this-&gt;dbforge-&gt;add_field(array(\n            'id' =&gt; array(\n                'type' =&gt; 'INT',\n                'constraint' =&gt; 11,\n                'unsigned' =&gt; TRUE,\n                'auto_increment' =&gt; TRUE\n            ),\n            'username' =&gt; array(\n                'type' =&gt; 'VARCHAR',\n                'constraint' =&gt; 100,\n            ),\n            'email' =&gt; array(\n                'type' =&gt; 'VARCHAR',\n                'constraint' =&gt; 100,\n            ),\n            'created_at' =&gt; array(\n                'type' =&gt; 'DATETIME',\n                'null' =&gt; TRUE,\n            ),\n        ));\n        $this-&gt;dbforge-&gt;add_key('id', TRUE);\n        $this-&gt;dbforge-&gt;create_table('users');\n    }\n\n    public function down() {\n        $this-&gt;dbforge-&gt;drop_table('users');\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u884c<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\npublic function migrate() {\n    $this-&gt;load-&gt;library('migration');\n    if ($this-&gt;migration-&gt;current() === FALSE) {\n        show_error($this-&gt;migration-&gt;error_string());\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u52b9\u7387\u7684\u306a\u958b\u767a\u306e\u305f\u3081\u306eIDE\u8a2d\u5b9a\u3068\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u958b\u767a\u74b0\u5883\u306e\u69cb\u7bc9\u306b\u306f\u3001\u9069\u5207\u306aIDE\u8a2d\u5b9a\u3068\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u306e\u5c0e\u5165\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u63a8\u5968IDE\u8a2d\u5b9a\uff08PHPStorm\/VSCode\uff09\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>PHPStorm\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodeIgniter3\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n\n\n\n<li>PHPUnit\u7d71\u5408\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30b9\u30cb\u30d5\u30a1\u30fc\uff08PHP_CodeSniffer\uff09\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>Xdebug\u306e\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHPStorm\u7528.idea\/php.xml\u8a2d\u5b9a\u4f8b\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;project version=\"4\"&gt;\n  &lt;component name=\"PhpIncludePathManager\"&gt;\n    &lt;include_path&gt;\n      &lt;path value=\"$PROJECT_DIR$\/vendor\" \/&gt;\n      &lt;path value=\"$PROJECT_DIR$\/system\" \/&gt;\n    &lt;\/include_path&gt;\n  &lt;\/component&gt;\n&lt;\/project&gt;\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>VSCode\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ settings.json\n{\n    \"php.suggest.basic\": true,\n    \"php.validate.enable\": true,\n    \"php.validate.run\": \"onType\",\n    \"php.executablePath\": \"\/usr\/bin\/php\",\n    \"php.debug.ideKey\": \"VSCODE\"\n}\n<\/pre>\n\n\n\n<p>\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Xdebug\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">; php.ini Xdebug\u8a2d\u5b9a\nxdebug.mode=debug\nxdebug.start_with_request=yes\nxdebug.client_host=127.0.0.1\nxdebug.client_port=9003\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP Debug Bar<\/li>\n\n\n\n<li>CodeIgniter Profiler<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d7\u30ed\u30d5\u30a1\u30a4\u30e9\u30fc\u306e\u6709\u52b9\u5316\n$this-&gt;output-&gt;enable_profiler(TRUE);\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30ed\u30b0\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/config\/config.php\n$config['log_threshold'] = 4; \/\/ \u958b\u767a\u74b0\u5883\u3067\u306f\u8a73\u7d30\u306a\u30ed\u30b0\u3092\u53d6\u5f97\n$config['log_path'] = APPPATH . 'logs\/';\n<\/pre>\n\n\n\n<p>\u3053\u306e\u74b0\u5883\u69cb\u7bc9\u30ac\u30a4\u30c9\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306aCodeIgniter3\u958b\u767a\u74b0\u5883\u3092\u6574\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u3068IDE\u306e\u9069\u5207\u306a\u8a2d\u5b9a\u306f\u3001\u958b\u767a\u52b9\u7387\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u5b9f\u73fe\u3059\u308b\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u8a2d\u8a08<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30e2\u30c7\u30eb\u30fb\u30d3\u30e5\u30fc\u30fb\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5f79\u5272\u3068\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>CodeIgniter3\u306eMVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8ad6\u7406\u7684\u306b\u5206\u96e2\u3057\u3001\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u8a2d\u8a08\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u5404\u5c64\u306e\u5f79\u5272\u3068\u5b9f\u88c5\u4f8b\u3092\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc (Controller)<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/controllers\/Blog.php\nclass Blog extends CI_Controller {\n    public function __construct() {\n        parent::__construct();\n        \/\/ \u30e2\u30c7\u30eb\u306e\u30ed\u30fc\u30c9\n        $this-&gt;load-&gt;model('blog_model');\n        \/\/ \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30ed\u30fc\u30c9\n        $this-&gt;load-&gt;library('form_validation');\n    }\n\n    public function index() {\n        \/\/ \u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5\n        $data['posts'] = $this-&gt;blog_model-&gt;get_all_posts();\n        \/\/ \u30d3\u30e5\u30fc\u3078\u306e\u30c7\u30fc\u30bf\u53d7\u3051\u6e21\u3057\n        $this-&gt;load-&gt;view('templates\/header');\n        $this-&gt;load-&gt;view('blog\/index', $data);\n        $this-&gt;load-&gt;view('templates\/footer');\n    }\n\n    public function create() {\n        \/\/ \u30d5\u30a9\u30fc\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a\n        $this-&gt;form_validation-&gt;set_rules('title', '\u30bf\u30a4\u30c8\u30eb', 'required');\n        $this-&gt;form_validation-&gt;set_rules('content', '\u5185\u5bb9', 'required');\n\n        if ($this-&gt;form_validation-&gt;run() === FALSE) {\n            $this-&gt;load-&gt;view('templates\/header');\n            $this-&gt;load-&gt;view('blog\/create');\n            $this-&gt;load-&gt;view('templates\/footer');\n        } else {\n            $this-&gt;blog_model-&gt;create_post();\n            redirect('blog');\n        }\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30e2\u30c7\u30eb (Model)<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/models\/Blog_model.php\nclass Blog_model extends CI_Model {\n    private $table = 'posts';\n\n    public function __construct() {\n        parent::__construct();\n        $this-&gt;load-&gt;database();\n    }\n\n    \/\/ \u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\u3092\u6d3b\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\n    public function get_all_posts() {\n        $query = $this-&gt;db-&gt;get($this-&gt;table);\n        return $query-&gt;result_array();\n    }\n\n    public function get_post($id) {\n        $query = $this-&gt;db-&gt;get_where($this-&gt;table, array('id' =&gt; $id));\n        return $query-&gt;row_array();\n    }\n\n    public function create_post() {\n        $data = array(\n            'title' =&gt; $this-&gt;input-&gt;post('title'),\n            'content' =&gt; $this-&gt;input-&gt;post('content'),\n            'created_at' =&gt; date('Y-m-d H:i:s')\n        );\n        return $this-&gt;db-&gt;insert($this-&gt;table, $data);\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d3\u30e5\u30fc (View)<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- application\/views\/blog\/index.php --&gt;\n&lt;div class=\"container\"&gt;\n    &lt;h2&gt;\u30d6\u30ed\u30b0\u8a18\u4e8b\u4e00\u89a7&lt;\/h2&gt;\n    &lt;?php foreach ($posts as $post): ?&gt;\n        &lt;article class=\"post\"&gt;\n            &lt;h3&gt;&lt;?php echo htmlspecialchars($post['title']); ?&gt;&lt;\/h3&gt;\n            &lt;div class=\"content\"&gt;\n                &lt;?php echo htmlspecialchars($post['content']); ?&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"meta\"&gt;\n                \u6295\u7a3f\u65e5: &lt;?php echo $post['created_at']; ?&gt;\n            &lt;\/div&gt;\n        &lt;\/article&gt;\n    &lt;?php endforeach; ?&gt;\n&lt;\/div&gt;\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068URL\u306e\u8a2d\u8a08\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>CodeIgniter3\u3067\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u8a08\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f7f\u3044\u3084\u3059\u3055\u3068\u4fdd\u5b88\u6027\u306b\u5927\u304d\u304f\u5f71\u97ff\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/config\/routes.php\n$route['default_controller'] = 'pages\/view';\n$route['404_override'] = '';\n$route['translate_uri_dashes'] = FALSE;\n\n\/\/ RESTful\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u8a08\n$route['blog'] = 'blog\/index';\n$route['blog\/create'] = 'blog\/create';\n$route['blog\/(:num)'] = 'blog\/view\/$1';\n$route['blog\/edit\/(:num)'] = 'blog\/edit\/$1';\n$route['blog\/delete\/(:num)'] = 'blog\/delete\/$1';\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n$route['api\/v1\/posts'] = 'api\/posts\/index';\n$route['api\/v1\/posts\/(:num)'] = 'api\/posts\/show\/$1';\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>URL\u30d8\u30eb\u30d1\u30fc\u306e\u6d3b\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d3\u30e5\u30fc\u5185\u3067\u306eURL\u751f\u6210\necho base_url('blog\/create');\necho site_url('blog\/view\/' . $post_id);\n\n\/\/ \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\nredirect('blog\/view\/' . $post_id);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u9069\u5207\u306a\u914d\u7f6e\u3068\u8cac\u52d9\u306e\u5206\u96e2<\/h3>\n\n\n\n<p>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u9069\u5207\u306b\u5206\u96e2\u3057\u3001SOLID\u539f\u5247\u306b\u5f93\u3063\u305f\u30b3\u30fc\u30c9\u8a2d\u8a08\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d3\u30b9\u30ec\u30a4\u30e4\u30fc\u306e\u5c0e\u5165<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/libraries\/Blog_service.php\nclass Blog_service {\n    private $CI;\n    \n    public function __construct() {\n        $this-&gt;CI =&amp; get_instance();\n        $this-&gt;CI-&gt;load-&gt;model('blog_model');\n    }\n\n    public function create_post($data) {\n        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3068\u696d\u52d9\u30ed\u30b8\u30c3\u30af\n        if ($this-&gt;validate_post($data)) {\n            return $this-&gt;CI-&gt;blog_model-&gt;create_post($data);\n        }\n        return false;\n    }\n\n    private function validate_post($data) {\n        \/\/ \u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b8\u30c3\u30af\n        return true;\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5171\u901a\u51e6\u7406\u306e\u5206\u96e2<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/core\/MY_Controller.php\nclass MY_Controller extends CI_Controller {\n    protected $data = array();\n    \n    public function __construct() {\n        parent::__construct();\n        \/\/ \u5171\u901a\u306e\u521d\u671f\u5316\u51e6\u7406\n        $this-&gt;load-&gt;helper('url');\n        $this-&gt;load-&gt;library('session');\n        $this-&gt;init();\n    }\n\n    protected function init() {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u72b6\u614b\u306e\u78ba\u8a8d\u306a\u3069\n        $this-&gt;data['user'] = $this-&gt;session-&gt;userdata('user');\n    }\n\n    protected function render($view) {\n        $this-&gt;load-&gt;view('templates\/header', $this-&gt;data);\n        $this-&gt;load-&gt;view($view, $this-&gt;data);\n        $this-&gt;load-&gt;view('templates\/footer', $this-&gt;data);\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/hooks\/Blog_hooks.php\nclass Blog_hooks {\n    private $CI;\n\n    public function __construct() {\n        $this-&gt;CI =&amp; get_instance();\n    }\n\n    public function post_created($post_id) {\n        \/\/ \u6295\u7a3f\u4f5c\u6210\u5f8c\u306e\u51e6\u7406\n        log_message('info', 'New post created: ' . $post_id);\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\u306a\u3069\n        $this-&gt;CI-&gt;cache-&gt;clean();\n    }\n}\n<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306aMVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u9069\u5207\u306a\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u5bb9\u6613\u6027<\/li>\n\n\n\n<li>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306e\u4f5c\u696d\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u62e1\u5f35\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<p>\u7279\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u30ec\u30a4\u30e4\u30fc\u306e\u5c0e\u5165\u3068\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u9069\u5207\u306a\u5206\u96e2\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u9577\u671f\u7684\u306a\u4fdd\u5b88\u6027\u3068\u62e1\u5f35\u6027\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u4e07\u5168\u306b\u3059\u308b\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">XSS\u5bfe\u7b56\u3068CSRF\u5bfe\u7b56\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>CodeIgniter3\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u304c\u6a19\u6e96\u3067\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u9069\u5207\u306a\u5b9f\u88c5\u3068\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>XSS\uff08\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30b9\u30af\u30ea\u30d7\u30c6\u30a3\u30f3\u30b0\uff09\u5bfe\u7b56<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/config\/config.php\n$config['global_xss_filtering'] = TRUE;  \/\/ \u30b0\u30ed\u30fc\u30d0\u30ebXSS\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u306e\u6709\u52b9\u5316\n\n\/\/ \u5165\u529b\u30c7\u30fc\u30bf\u306e\u5b89\u5168\u306a\u51e6\u7406\nclass Posts extends CI_Controller {\n    public function create() {\n        \/\/ XSS Clean\u6a5f\u80fd\u306e\u4f7f\u7528\n        $title = $this-&gt;security-&gt;xss_clean($this-&gt;input-&gt;post('title'));\n        $content = $this-&gt;security-&gt;xss_clean($this-&gt;input-&gt;post('content'));\n        \n        \/\/ HTMLPurifier\u306e\u7d71\u5408\uff08\u3088\u308a\u5f37\u529b\u306aXSS\u5bfe\u7b56\uff09\n        $this-&gt;load-&gt;library('html_purifier');\n        $clean_html = $this-&gt;html_purifier-&gt;purify($content);\n        \n        \/\/ \u30d3\u30e5\u30fc\u3067\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406\n        $data['content'] = html_escape($clean_html);\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>CSRF\uff08\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30ea\u30af\u30a8\u30b9\u30c8\u30d5\u30a9\u30fc\u30b8\u30a7\u30ea\uff09\u5bfe\u7b56<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/config\/config.php\n$config['csrf_protection'] = TRUE;\n$config['csrf_token_name'] = 'csrf_token_name';\n$config['csrf_cookie_name'] = 'csrf_cookie_name';\n$config['csrf_expire'] = 7200;\n\n\/\/ \u30d5\u30a9\u30fc\u30e0\u3067\u306eCSRF\u30c8\u30fc\u30af\u30f3\u5b9f\u88c5\n&lt;form method=\"post\" action=\"&lt;?php echo base_url('posts\/create'); ?&gt;\"&gt;\n    &lt;?php echo form_hidden($this-&gt;security-&gt;get_csrf_token_name(), $this-&gt;security-&gt;get_csrf_hash()); ?&gt;\n    &lt;!-- \u30d5\u30a9\u30fc\u30e0\u8981\u7d20 --&gt;\n&lt;\/form&gt;\n\n\/\/ Ajax\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u306eCSRF\u5bfe\u7b56\n&lt;script&gt;\n$.ajaxSetup({\n    beforeSend: function(xhr) {\n        xhr.setRequestHeader('X-CSRF-TOKEN', $('meta[name=\"csrf-token\"]').attr('content'));\n    }\n});\n&lt;\/script&gt;\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u3068\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u306e\u5b89\u5168\u306a\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30a2\u306a\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/config\/config.php\n$config['sess_driver'] = 'database';  \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30c3\u30b7\u30e7\u30f3\n$config['sess_save_path'] = 'ci_sessions';\n$config['sess_match_ip'] = TRUE;\n$config['sess_time_to_update'] = 300;\n$config['sess_regenerate_destroy'] = TRUE;\n\n\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210\nCREATE TABLE ci_sessions (\n    id varchar(128) NOT NULL,\n    ip_address varchar(45) NOT NULL,\n    timestamp int(10) unsigned DEFAULT 0 NOT NULL,\n    data blob NOT NULL,\n    PRIMARY KEY (id),\n    KEY ci_sessions_timestamp (timestamp)\n);\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5b89\u5168\u306a\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/libraries\/Auth.php\nclass Auth {\n    private $CI;\n    \n    public function __construct() {\n        $this-&gt;CI =&amp; get_instance();\n        $this-&gt;CI-&gt;load-&gt;model('user_model');\n        $this-&gt;CI-&gt;load-&gt;library('session');\n    }\n    \n    public function login($email, $password) {\n        \/\/ \u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30e5\u306e\u691c\u8a3c\n        $user = $this-&gt;CI-&gt;user_model-&gt;get_by_email($email);\n        if ($user &amp;&amp; password_verify($password, $user['password_hash'])) {\n            \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306e\u8a2d\u5b9a\n            $session_data = array(\n                'user_id' =&gt; $user['id'],\n                'email' =&gt; $user['email'],\n                'last_login' =&gt; date('Y-m-d H:i:s'),\n                'is_logged_in' =&gt; TRUE\n            );\n            $this-&gt;CI-&gt;session-&gt;set_userdata($session_data);\n            \n            \/\/ \u30ed\u30b0\u30a4\u30f3\u5c65\u6b74\u306e\u8a18\u9332\n            $this-&gt;log_login_attempt($user['id'], TRUE);\n            return TRUE;\n        }\n        $this-&gt;log_login_attempt(0, FALSE);\n        return FALSE;\n    }\n    \n    private function log_login_attempt($user_id, $success) {\n        $data = array(\n            'user_id' =&gt; $user_id,\n            'ip_address' =&gt; $this-&gt;CI-&gt;input-&gt;ip_address(),\n            'success' =&gt; $success,\n            'timestamp' =&gt; date('Y-m-d H:i:s')\n        );\n        $this-&gt;CI-&gt;db-&gt;insert('login_attempts', $data);\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u8a8d\u8a3c\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/core\/MY_Controller.php\nclass Auth_Controller extends CI_Controller {\n    protected $user;\n    \n    public function __construct() {\n        parent::__construct();\n        $this-&gt;load-&gt;library('auth');\n        $this-&gt;check_auth();\n    }\n    \n    private function check_auth() {\n        if (!$this-&gt;session-&gt;userdata('is_logged_in')) {\n            redirect('auth\/login');\n        }\n        \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30cf\u30a4\u30b8\u30e3\u30c3\u30af\u5bfe\u7b56\n        if ($this-&gt;session-&gt;userdata('ip_address') !== $this-&gt;input-&gt;ip_address()) {\n            $this-&gt;session-&gt;sess_destroy();\n            redirect('auth\/login');\n        }\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306b\u304a\u3051\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u306e\u4f7f\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b89\u5168\u306a\u30af\u30a8\u30ea\u306e\u5b9f\u88c5\nclass User_model extends CI_Model {\n    public function get_user($id, $status = 'active') {\n        $this-&gt;db-&gt;select('id, username, email')\n                 -&gt;from('users')\n                 -&gt;where('id', $id)\n                 -&gt;where('status', $status);\n        \n        return $this-&gt;db-&gt;get()-&gt;row_array();\n    }\n    \n    public function search_users($keyword) {\n        $this-&gt;db-&gt;like('username', $keyword);\n        \/\/ \u8907\u6570\u30ab\u30e9\u30e0\u306e\u691c\u7d22\n        $this-&gt;db-&gt;or_like(array(\n            'email' =&gt; $keyword,\n            'first_name' =&gt; $keyword\n        ));\n        return $this-&gt;db-&gt;get('users')-&gt;result_array();\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Payment_model extends CI_Model {\n    public function process_payment($user_id, $amount) {\n        $this-&gt;db-&gt;trans_start();\n        \n        try {\n            \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u6b8b\u9ad8\u66f4\u65b0\n            $this-&gt;db-&gt;where('id', $user_id)\n                     -&gt;set('balance', 'balance - ' . $amount, FALSE)\n                     -&gt;update('users');\n            \n            \/\/ \u53d6\u5f15\u5c65\u6b74\u306e\u8a18\u9332\n            $this-&gt;db-&gt;insert('transactions', array(\n                'user_id' =&gt; $user_id,\n                'amount' =&gt; $amount,\n                'type' =&gt; 'payment',\n                'created_at' =&gt; date('Y-m-d H:i:s')\n            ));\n            \n            $this-&gt;db-&gt;trans_complete();\n            return $this-&gt;db-&gt;trans_status();\n            \n        } catch (Exception $e) {\n            $this-&gt;db-&gt;trans_rollback();\n            log_message('error', 'Payment processing failed: ' . $e-&gt;getMessage());\n            return FALSE;\n        }\n    }\n}\n<\/pre>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5165\u529b\u30c7\u30fc\u30bf\u306e\u691c\u8a3c<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u4fe1\u983c\u3057\u306a\u3044<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u7279\u6b8a\u6587\u5b57\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u672c\u756a\u74b0\u5883\u3067\u306e\u8a73\u7d30\u306a\u30a8\u30e9\u30fc\u8868\u793a\u306e\u7121\u52b9\u5316<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u9069\u5207\u306a\u7ba1\u7406<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u3078\u306e\u5b89\u5168\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u8868\u793a<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u5b9a\u671f\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30b0\u306e\u5b9a\u671f\u7684\u306a\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u9069\u7528<\/li>\n\n\n\n<li>\u8106\u5f31\u6027\u30b9\u30ad\u30e3\u30f3\u306e\u5b9f\u65bd<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>CodeIgniter3\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30c9\u30e9\u30a4\u30d0\u306e\u8a2d\u5b9a\n$config['cache_driver'] = 'file';  \/\/ file, apc, memcached, redis\n$config['cache_path'] = APPPATH . 'cache\/';\n$config['cache_default_expires'] = 3600;  \/\/ 1\u6642\u9593\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5b9f\u88c5\u4f8b\nclass Blog extends CI_Controller {\n    public function view($id) {\n        $cache_key = \"blog_post_{$id}\";\n        \n        if (!$data = $this-&gt;cache-&gt;get($cache_key)) {\n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u306a\u3044\u5834\u5408\u306fDB\u304b\u3089\u53d6\u5f97\n            $data = $this-&gt;blog_model-&gt;get_post_with_comments($id);\n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\uff081\u6642\u9593\u6709\u52b9\uff09\n            $this-&gt;cache-&gt;save($cache_key, $data, 3600);\n        }\n        \n        $this-&gt;load-&gt;view('blog\/view', $data);\n    }\n}\n<\/pre>\n\n\n\n<p>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li>\u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li>API\u30ec\u30b9\u30dd\u30f3\u30b9\u30ad\u30e3\u30c3\u30b7\u30e5<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u76f4\u63a5\u5f71\u97ff\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Post_model extends CI_Model {\n    public function get_recent_posts() {\n        \/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6d3b\u7528\u3057\u305f\u30af\u30a8\u30ea\n        return $this-&gt;db\n            -&gt;select('p.*, u.username, c.category_name')\n            -&gt;from('posts p')\n            -&gt;join('users u', 'u.id = p.user_id', 'left')\n            -&gt;join('categories c', 'c.id = p.category_id', 'left')\n            -&gt;where('p.status', 'published')\n            -&gt;order_by('p.created_at', 'DESC')\n            -&gt;limit(10)\n            -&gt;get()\n            -&gt;result_array();\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- \u52b9\u7387\u7684\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08\nALTER TABLE posts ADD INDEX idx_status_date (status, created_at);\nALTER TABLE posts ADD INDEX idx_category (category_id);\nALTER TABLE posts ADD INDEX idx_user (user_id);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6700\u9069\u5316\u3068CDN\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u914d\u4fe1\u3092\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u30da\u30fc\u30b8\u30ed\u30fc\u30c9\u6642\u9593\u3092\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ assets\/config.php\n$config['assets_path'] = 'https:\/\/cdn.example.com\/assets\/';\n$config['assets_version'] = '1.0.0';\n\n\/\/ \u30d8\u30eb\u30d1\u30fc\u95a2\u6570\nfunction asset_url($path) {\n    $ci =&amp; get_instance();\n    return $ci-&gt;config-&gt;item('assets_path') . $path . '?v=' . $ci-&gt;config-&gt;item('assets_version');\n}\n\n\/\/ \u30d3\u30e5\u30fc\u3067\u306e\u4f7f\u7528\n&lt;link rel=\"stylesheet\" href=\"&lt;?php echo asset_url('css\/style.css'); ?&gt;\"&gt;\n&lt;script src=\"&lt;?php echo asset_url('js\/app.js'); ?&gt;\"&gt;&lt;\/script&gt;\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5\u306b\u3088\u308b\u30ec\u30b9\u30dd\u30f3\u30b9\u6539\u5584<\/h3>\n\n\n\n<p>\u91cd\u3044\u51e6\u7406\u3092\u975e\u540c\u671f\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u540c\u671f\u51e6\u7406\u7528\u306e\u30b8\u30e7\u30d6\u30af\u30e9\u30b9\nclass Email_job {\n    public function send_bulk_emails($user_ids) {\n        foreach ($user_ids as $user_id) {\n            $this-&gt;send_email($user_id);\n            \/\/ \u9032\u6357\u306e\u8a18\u9332\n            $this-&gt;update_progress($user_id);\n        }\n    }\n}\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u5b9f\u88c5\npublic function send_newsletter() {\n    \/\/ \u30b8\u30e7\u30d6\u3092\u30ad\u30e5\u30fc\u306b\u8ffd\u52a0\n    $job_id = $this-&gt;queue-&gt;push('Email_job', 'send_bulk_emails', [$user_ids]);\n    \n    \/\/ \u5373\u5ea7\u306b\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3059\n    return $this-&gt;response([\n        'status' =&gt; 'queued',\n        'job_id' =&gt; $job_id\n    ]);\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u3068\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<p>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u9069\u5316\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b89\u5b9a\u6027\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Large_data_processor {\n    public function process_csv($file_path) {\n        \/\/ \u30e1\u30e2\u30ea\u5236\u9650\u306e\u8a2d\u5b9a\n        ini_set('memory_limit', '256M');\n        \n        \/\/ \u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\u306b\u3088\u308b\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\n        $handle = fopen($file_path, 'r');\n        while (($data = fgetcsv($handle)) !== FALSE) {\n            $this-&gt;process_row($data);\n            \/\/ \u30e1\u30e2\u30ea\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n            unset($data);\n        }\n        fclose($handle);\n    }\n    \n    private function process_row($data) {\n        \/\/ \u884c\u3054\u3068\u306e\u51e6\u7406\n        $this-&gt;db-&gt;insert('processed_data', $data);\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30ed\u30b0\u7ba1\u7406\u3068\u76e3\u8996\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u554f\u984c\u3092\u65e9\u671f\u306b\u767a\u898b\u3057\u3001\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306e\u76e3\u8996\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ab\u30b9\u30bf\u30e0\u30ed\u30b0\u30e9\u30a4\u30d6\u30e9\u30ea\nclass Performance_logger {\n    public function log_request($start_time) {\n        $end_time = microtime(true);\n        $execution_time = $end_time - $start_time;\n        \n        $log_data = [\n            'uri' =&gt; $this-&gt;CI-&gt;uri-&gt;uri_string(),\n            'method' =&gt; $this-&gt;CI-&gt;input-&gt;method(),\n            'execution_time' =&gt; $execution_time,\n            'memory_usage' =&gt; memory_get_usage(),\n            'timestamp' =&gt; date('Y-m-d H:i:s')\n        ];\n        \n        $this-&gt;CI-&gt;db-&gt;insert('performance_logs', $log_data);\n    }\n}\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30c3\u30af\u3067\u306e\u4f7f\u7528\n$hook['post_controller'] = array(\n    'class' =&gt; 'Performance_logger',\n    'function' =&gt; 'log_request',\n    'filename' =&gt; 'Performance_logger.php',\n    'filepath' =&gt; 'hooks'\n);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u8ca0\u8377\u30c6\u30b9\u30c8\u3068\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u7279\u5b9a\u624b\u6cd5<\/h3>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6027\u80fd\u3092\u6e2c\u5b9a\u3057\u3001\u6539\u5584\u30dd\u30a4\u30f3\u30c8\u3092\u7279\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u306e\u6709\u52b9\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d7\u30ed\u30d5\u30a1\u30a4\u30e9\u306e\u8a2d\u5b9a\n$this-&gt;output-&gt;enable_profiler(TRUE);\n\n\/\/ \u7279\u5b9a\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u307f\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\n$sections = array(\n    'benchmarks' =&gt; TRUE,\n    'database' =&gt; TRUE,\n    'queries' =&gt; TRUE,\n    'memory_usage' =&gt; TRUE\n);\n$this-&gt;output-&gt;set_profiler_sections($sections);\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u306e\u305f\u3081\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Performance_test extends CI_Controller {\n    public function run_benchmark() {\n        \/\/ \u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u306e\u8a2d\u5b9a\n        $this-&gt;benchmark-&gt;mark('code_start');\n        \n        \/\/ \u30c6\u30b9\u30c8\u5bfe\u8c61\u306e\u51e6\u7406\n        $this-&gt;heavy_process();\n        \n        $this-&gt;benchmark-&gt;mark('code_end');\n        \n        \/\/ \u5b9f\u884c\u6642\u9593\u306e\u8a08\u6e2c\n        $execution_time = $this-&gt;benchmark-&gt;elapsed_time('code_start', 'code_end');\n        \n        echo \"Execution time: {$execution_time} seconds\";\n    }\n}\n<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9a\u671f\u7684\u306a\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1<\/li>\n\n\n\n<li>\u30ec\u30b9\u30dd\u30f3\u30b9\u30bf\u30a4\u30e0<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u7387<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u7279\u5b9a<\/li>\n\n\n\n<li>\u512a\u5148\u9806\u4f4d\u4ed8\u3051<\/li>\n\n\n\n<li>\u52b9\u679c\u6e2c\u5b9a<\/li>\n\n\n\n<li>\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u8ca0\u8377\u30c6\u30b9\u30c8\u306e\u5b9f\u65bd<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7570\u306a\u308b\u8ca0\u8377\u30d1\u30bf\u30fc\u30f3\u3067\u306e\u30c6\u30b9\u30c8<\/li>\n\n\n\n<li>\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u9ad8\u6027\u80fd\u306aCodeIgniter3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-24\">\u5b9f\u8df5\u7684\u306aCodeIgniter3\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5177\u4f53\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">EC\u30b5\u30a4\u30c8\u306e\u958b\u767a\u4e8b\u4f8b\u3068\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u5b9f\u969b\u306eEC\u30b5\u30a4\u30c8\u958b\u767a\u3092\u4f8b\u306b\u3001CodeIgniter3\u3067\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">application\/\n\u251c\u2500\u2500 controllers\/\n\u2502   \u251c\u2500\u2500 Shop.php\n\u2502   \u251c\u2500\u2500 Cart.php\n\u2502   \u251c\u2500\u2500 Order.php\n\u2502   \u2514\u2500\u2500 Payment.php\n\u251c\u2500\u2500 models\/\n\u2502   \u251c\u2500\u2500 Product_model.php\n\u2502   \u251c\u2500\u2500 Cart_model.php\n\u2502   \u251c\u2500\u2500 Order_model.php\n\u2502   \u2514\u2500\u2500 Payment_model.php\n\u251c\u2500\u2500 views\/\n\u2502   \u251c\u2500\u2500 shop\/\n\u2502   \u2502   \u251c\u2500\u2500 product_list.php\n\u2502   \u2502   \u2514\u2500\u2500 product_detail.php\n\u2502   \u251c\u2500\u2500 cart\/\n\u2502   \u2502   \u251c\u2500\u2500 cart.php\n\u2502   \u2502   \u2514\u2500\u2500 checkout.php\n\u2502   \u2514\u2500\u2500 order\/\n\u2502       \u251c\u2500\u2500 confirm.php\n\u2502       \u2514\u2500\u2500 complete.php\n\u2514\u2500\u2500 libraries\/\n    \u251c\u2500\u2500 Payment_gateway.php\n    \u2514\u2500\u2500 Cart_manager.php\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5546\u54c1\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ controllers\/Shop.php\nclass Shop extends CI_Controller {\n    public function __construct() {\n        parent::__construct();\n        $this-&gt;load-&gt;model('product_model');\n        $this-&gt;load-&gt;library('cart_manager');\n    }\n\n    public function product($id) {\n        $data['product'] = $this-&gt;product_model-&gt;get_with_details($id);\n        $data['related_products'] = $this-&gt;product_model-&gt;get_related($id);\n        $data['stock_status'] = $this-&gt;product_model-&gt;check_stock($id);\n        \n        $this-&gt;load-&gt;view('shop\/product_detail', $data);\n    }\n}\n\n\/\/ models\/Product_model.php\nclass Product_model extends CI_Model {\n    public function get_with_details($id) {\n        return $this-&gt;db\n            -&gt;select('p.*, c.name as category_name, COUNT(r.id) as review_count')\n            -&gt;from('products p')\n            -&gt;join('categories c', 'c.id = p.category_id')\n            -&gt;join('reviews r', 'r.product_id = p.id', 'left')\n            -&gt;where('p.id', $id)\n            -&gt;group_by('p.id')\n            -&gt;get()\n            -&gt;row_array();\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u6ce8\u6587\u51e6\u7406\u30b7\u30b9\u30c6\u30e0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ libraries\/Cart_manager.php\nclass Cart_manager {\n    private $CI;\n    \n    public function __construct() {\n        $this-&gt;CI =&amp; get_instance();\n        $this-&gt;CI-&gt;load-&gt;library('session');\n    }\n    \n    public function add_item($product_id, $quantity) {\n        \/\/ \u5728\u5eab\u30c1\u30a7\u30c3\u30af\n        if (!$this-&gt;check_stock($product_id, $quantity)) {\n            return FALSE;\n        }\n        \n        \/\/ \u30ab\u30fc\u30c8\u8ffd\u52a0\u51e6\u7406\n        $cart_data = $this-&gt;CI-&gt;session-&gt;userdata('cart') ?: [];\n        $cart_data[$product_id] = [\n            'quantity' =&gt; ($cart_data[$product_id]['quantity'] ?? 0) + $quantity,\n            'added_at' =&gt; date('Y-m-d H:i:s')\n        ];\n        \n        $this-&gt;CI-&gt;session-&gt;set_userdata('cart', $cart_data);\n        return TRUE;\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">REST API\u306e\u5b9f\u88c5\u3068\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a<\/h3>\n\n\n\n<p>CodeIgniter3\u3067RESTful API\u3092\u5b9f\u88c5\u3057\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3068\u9023\u643a\u3059\u308b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>REST API\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ controllers\/api\/Products.php\nclass Products extends REST_Controller {\n    public function __construct() {\n        parent::__construct();\n        $this-&gt;load-&gt;model('product_model');\n    }\n    \n    public function index_get() {\n        $products = $this-&gt;product_model-&gt;get_all();\n        $this-&gt;response($products, 200);\n    }\n    \n    public function stock_post() {\n        $product_id = $this-&gt;post('product_id');\n        $quantity = $this-&gt;post('quantity');\n        \n        if ($this-&gt;product_model-&gt;update_stock($product_id, $quantity)) {\n            $this-&gt;response(['status' =&gt; 'success'], 200);\n        } else {\n            $this-&gt;response(['status' =&gt; 'error'], 400);\n        }\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u9023\u643a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ libraries\/Inventory_service.php\nclass Inventory_service {\n    private $base_url;\n    private $api_key;\n    \n    public function __construct() {\n        $this-&gt;CI =&amp; get_instance();\n        $this-&gt;base_url = $this-&gt;CI-&gt;config-&gt;item('inventory_api_url');\n        $this-&gt;api_key = $this-&gt;CI-&gt;config-&gt;item('inventory_api_key');\n    }\n    \n    public function check_stock($product_id) {\n        $curl = curl_init();\n        curl_setopt_array($curl, [\n            CURLOPT_URL =&gt; \"{$this-&gt;base_url}\/stock\/{$product_id}\",\n            CURLOPT_RETURNTRANSFER =&gt; true,\n            CURLOPT_HTTPHEADER =&gt; [\n                \"X-API-KEY: {$this-&gt;api_key}\",\n                \"Accept: application\/json\"\n            ]\n        ]);\n        \n        $response = curl_exec($curl);\n        curl_close($curl);\n        \n        return json_decode($response, true);\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u624b\u6cd5<\/h3>\n\n\n\n<p>\u30ec\u30ac\u30b7\u30fc\u306aCodeIgniter3\u30b7\u30b9\u30c6\u30e0\u3092\u6bb5\u968e\u7684\u306b\u6539\u5584\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u5c0e\u5165<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ libraries\/DI_Container.php\nclass DI_Container {\n    private $services = [];\n    \n    public function register($name, $callback) {\n        $this-&gt;services[$name] = $callback;\n    }\n    \n    public function resolve($name) {\n        if (!isset($this-&gt;services[$name])) {\n            throw new Exception(\"Service not found: {$name}\");\n        }\n        return $this-&gt;services[$name]();\n    }\n}\n\n\/\/ application\/core\/MY_Controller.php\nclass MY_Controller extends CI_Controller {\n    protected $container;\n    \n    public function __construct() {\n        parent::__construct();\n        $this-&gt;container = new DI_Container();\n        $this-&gt;register_services();\n    }\n    \n    private function register_services() {\n        $this-&gt;container-&gt;register('product_service', function() {\n            $model = new Product_model();\n            $cache = new Cache_service();\n            return new Product_service($model, $cache);\n        });\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ repositories\/Product_repository.php\ninterface ProductRepositoryInterface {\n    public function findById($id);\n    public function findByCategory($category_id);\n    public function save(array $data);\n}\n\nclass ProductRepository implements ProductRepositoryInterface {\n    private $db;\n    \n    public function __construct(CI_DB $db) {\n        $this-&gt;db = $db;\n    }\n    \n    public function findById($id) {\n        return $this-&gt;db\n            -&gt;where('id', $id)\n            -&gt;get('products')\n            -&gt;row_array();\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d3\u30b9\u30ec\u30a4\u30e4\u30fc\u306e\u8ffd\u52a0<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ services\/Order_service.php\nclass Order_service {\n    private $order_repository;\n    private $payment_service;\n    private $inventory_service;\n    \n    public function __construct(\n        OrderRepositoryInterface $order_repository,\n        PaymentServiceInterface $payment_service,\n        InventoryServiceInterface $inventory_service\n    ) {\n        $this-&gt;order_repository = $order_repository;\n        $this-&gt;payment_service = $payment_service;\n        $this-&gt;inventory_service = $inventory_service;\n    }\n    \n    public function process_order($order_data) {\n        $this-&gt;db-&gt;trans_start();\n        \n        try {\n            \/\/ \u5728\u5eab\u30c1\u30a7\u30c3\u30af\n            if (!$this-&gt;inventory_service-&gt;check_stock($order_data['product_id'])) {\n                throw new OutOfStockException();\n            }\n            \n            \/\/ \u652f\u6255\u3044\u51e6\u7406\n            $payment_result = $this-&gt;payment_service-&gt;process($order_data['payment']);\n            if (!$payment_result['success']) {\n                throw new PaymentFailedException();\n            }\n            \n            \/\/ \u6ce8\u6587\u4fdd\u5b58\n            $order_id = $this-&gt;order_repository-&gt;save($order_data);\n            \n            $this-&gt;db-&gt;trans_complete();\n            return $order_id;\n            \n        } catch (Exception $e) {\n            $this-&gt;db-&gt;trans_rollback();\n            throw $e;\n        }\n    }\n}\n<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u5206\u6563\u51e6\u7406<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>\u72ec\u7acb\u3057\u305f\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u5411\u4e0a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u660e\u78ba\u306a\u8cac\u52d9\u5206\u96e2<\/li>\n\n\n\n<li>\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30af\u30bb\u30b9<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u4f8b\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-28\">CodeIgniter3\u306e\u904b\u7528\u4fdd\u5b88\u3068\u5c06\u6765\u6027<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3068\u4e92\u63db\u6027\u306e\u7dad\u6301<\/h3>\n\n\n\n<p>CodeIgniter3\u30b7\u30b9\u30c6\u30e0\u3092\u9577\u671f\u7684\u306b\u904b\u7528\u3057\u3066\u3044\u304f\u4e0a\u3067\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3068\u4e92\u63db\u6027\u306e\u7dad\u6301\u306f\u91cd\u8981\u306a\u8ab2\u984c\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u306e\u57fa\u672c\u6226\u7565<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u7528\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9\nclass Version_manager {\n    private $CI;\n    \n    public function __construct() {\n        $this-&gt;CI =&amp; get_instance();\n        $this-&gt;CI-&gt;load-&gt;database();\n    }\n    \n    public function check_version() {\n        $current_version = $this-&gt;get_current_version();\n        $latest_version = $this-&gt;get_latest_version();\n        \n        if ($current_version &lt; $latest_version) {\n            return [\n                'needs_upgrade' =&gt; true,\n                'current' =&gt; $current_version,\n                'latest' =&gt; $latest_version,\n                'upgrades' =&gt; $this-&gt;get_pending_upgrades($current_version)\n            ];\n        }\n        return ['needs_upgrade' =&gt; false];\n    }\n    \n    private function get_pending_upgrades($current_version) {\n        return $this-&gt;db\n            -&gt;where('version &gt;', $current_version)\n            -&gt;order_by('version', 'ASC')\n            -&gt;get('system_upgrades')\n            -&gt;result_array();\n    }\n}\n\n\/\/ \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4f8b\nclass Upgrade_manager {\n    public function run_upgrade($version) {\n        $method = 'upgrade_to_' . str_replace('.', '_', $version);\n        if (method_exists($this, $method)) {\n            return $this-&gt;$method();\n        }\n        return false;\n    }\n    \n    private function upgrade_to_3_1_12() {\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u306e\u66f4\u65b0\n        $this-&gt;db-&gt;query('ALTER TABLE users ADD COLUMN last_login DATETIME');\n        \/\/ \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0\n        $this-&gt;update_config_file();\n        return true;\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u4e92\u63db\u6027\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Compatibility_test extends CI_Controller {\n    public function run_tests() {\n        $this-&gt;load-&gt;library('unit_test');\n        \n        \/\/ \u57fa\u672c\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\n        $this-&gt;test_database_connections();\n        $this-&gt;test_session_handling();\n        $this-&gt;test_custom_libraries();\n        \n        \/\/ \u30ec\u30ac\u30b7\u30fc\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\n        $this-&gt;test_deprecated_functions();\n        \n        echo $this-&gt;unit-&gt;report();\n    }\n    \n    private function test_database_connections() {\n        $this-&gt;load-&gt;database();\n        $result = $this-&gt;db-&gt;simple_query('SELECT 1');\n        $this-&gt;unit-&gt;run($result, true, 'Database Connection Test');\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-30\">\u30e2\u30c0\u30f3PHP\u958b\u767a\u624b\u6cd5\u3068\u306e\u7d71\u5408\u30a2\u30d7\u30ed\u30fc\u30c1<\/h3>\n\n\n\n<p>CodeIgniter3\u3092\u73fe\u4ee3\u306ePHP\u958b\u767a\u624b\u6cd5\u3068\u7d71\u5408\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Composer\u306e\u7d71\u5408<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/composer.json\n{\n    \"require\": {\n        \"php\": \"&gt;=7.3\",\n        \"monolog\/monolog\": \"^2.0\",\n        \"guzzlehttp\/guzzle\": \"^7.0\",\n        \"symfony\/var-dumper\": \"^5.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"application\/classes\/\"\n        }\n    }\n}\n\n\/\/ application\/config\/config.php\n$config['composer_autoload'] = TRUE;\n\n\/\/ \u30e2\u30c0\u30f3\u306a\u30af\u30e9\u30b9\u306e\u4f7f\u7528\u4f8b\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\nclass Modern_logger {\n    private $logger;\n    \n    public function __construct() {\n        $this-&gt;logger = new Logger('application');\n        $this-&gt;logger-&gt;pushHandler(new StreamHandler(\n            APPPATH . 'logs\/modern.log',\n            Logger::DEBUG\n        ));\n    }\n    \n    public function log($message, $level = 'info') {\n        $this-&gt;logger-&gt;{$level}($message);\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>PHPUnit\u7d71\u5408<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/tests\/TestCase.php\nclass TestCase extends PHPUnit\\Framework\\TestCase {\n    protected $CI;\n    \n    public function setUp(): void {\n        parent::setUp();\n        $this-&gt;CI =&amp; get_instance();\n    }\n}\n\n\/\/ application\/tests\/controllers\/Shop_test.php\nclass Shop_test extends TestCase {\n    public function testProductList() {\n        $output = $this-&gt;request('GET', 'shop\/products');\n        $this-&gt;assertResponseCode(200);\n        $this-&gt;assertStringContainsString('Product List', $output);\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">CodeIgniter4\u3078\u306e\u79fb\u884c\u3092\u898b\u636e\u3048\u305f\u8a2d\u8a08\u65b9\u91dd<\/h3>\n\n\n\n<p>\u5c06\u6765\u7684\u306aCodeIgniter4\u3078\u306e\u79fb\u884c\u3092\u898b\u636e\u3048\u305f\u8a2d\u8a08\u65b9\u91dd\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u79fb\u884c\u6e96\u5099\u306e\u305f\u3081\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u540d\u524d\u7a7a\u9593\u306e\u5c0e\u5165\nnamespace App\\Services;\n\nclass ProductService {\n    private $product_repository;\n    \n    public function __construct(ProductRepositoryInterface $repository) {\n        $this-&gt;product_repository = $repository;\n    }\n    \n    public function getProductDetails($id) {\n        return $this-&gt;product_repository-&gt;findWithDetails($id);\n    }\n}\n\n\/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u6d3b\u7528\nnamespace App\\Interfaces;\n\ninterface CacheInterface {\n    public function get($key);\n    public function set($key, $value, $ttl = 3600);\n    public function delete($key);\n}\n\n\/\/ \u79fb\u884c\u3057\u3084\u3059\u3044\u69cb\u9020\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\nclass API_Controller extends CI_Controller {\n    protected function response($data, $status = 200) {\n        $this-&gt;output\n            -&gt;set_content_type('application\/json')\n            -&gt;set_status_header($status)\n            -&gt;set_output(json_encode($data));\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>CI4\u4e92\u63db\u306e\u30d8\u30eb\u30d1\u30fc\u95a2\u6570<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/helpers\/ci4_helper.php\nif (!function_exists('service')) {\n    function service($name) {\n        $CI =&amp; get_instance();\n        return $CI-&gt;load-&gt;library($name);\n    }\n}\n\nif (!function_exists('view')) {\n    function view($name, $data = []) {\n        $CI =&amp; get_instance();\n        return $CI-&gt;load-&gt;view($name, $data, TRUE);\n    }\n}\n<\/pre>\n\n\n\n<p>\u79fb\u884c\u306b\u5411\u3051\u305f\u4e3b\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u6574\u7406\u3068\u6539\u5584<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u7279\u5b9a\u3068\u6587\u66f8\u5316<\/li>\n\n\n\n<li>\u6280\u8853\u7684\u8ca0\u50b5\u306e\u8a08\u753b\u7684\u306a\u89e3\u6d88<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u306e\u63a8\u9032<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u79fb\u884c\u8a08\u753b\u306e\u7b56\u5b9a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u79fb\u884c\u30a2\u30d7\u30ed\u30fc\u30c1\u306e\u691c\u8a0e<\/li>\n\n\n\n<li>\u512a\u5148\u9806\u4f4d\u4ed8\u3051\u3068\u30ea\u30b9\u30af\u8a55\u4fa1<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u6226\u7565\u306e\u7acb\u6848<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30c1\u30fc\u30e0\u80b2\u6210\u3068\u77e5\u8b58\u79fb\u8ee2<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodeIgniter4\u306e\u5b66\u7fd2\u8a08\u753b<\/li>\n\n\n\n<li>\u79fb\u884c\u624b\u9806\u306e\u6587\u66f8\u5316<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u306e\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7<\/li>\n<\/ul>\n\n\n\n<p>\u904b\u7528\u4fdd\u5b88\u306b\u304a\u3051\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9a\u671f\u7684\u306a\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u9069\u7528<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u5fa9\u65e7\u30c6\u30b9\u30c8<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u56f3\u306e\u66f4\u65b0<\/li>\n\n\n\n<li>API\u4ed5\u69d8\u66f8\u306e\u7dad\u6301<\/li>\n\n\n\n<li>\u904b\u7528\u624b\u9806\u66f8\u306e\u6574\u5099<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6280\u8853\u7684\u8ca0\u50b5\u306e\u7ba1\u7406<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u5b9f\u65bd<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65b9\u91dd\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u73fe\u5728\u306eCodeIgniter3\u30b7\u30b9\u30c6\u30e0\u3092\u5b89\u5b9a\u7684\u306b\u904b\u7528\u3057\u306a\u304c\u3089\u3001\u5c06\u6765\u7684\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3084\u79fb\u884c\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u67d4\u8edf\u306a\u8a2d\u8a08\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":{"0":"post-3382","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3382"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3382\/revisions"}],"predecessor-version":[{"id":3384,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3382\/revisions\/3384"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}