{"id":7933,"date":"2017-09-13T08:32:54","date_gmt":"2017-09-13T00:32:54","guid":{"rendered":"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/?p=7933"},"modified":"2026-06-16T22:37:42","modified_gmt":"2026-06-16T14:37:42","slug":"%e6%96%b0%e5%8c%97%e5%b8%82%e6%95%99%e8%82%b2%e5%b1%80%e7%a8%8b%e5%bc%8f%e6%87%89%e7%94%a8%e7%a0%94%e7%99%bc%e7%a4%be%e7%be%a4%e5%b7%a5%e4%bd%9c%e5%9d%8a1060913","status":"publish","type":"post","link":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/archives\/7933","title":{"rendered":"\u65b0\u5317\u5e02\u6559\u80b2\u5c40\u7a0b\u5f0f\u61c9\u7528\u7814\u767c\u793e\u7fa4\u5de5\u4f5c\u574a\uff1aPHP \u6846\u67b6 CodeIgniter 3(1060913-0927)"},"content":{"rendered":"<div class=\"post-headline\">\n<h3>\u65e5\u671f\uff1a106\u5e749\u670813\u65e5 &#8211; 9\u670827\u65e5<\/h3>\n<\/div>\n<div class=\"post-bodycopy clearfix\">\n<h3>\u6642\u9593\uff1a\u9031\u4e09\u4e0b\u5348<\/h3>\n<h3>\u5730\u9ede\uff1a\u65b0\u5317\u5e02\u6559\u7814\u4e2d\u5fc3<\/h3>\n<h3>\u516c\u6587\u8207\u8a08\u756b\uff1a<\/h3>\n<ul>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/03\/106E0001588.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">\u516c\u6587\uff1a106E0001588<\/a><\/li>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/03\/%E6%96%B0%E5%8C%97%E5%B8%82106%E5%B9%B4%E5%BA%A6%E8%87%AA%E7%94%B1%E8%BB%9F%E9%AB%94%E6%8E%A8%E5%BB%A3%E6%9A%A8%E7%A8%8B%E5%BC%8F%E6%87%89%E7%94%A8%E7%A0%94%E7%99%BC%E4%B8%AD%E5%BF%83%E5%B7%A5%E4%BD%9C%E8%A8%88%E7%95%AB.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">\u65b0\u5317\u5e02106\u5e74\u5ea6\u81ea\u7531\u8edf\u9ad4\u63a8\u5ee3\u66a8\u7a0b\u5f0f\u61c9\u7528\u7814\u767c\u4e2d\u5fc3\u5de5\u4f5c\u8a08\u756b<\/a><\/li>\n<\/ul>\n<h3>\u8ab2\u7a0b\u4e3b\u984c\uff1aPHP \u6846\u67b6 CodeIgniter 3<\/h3>\n<ul>\n<li>CodeIgniter \u7e41\u9ad4\u4e2d\u6587\u5b98\u65b9\u7db2\u7ad9<\/li>\n<li>CodeIgniter \u4f7f\u7528\u624b\u518a\u2014 CodeIgniter 3.1.5 documentation<\/li>\n<\/ul>\n<h3>\u8b1b\u5e2b\uff1a\u6a39\u6797\u570b\u5c0f\u9ec3\u4fdd\u592a\u8001\u5e2b<\/h3>\n<h3>\u958b\u767c\u74b0\u5883\u8207\u5de5\u5177\uff1a<\/h3>\n<ul>\n<li><a href=\"https:\/\/sites.google.com\/view\/phpbasic\/wagon-%E7%9A%84%E4%B8%8B%E8%BC%89%E5%8F%8A%E8%A8%AD%E5%AE%9A?authuser=0\" target=\"_blank\" rel=\"noopener noreferrer\">Wagon \u7684\u4e0b\u8f09\u53ca\u8a2d\u5b9a<\/a>\n<ul>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/09\/wagon-1.3.1.7z\" target=\"_blank\" rel=\"noopener noreferrer\">wagon-1.3.1.7z<\/a><\/li>\n<li><a href=\"http:\/\/www.laravel-dojo.com\/opensource\/wagon\" target=\"_blank\" rel=\"noopener noreferrer\">\u514d\u5b89\u88dd\u53ef\u651c\u7684 LARAVEL \u958b\u767c\u74b0\u5883<\/a><\/li>\n<li><a class=\"dhtgD\" href=\"https:\/\/github.com\/laravel-dojo\/wagon\" target=\"_blank\" rel=\"noopener noreferrer\">wagon on github<\/a><\/li>\n<li><strong>\u6ce8\u610f\u4e8b\u9805<\/strong>\uff1a\u89e3\u58d3\u7e2e\u5f8c\uff0c\u9808\u8a2d\u5b9a\u8a72\u8cc7\u6599\u593e\u7684\u5b89\u5168\u6027\uff0c\u4f7f\u00a0<strong>Users<\/strong>\u00a0\u7fa4\u7d44\u8a2d\u70ba\u53ef\u300c<strong>\u4fee\u6539<\/strong>\u300d\uff0c\u5982\u6b64\u5728\u555f\u52d5\u53ca\u95dc\u9589 uwAmp \u6642\uff0c\u624d\u4e0d\u6703\u51fa\u554f\u984c\u3002<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/phpstorm\/\" target=\"_blank\" rel=\"noopener noreferrer\">PhpStorm<\/a><\/li>\n<li><a href=\"https:\/\/www.gitkraken.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">GitKraken: Git GUI for Windows, Mac &amp; Linux<\/a><\/li>\n<\/ul>\n<h3>\u3010<a href=\"#resource\">\u5b78\u7fd2\u8cc7\u6e90<\/a>\u3011\u3010<a href=\"#0913\">\u4e5d\u670813\u65e5<\/a>\u3011\u3010<a href=\"#0920\">\u4e5d\u670820\u65e5<\/a>\u3011<span style=\"color: #ff0000;\">\u3010<a style=\"color: #ff0000;\" href=\"#0927\">\u4e5d\u670827\u65e5<\/a>\u3011<\/span><\/h3>\n<h3>\u8ab2\u5f8c\u88dc\u5145\u6559\u6750\uff1a<\/h3>\n<ul>\n<li>CodeIgniter3 Linux\u958b\u767c\u74b0\u58830001\u00a0~\u00a00003<\/li>\n<li>CodeIgniter3 \u4e0a\u50b3XML\u3001\u89e3\u6790\u3001\u5beb\u5165\u8cc7\u6599\u5eab01 ~ 05<\/li>\n<\/ul>\n<div class=\"epyt-video-wrapper\"><iframe loading=\"lazy\"  style=\"display: block; margin: 0px auto;\"  id=\"_ytid_62220\"  width=\"640\" height=\"360\"  data-origwidth=\"640\" data-origheight=\"360\"  data-relstop=\"1\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;list=PLJYD7mcLee2qzEfEov8adzhB6GrAi8HE1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=0&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  epyt-is-override  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div>\n<h3>\u8b1b\u7fa9\uff1a<a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/09\/1060927_PHP_Framework_Codeigniter\u4e09.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">1060927_PHP_Framework_Codeigniter(\u4e09)<\/a><\/h3>\n<ul>\n<li><a href=\"https:\/\/docs.google.com\/document\/d\/1UFw6eRN68A_mmYuzV5rOzt-5fq6-HcgqQ_OcdVCn6KQ\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.google.com\/document\/d\/1UFw6eRN68A_mmYuzV5rOzt-5fq6-HcgqQ_OcdVCn6KQ<\/a><\/li>\n<\/ul>\n<h3>\u8ab2\u7a0b\u7db2\u7ad9\u8cc7\u6599\u4e0b\u8f09\uff1a<\/h3>\n<ul>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/09\/CodeIgniter-3.1.5_20170927.7z\" target=\"_blank\" rel=\"noopener noreferrer\">CodeIgniter-3.1.5_20170927.7z<\/a><\/li>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/09\/CodeIgniter-3.1.5_git.7z\" target=\"_blank\" rel=\"noopener noreferrer\">CodeIgniter-3.1.5_git.7z<\/a><\/li>\n<\/ul>\n<h3>\u6559\u5b78\u76f8\u95dc\u7db2\u7ad9\uff1a<\/h3>\n<ul>\n<li>NTPC OpenID\uff1a<a href=\"http:\/\/openid.ntpc.edu.tw\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/openid.ntpc.edu.tw<\/a>\n<ul>\n<li>\u6b04\u4f4d\u898f\u683c\u8aaa\u660e<\/li>\n<li>\u7bc4\u4f8b\u7a0b\u5f0f\u4e0b\u8f09<\/li>\n<li>\u6ce8\u610f\u4e8b\u9805\uff1a<br \/>\nopenid \u7684\u7bc4\u4f8b\u4e2d\uff0copenid.php \u9019\u652flibrary\u88e1\u5728 #280, #293, #309 \u9019\u4e09\u884c\u4e2d\uff0c\u5224\u65b7 ssl \u7684 CN_match \u9019\u500b\u8a2d\u5b9a\u5df2\u4e0d\u518d\u4f7f\u7528(deprecated)\u3002apache2 \u76ee\u524d\u4f3c\u4e4e\u4ecd\u53ef\u6b63\u5e38\u4f7f\u7528\uff0c\u4e0d\u904e\uff0c\u653e\u5728 nginx \u7684\u8a71\uff0c\u6703\u5674\u932f\u8aa4\uff0c\u5c07 &#8216;CN_match&#8217; \u81ea\u884c\u6539\u6210 &#8216;peer_name&#8217; \u53ef\u6b63\u5e38\u57f7\u884c\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><a href=\"https:\/\/zh.wikipedia.org\/zh-tw\/OpenID\" target=\"_blank\" rel=\"noopener noreferrer\">OpenID &#8211; \u7dad\u57fa\u767e\u79d1\uff0c\u81ea\u7531\u7684\u767e\u79d1\u5168\u66f8<\/a><\/li>\n<li>\u8a8d\u8b58 RESTful API\uff1a<a href=\"https:\/\/www.youtube.com\/watch?v=gHCB0sd47Is&amp;t=4\">https:\/\/www.youtube.com\/watch?v=gHCB0sd47Is&amp;t=4<\/a><\/li>\n<li><a href=\"https:\/\/zh.wikipedia.org\/zh-tw\/REST\" target=\"_blank\" rel=\"noopener noreferrer\">REST &#8211; \u7dad\u57fa\u767e\u79d1\uff0c\u81ea\u7531\u7684\u767e\u79d1\u5168\u66f8<\/a><\/li>\n<li>\u7c21\u660eRESTful API\u8a2d\u8a08\u8981\u9ede<\/li>\n<\/ul>\n<h3>\u6559\u5b78\u5167\u5bb9\uff1a<\/h3>\n<h3><span style=\"color: #0000ff;\">application\\views\\auth\\form.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">&lt;!-- Collect the nav links, forms, and other content for toggling --&gt;\r\n&lt;div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-1\"&gt;\r\n    &lt;ul class=\"nav navbar-nav\"&gt;\r\n        &lt;?php foreach( $menu as $key =&gt; $value): ?&gt;\r\n            &lt;li&gt;\r\n                &lt;a href=\"&lt;?=base_url()?&gt;&lt;?=$value?&gt;\"&gt;&lt;?=$key?&gt;&lt;\/a&gt;\r\n            &lt;\/li&gt;\r\n        &lt;?php endforeach; ?&gt;\r\n    &lt;\/ul&gt;\r\n&lt;\/div&gt;\r\n...\r\n\r\n&lt;!-- Post Content --&gt;\r\n...\r\n\r\n&lt;ul&gt;\r\n    &lt;form action=\"\/ntpc_openid_login\" method=\"post\"&gt;\r\n        &lt;input\r\n                class=\"btn-info btn-lg\"\r\n                type=\"submit\"\r\n                value=\"\u65b0\u5317\u5e02OpenID\u767b\u5165\"\r\n        &gt;\r\n    &lt;\/form&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\views\\template\\main.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">&lt;!-- Collect the nav links, forms, and other content for toggling --&gt;\r\n&lt;div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-1\"&gt;\r\n    &lt;ul class=\"nav navbar-nav\"&gt;\r\n        &lt;?php foreach( $menu as $key =&gt; $value): ?&gt;\r\n        &lt;li&gt;\r\n            &lt;a href=\"&lt;?=base_url()?&gt;&lt;?=$value?&gt;\"&gt;&lt;?=$key?&gt;&lt;\/a&gt;\r\n        &lt;\/li&gt;\r\n        &lt;?php endforeach; ?&gt;\r\n\r\n        &lt;?php if($this-&gt;session-&gt;is_logined ) :?&gt;\r\n        &lt;li&gt;\r\n            &lt;a href=\"user\/\" title=\"&lt;?=$cname?&gt;\"&gt;&lt;?=$account?&gt;&lt;\/a&gt;\r\n        &lt;\/li&gt;\r\n        &lt;li&gt;\r\n            &lt;a href=\"&lt;?=base_url()?&gt;auth\/logout\" title=\"\u767b\u51fa\"&gt;\u767b\u51fa&lt;\/a&gt;\r\n        &lt;\/li&gt;\r\n        &lt;?php endif; ?&gt;\r\n\r\n    &lt;\/ul&gt;\r\n&lt;\/div&gt;\r\n...\r\n\r\n&lt;!-- Post Content --&gt;\r\n&lt;ul&gt;\r\n    &lt;?php if( isset($posts) ) : ?&gt;\r\n    &lt;?php foreach( $posts-&gt;result() as $row ): ?&gt;\r\n    &lt;li class=\"lead\"&gt;\r\n        &lt;a href=\"\/post\/post_desc\/&lt;?=$row-&gt;id?&gt;\"&gt;&lt;?=$row-&gt;post_title?&gt;&lt;\/a&gt;\r\n        &lt;?php if( $is_logined and $level &gt;=100 ): ?&gt;\r\n        &lt;a class=\"btn-danger\" href=\"\/post\/delete\/&lt;?=$row-&gt;id?&gt;\"&gt;\u522a&lt;\/a&gt;\r\n        &lt;?php endif; ?&gt;\r\n    &lt;\/li&gt;\r\n    &lt;?php endforeach; ?&gt;\r\n    &lt;?php endif; ?&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\helpers\\utility_helper.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">function get_default_data(){\r\n    $data[\"title\"] = '\u8a9e\u6587\u7af6\u8cfd\u5831\u540d\u7cfb\u7d71';\r\n\r\n    $data[\"menu\"] = array(\r\n        \"\u8aaa\u660e\"     =&gt; \"welcome\",\r\n        \/\/\"\u5831\u540d\"     =&gt; \"enroll\",\r\n        \"\u6e05\u55ae\"     =&gt; \"post\/show\",\r\n        \"\u767b\u5165\"     =&gt; \"auth\/form\"\r\n        \/\/\"\u500b\u4eba\u8cc7\u8a0a\"  =&gt; \"userinfo\",\r\n        \/\/\"admin\"    =&gt; \"\u7cfb\u7d71\u7ba1\u7406\",\r\n    );\r\n    return $data;\r\n}<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Auth.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Auth extends CI_Controller\r\n{\r\n    public function index()\r\n    {\r\n        $data = get_default_data();\r\n        $this-&gt;load-&gt;library('form_validation');\r\n        $this-&gt;load-&gt;view('auth\/form', $data);\r\n    }\r\n\r\n    public function form()\r\n    {\r\n        $data = get_default_data();\r\n        $this-&gt;load-&gt;library('form_validation');\r\n        $this-&gt;load-&gt;view( \"auth\/form\", $data);\r\n    }\r\n\r\n    public function form_validation()\r\n    {\r\n        $data = get_default_data();\r\n        $this-&gt;load-&gt;helper(\"url\");\r\n        $this-&gt;load-&gt;library(\r\n            array('form_validation')\r\n        );\r\n\r\n        $this-&gt;form_validation-&gt;set_rules('username', '\u5e33\u865f', 'required');\r\n        $this-&gt;form_validation-&gt;set_rules('password', '\u5bc6\u78bc', 'required');\r\n\r\n        if( $this-&gt;form_validation-&gt;run() == false){\r\n            $this-&gt;load-&gt;view(\"auth\/form\", $data);\r\n        }else{\r\n            $username = $this-&gt;input-&gt;post(\"username\");\r\n            $password = $this-&gt;input-&gt;post(\"password\");\r\n        }\r\n    }\r\n\r\n    public function do_openid_login()\r\n    {\r\n        require_once APPPATH . '..\/assets\/openid\/openid.php';\r\n\r\n        $openid = new LightOpenID('localhost');\r\n        if (!$openid-&gt;mode) {\r\n            if ($_SERVER['REQUEST_METHOD'] == 'POST') {\r\n                $openid-&gt;identity = 'http:\/\/openid.ntpc.edu.tw\/';\r\n                $openid-&gt;required = array(\r\n                    'namePerson\/friendly',\r\n                    'contact\/email',\r\n                    'namePerson',\r\n                    'birthDate',\r\n                    'person\/gender',\r\n                    'contact\/postalCode\/home',\r\n                    'contact\/country\/home',\r\n                    'pref\/language',\r\n                    'pref\/timezone'\r\n                );\r\n                header('Location: ' . $openid-&gt;authUrl());\r\n            }else{\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    public function get_openid_data()\r\n    {\r\n        require_once APPPATH . '..\/assets\/openid\/openid.php';\r\n\r\n        $openid = new LightOpenID('localhost');\r\n\r\n        $this-&gt;load-&gt;helper('url');\r\n\r\n        if (!$openid-&gt;mode){\r\n            redirect(base_url() . 'auth\/form');\r\n        }elseif( $openid-&gt;mode == 'cancel') {\r\n            print \"\u4f7f\u7528\u8005\u53d6\u6d88\";\r\n\r\n        }else{\r\n            if ($openid-&gt;validate()) {\r\n                $attr = $openid-&gt;getAttributes();\r\n\r\n                $tmp =explode('\/', $openid-&gt;identity );\r\n                $userinfo[\"account\"] = end( $tmp );\r\n                $userinfo[\"cname\"] = $attr['namePerson'];\r\n                $userinfo[\"birth\"] = $attr['birthDate'];\r\n                $userinfo[\"school_name\"] = $attr['contact\/country\/home'];\r\n                $userinfo[\"email\"] = $attr['contact\/email'];\r\n\r\n                $this-&gt;session-&gt;userinfo = $userinfo;\r\n                $this-&gt;session-&gt;is_logined = true;\r\n                $this-&gt;session-&gt;account = $userinfo['account'];\r\n\r\n                $titles = array();\r\n                $groups = array();\r\n\r\n                foreach (json_decode($attr['pref\/timezone']) as $item) {\r\n                    $titles[] = $item-&gt;title;\r\n                    $groups[] = implode('\u3001', $item-&gt;groups);\r\n                }\r\n\r\n                $this-&gt;session-&gt;titles = $titles;\r\n                $this-&gt;session-&gt;groups = $groups;\r\n\r\n                if( in_array(\"\u8cc7\u8a0a\u7d44\u9577\", $groups)){\r\n                    $this-&gt;session-&gt;level = 999;\r\n                }elseif( in_array(\"\u5c0e\u5e2b\", $groups)){\r\n                    $this-&gt;session-&gt;level = 10;\r\n                }\r\n\r\n                \/*dump( $userinfo );\r\n                dump( $this-&gt;session );*\/\r\n\r\n                redirect ('post\/show');\r\n            }\r\n        }\r\n    }\r\n\r\n    public function logout()\r\n    {\r\n        $this-&gt;session-&gt;sess_destroy();\r\n        redirect( base_url() . \"post\/show\");\r\n    }\r\n}<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Post.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">public function show()\r\n{\r\n    $data = get_default_data();\r\n\r\n    $data['account'] = $this-&gt;session-&gt;account;\r\n    $data['is_logined'] = $this-&gt;session-&gt;is_logined;\r\n    $data['level'] = $this-&gt;session-&gt;level;\r\n    $data['cname'] = $this-&gt;session-&gt;userinfo['cname'];\r\n\r\n    $query = null;\r\n    if( ! empty($this-&gt;uri-&gt;segment(3)) ){\r\n        $query = $this-&gt;p-&gt;post($this-&gt;uri-&gt;segment(3));\r\n    }else{\r\n        $query = $this-&gt;p-&gt;posts();\r\n    }\r\n    $data[\"posts\"] = $query;\r\n    $this-&gt;load-&gt;view('template\/main', $data);\r\n}\r\n...\r\n\r\npublic function delete()\r\n{\r\n    $this-&gt;load-&gt;helper('url');\r\n\r\n    if( empty( $this-&gt;uri-&gt;segment(3)) ){\r\n        redirect(base_url() . 'post\/show');\r\n    }else{\r\n        $this-&gt;p-&gt;delete( $this-&gt;uri-&gt;segment(3) );\r\n        redirect(base_url() . 'post\/show');\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<h3><span style=\"color: #0000ff;\">application\\config\\autoload.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">$autoload['libraries'] = array(\r\n    'database', 'session'\r\n);\r\n...\r\n\r\n$autoload['helper'] = array(\r\n    'url', 'form', 'utility'\r\n);<\/code><\/pre>\n<div class=\"post-bodycopy clearfix\">\n<h3><span style=\"color: #0000ff;\">application\\config\\config.php<\/span><\/h3>\n<ul>\n<li><span style=\"color: #0000ff;\">\u5728\u7db2\u7ad9\u6839\u76ee\u9304\u8981\u5efa\u4e00\u500b <\/span><span style=\"color: #ff0000;\"><strong>sessions<\/strong><\/span><span style=\"color: #0000ff;\"> \u8cc7\u6599\u593e<\/span><\/li>\n<\/ul>\n<pre class=\"language-php\"><code class=\"language-php\">$config['sess_save_path'] = APPPATH . '..\/sessions';<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\config\\routes.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">$route['default_controller'] = 'auth';\r\n...\r\n\r\n$route['ntpc_openid_login']['post'] = 'auth\/do_openid_login';\r\n$route['ntpc_openid_login']['get'] = 'auth\/get_openid_data';<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">assets\\openid\\index.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">try {\r\n    $openid = new LightOpenID('localhost');\r\n    if (!$openid-&gt;mode) {\r\n        if ($_SERVER['REQUEST_METHOD'] == 'POST') {\r\n            $openid-&gt;identity = 'http:\/\/openid.ntpc.edu.tw\/';\r\n            $openid-&gt;required = array(\r\n                'namePerson\/friendly',\r\n                'contact\/email',\r\n                'namePerson',\r\n                'birthDate',\r\n                'person\/gender',\r\n                'contact\/postalCode\/home',\r\n                'contact\/country\/home',\r\n                'pref\/language',\r\n                'pref\/timezone'\r\n            );\r\n            header('Location: ' . $openid-&gt;authUrl());\r\n        }\r\n...\r\n\r\n    } else {\r\n        if ($openid-&gt;validate()) {\r\n            $attr = $openid-&gt;getAttributes();\r\n\r\n            $tmp =explode('\/', $openid-&gt;identity);\r\n            $myid = end( $tmp );\r\n\r\n            echo '&lt;table border=\"1\" cellspacing=\"0\" cellpadding=\"10\"&gt;';\r\n            echo '&lt;tr&gt;&lt;td&gt;\u5e33\u865f&lt;\/td&gt;&lt;td&gt;' . $myid . '&lt;\/td&gt;&lt;\/tr&gt;';\r\n...\r\n\r\n        }\r\n    }\r\n} catch (ErrorException $e) {\r\n    echo $e-&gt;getMessage();\r\n}<\/code><\/pre>\n<h3>\u3010<a href=\"#resource\">\u5b78\u7fd2\u8cc7\u6e90<\/a>\u3011\u3010<a href=\"#0913\">\u4e5d\u670813\u65e5<\/a>\u3011<span style=\"color: #ff0000;\">\u3010<a style=\"color: #ff0000;\" href=\"#0920\">\u4e5d\u670820\u65e5<\/a>\u3011<\/span>\u3010<a href=\"#0927\">\u4e5d\u670827\u65e5<\/a>\u3011<\/h3>\n<h3>\u8b1b\u7fa9\uff1a<a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/09\/1060920_PHP_Framework_Codeigniter\u4e8c.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">1060920_PHP_Framework_Codeigniter(\u4e8c)<\/a><\/h3>\n<ul>\n<li><a href=\"http:\/\/bit.ly\/ntpcdev-20190920\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/bit.ly\/ntpcdev-20190920<\/a><\/li>\n<\/ul>\n<h3>\u6559\u5b78\u5f71\u7247\uff1a<\/h3>\n<p>20170920-CodeIgniter3 MVC\u958b\u767c<\/p>\n<p>&nbsp;<\/p>\n<h3>PHP Composer<\/h3>\n<ul>\n<li>Laradebut #11 Composer \u65b0\u624b\u5165\u9580\u6559\u5b78 \u4e00\u5b78\u5c31\u4e0a\u624b by \u9583\u4eae\u4eae\n<ul>\n<li>\u3010\u5f71\u7247\u3011<a href=\"https:\/\/www.youtube.com\/watch?v=qxaL_bjGKEw\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.youtube.com\/watch?v=qxaL_bjGKEw<\/a><\/li>\n<li>\u3010Repo\u3011<a href=\"https:\/\/github.com\/dj1020\/ComposerTutorial\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/dj1020\/ComposerTutorial<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"http:\/\/blog.turn.tw\/?p=1039\" target=\"_blank\" rel=\"noopener noreferrer\">COMPOSER\u8a2d\u8a08\u539f\u7406\u8207\u57fa\u672c\u7528\u6cd5<\/a><\/li>\n<li><a href=\"http:\/\/blog.turn.tw\/?p=1122\" target=\"_blank\" rel=\"noopener noreferrer\">COMPOSER\u9032\u968e\u539f\u7406\uff1aPHP\u547d\u540d\u7a7a\u9593\u8207PSR-0<\/a><\/li>\n<li><a href=\"http:\/\/t301000.blogspot.tw\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u4e0d\u5c08\u696d\u7db2\u7ba1\u7b46\u8a18 | \u6797\u58eb\u7acb\u8001\u5e2b<\/a><\/li>\n<li><a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer\u00a0\u5b98\u65b9\u7db2\u7ad9 (\u82f1\u6587\u7248)<\/a>\n<ul>\n<li><a href=\"https:\/\/getcomposer.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">Download Composer<\/a><\/li>\n<\/ul>\n<\/li>\n<li>Composer | \u6b63\u9ad4\u4e2d\u6587\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/packagist.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Packagist \u2013 The PHP Package Repository<\/a>\n<ul>\n<li><a href=\"https:\/\/packagist.org\/packages\/dg\/rss-php\" target=\"_blank\" rel=\"noopener noreferrer\">dg\/rss-php<\/a>:\u00a0RSS &amp; Atom Feeds for PHP is a very small and easy-to-use library for consuming an RSS and Atom feed<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u7bc4\u4f8b\uff1a\u860b\u679c\u65e5\u5831 RSS\u00a0\u5256\u6790<\/h4>\n<ul>\n<li>composer self-update<\/li>\n<li>cd\u00a0CodeIgniter-3.1.5<\/li>\n<li>composer require dg\/rss-php<\/li>\n<\/ul>\n<h4>CodeIgniter\u00a03 \u6587\u4ef6\uff1a\u8f14\u52a9\u51fd\u5f0f<\/h4>\n<h3>\u6559\u5b78\u5167\u5bb9\uff1a<\/h3>\n<h3><span style=\"color: #0000ff;\">application\\config\\autoload.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">\/*\r\n| -------------------------------------------------------------------\r\n|  Auto-load Helper Files\r\n| -------------------------------------------------------------------\r\n| Prototype:\r\n|\r\n|  $autoload['helper'] = array('url', 'file');\r\n*\/\r\n$autoload['helper'] = array(\r\n    'utility_helper'\r\n);<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\config\\config.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">$config['base_url'] = 'http:\/\/localhost';\r\n...\r\n\r\n<\/code><code class=\"language-php\">\/\/$config['language']   = 'english';\r\n$config['language']    = 'zh-tw';\r\n<\/code><code class=\"language-php\">...\r\n\r\n<\/code><code class=\"language-php\">\/\/$config['composer_autoload'] = FALSE;\r\n$config['composer_autoload'] = APPPATH . '..\/vendor\/autoload.php';<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\helpers\\utility_helper.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">function dump($obj){\r\n    print \"&lt;pre&gt;\";\r\n    var_dump($obj);\r\n    print \"&lt;\/pre&gt;\";\r\n}\r\n\r\nfunction echobr($str){\r\n    print $str . '&lt;br \/&gt;';\r\n}\r\n\r\nfunction get_default_data(){\r\n    $data[\"title\"] = '\u8a9e\u6587\u7af6\u8cfd\u5831\u540d\u7cfb\u7d71';\r\n    $data[\"menu\"] = array(\r\n        \"about\"     =&gt; \"\u8aaa\u660e\",\r\n        \"enroll\"     =&gt; \"\u5831\u540d\",\r\n        \"list\"     =&gt; \"\u6e05\u55ae\",\r\n        \"userinfo\"     =&gt; \"\u500b\u4eba\u8cc7\u8a0a\",\r\n        \"admin\"     =&gt; \"\u7cfb\u7d71\u7ba1\u7406\",\r\n    );\r\n\r\n    return $data;\r\n}<\/code><\/pre>\n<div class=\"post-bodycopy clearfix\">\n<h3><span style=\"color: #0000ff;\">application\\models\\Post_model.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Post_model extends CI_Model\r\n{\r\n    public function __construct()\r\n    {\r\n        parent::__construct();\r\n        $this-&gt;load-&gt;database();\r\n    }\r\n\r\n    public function posts()\r\n    {\r\n        $this-&gt;db-&gt;select(\"*\");\r\n        \/\/$this-&gt;db-&gt;where('id', 5);\r\n        \/\/$this-&gt;db-&gt;order_by('created_time', \"DESC\");\r\n        $this-&gt;db-&gt;order_by('id', \"DESC\");\r\n        $query = $this-&gt;db-&gt;get('post');\r\n\r\n        return $query;\r\n    }\r\n\r\n    public function post($post_id = null)\r\n    {\r\n        if( $post_id == null ) return null;\r\n\r\n        $this-&gt;db-&gt;select(\"*\");\r\n        $this-&gt;db-&gt;where('id', $post_id);\r\n        $query = $this-&gt;db-&gt;get('post');\r\n        return $query;\r\n    }\r\n\r\n    public function add($title=null, $content=null)\r\n    {\r\n        $data = array(\r\n            'post_title' =&gt; $title,\r\n            'post_content' =&gt; $content\r\n        );\r\n\r\n        $this-&gt;db-&gt;insert( 'post', $data );\r\n        \r\n    }\r\n\r\n    public function delete($post_id = null)\r\n    {\r\n        if( $post_id == null ) return null;\r\n\r\n        $data = array(\r\n            'id' =&gt; $post_id\r\n        );\r\n        $this-&gt;db-&gt;delete('post', $data);\r\n    }\r\n\r\n    public function update()\r\n    {\r\n       \r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Test.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Test extends CI_Controller\r\n{\r\n    public function __construct()\r\n    {\r\n        parent::__construct();\r\n        $this-&gt;load-&gt;helper('utility_helper');\r\n    }\r\n\r\n    public function rss()\r\n    {\r\n        $this-&gt;load-&gt;helper('utility_helper');\r\n        $this-&gt;load-&gt;model('post_model');\r\n\r\n        date_default_timezone_set(\"asia\/taipei\");\r\n\r\n        $rss_url = 'http:\/\/www.appledaily.com.tw\/rss\/newcreate\/kind\/rnews\/type\/new';\r\n        $rss = Feed::loadRss($rss_url);\r\n\r\n        echo 'Title: ', $rss-&gt;title . '&lt;br \/&gt;';\r\n        echo 'Description: ', $rss-&gt;description  . '&lt;br \/&gt;';\r\n        echo 'Link: ', $rss-&gt;link . '&lt;br \/&gt;';\r\n\r\n        $num = 0;\r\n        foreach ($rss-&gt;item as $item) {\r\n            \/\/dump( $item );\r\n            \/*echo 'Title: ', $item-&gt;title . '&lt;br \/&gt;';\r\n            echo 'Link: ', $item-&gt;link . '&lt;br \/&gt;';\r\n            echo 'Timestamp: ', $item-&gt;timestamp . '&lt;br \/&gt;';\r\n            echo 'Description ', $item-&gt;description . '&lt;br \/&gt;';\r\n            echo 'HTML encoded content: ', $item-&gt;{'content:encoded'} . '&lt;br \/&gt;';*\/\r\n            $this-&gt;post_model-&gt;add($item-&gt;title, $item-&gt;description );\r\n            $num++;\r\n        }\r\n\r\n        echobr('post add ' . $num . ' records.');\r\n\r\n        \/*$data = array(\r\n            'name' =&gt; 'bob',\r\n            'age' =&gt; 40,\r\n            'school_name' =&gt; 'Shulin Primary School'\r\n        );\r\n\r\n        dump($data);*\/\r\n    }\r\n\r\n    public function test_model()\r\n    {\r\n        $this-&gt;load-&gt;model('post_model');\r\n\r\n        \/\/dump( $this-&gt;post_model-&gt;posts()  );\r\n\r\n        $this-&gt;post_model-&gt;add('aaaaaaa', 'bbbbbbbbbbbbbbbbbbbb');\r\n        print \"insert ok\";\r\n    }\r\n}<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Auth.php<\/span><\/h3>\n<\/div>\n<pre class=\"language-php\"><code class=\"language-php\">class Auth extends CI_Controller\r\n{\r\n    public function index()\r\n    {\r\n        $data = get_default_data();\r\n        $this-&gt;load-&gt;view('template\/main', $data);\r\n    }\r\n\r\n    public function form()\r\n    {\r\n        $data = get_default_data();\r\n        $this-&gt;load-&gt;library('form_validation');\r\n        $this-&gt;load-&gt;view( \"auth\/form\", $data);\r\n    }\r\n\r\n    public function form_validation()\r\n    {\r\n        $data = get_default_data();\r\n        $this-&gt;load-&gt;helper(\"url\");\r\n        $this-&gt;load-&gt;library(\r\n            array('form_validation')\r\n        );\r\n\r\n        $this-&gt;form_validation-&gt;set_rules('username', '\u5e33\u865f', 'required');\r\n        $this-&gt;form_validation-&gt;set_rules('password', '\u5bc6\u78bc', 'required');\r\n\r\n        if( $this-&gt;form_validation-&gt;run() == false){\r\n            $this-&gt;load-&gt;view(\"auth\/form\", $data);\r\n        }else{\r\n            $username = $this-&gt;input-&gt;post(\"username\");\r\n            $password = $this-&gt;input-&gt;post(\"password\");\r\n        }\r\n    }\r\n}<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Post.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Post extends CI_Controller\r\n{\r\n    public function __construct()\r\n    {\r\n        parent::__construct();\r\n        $this-&gt;load-&gt;model('post_model', 'p');\r\n    }\r\n...\r\n...\r\n    public function delete()\r\n    {\r\n        $this-&gt;load-&gt;helper('url');\r\n\r\n        if( empty( $this-&gt;uri-&gt;segment(3)) ){\r\n            \/\/redirect('post\/show');\r\n            \/\/echobr( base_url() );\r\n            redirect(base_url() . 'post\/show');\r\n            \/\/$this-&gt;show();\r\n        }else{\r\n            $this-&gt;p-&gt;delete( $this-&gt;uri-&gt;segment(3) );\r\n            redirect(base_url() . 'post\/show');\r\n            \/\/$this-&gt;show();\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<h3>\u8907\u88fd\u00a0<span style=\"color: #ff0000;\">system\\language\\english<\/span>\u00a0-&gt;\u00a0<span style=\"color: #ff0000;\">application\\language\\zh-tw<\/span><\/h3>\n<h3><span style=\"color: #0000ff;\">application\\language\\zh-tw\\form_validation_lang.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">$lang['form_validation_required']      = '\u3010{field}\u3011 \u9019\u500b\u6b04\u4f4d\u5fc5\u9808\u8f38\u5165\u8cc7\u6599';<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\views\\auth\\form.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">&lt;!-- Post Content --&gt;\r\n&lt;ul&gt;\r\n    &lt;form action=\"\/auth\/form_validation\" method=\"post\"&gt;\r\n        \u5e33\u865f: &lt;input type=\"text\" name=\"username\" id=\"username\"&gt;\r\n        &lt;span class=\"text-danger\"&gt;&lt;?=form_error(\"username\")?&gt;&lt;\/span&gt;\r\n        \u5bc6\u78bc: &lt;input type=\"password\" name=\"password\" id=\"password\"&gt;\r\n        &lt;span class=\"text-danger\"&gt;&lt;?=form_error(\"password\")?&gt;&lt;\/span&gt;\r\n        &lt;input type=\"submit\" value=\"\u767b\u5165\"&gt;\r\n    &lt;\/form&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<hr \/>\n<p><a name=\"0913\"><\/a><\/p>\n<h3>\u3010<a href=\"#resource\">\u5b78\u7fd2\u8cc7\u6e90<\/a>\u3011<span style=\"color: #ff0000;\">\u3010<a style=\"color: #ff0000;\" href=\"#0913\">\u4e5d\u670813\u65e5<\/a>\u3011<\/span>\u3010<a href=\"#0920\">\u4e5d\u670820\u65e5<\/a>\u3011\u3010<a href=\"#0927\">\u4e5d\u670827\u65e5<\/a>\u3011<\/h3>\n<h3>\u8ab2\u7a0b\u8b1b\u7fa9\uff1a<a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-content\/uploads\/2017\/09\/1060913_PHP_Framework_Codeigniter.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">1060913_PHP_Framework_Codeigniter<\/a><\/h3>\n<ul>\n<li><a href=\"http:\/\/bit.ly\/ntpcdev-20170913\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/bit.ly\/ntpcdev-20170913<\/a><\/li>\n<\/ul>\n<h3>\u6559\u5b78\u5f71\u7247\uff1a<\/h3>\n<h4>\u4fdd\u592a\u6559\u5b78\u9304\u5f71\uff1a<\/h4>\n<div class=\"epyt-video-wrapper\"><iframe loading=\"lazy\"  style=\"display: block; margin: 0px auto;\"  id=\"_ytid_65636\"  width=\"640\" height=\"360\"  data-origwidth=\"640\" data-origheight=\"360\"  data-relstop=\"1\" src=\"https:\/\/www.youtube.com\/embed\/PeoR5I4b-oU?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=0&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  epyt-is-override  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div>\n<h4>PHP Codeigniter Step By Step Tutorials for Beginners 2017<\/h4>\n<div class=\"epyt-video-wrapper\"><iframe  style=\"display: block; margin: 0px auto;\"  id=\"_ytid_81732\"  width=\"640\" height=\"360\"  data-origwidth=\"640\" data-origheight=\"360\"  data-relstop=\"1\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&listType=playlist&list=PLKQy3LP-S-_Oa1bqIC3Td3vhBd4x3_OAt&autoplay=0&cc_load_policy=0&cc_lang_pref=&iv_load_policy=1&loop=0&rel=0&fs=1&playsinline=0&autohide=2&theme=dark&color=red&controls=1&disablekb=0&\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div>\n<h3>\u6559\u5b78\u5167\u5bb9\uff1a<\/h3>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Welcome.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Welcome extends CI_Controller\r\n{\r\n    public function index()\r\n    {       \r\n        $this-&gt;load-&gt;view('welcome_message');\r\n    }   \r\n    \r\n    public function hello(){\r\n        print \"&lt;h1&gt;\";\r\n        print \"\u5927\u5bb6\u597d\uff0c\u6b61\u8fce\u4f86\u5230 CodeIgniter 3!\";\r\n        print \"&lt;\/h1&gt;\";\r\n    }\r\n    \r\n    public function bye(){\r\n        $data[\"title\"] = '\u8a9e\u6587\u7af6\u8cfd\u5831\u540d\u7cfb\u7d71';\r\n        $data[\"menu\"] = array(\r\n            \"about\" =&gt; \"\u8aaa\u660e\",\r\n            \"enroll\" =&gt; \"\u5831\u540d\",\r\n            \"list\" =&gt; \"\u6e05\u55ae\",\r\n            \"userinfo\" =&gt; \"\u500b\u4eba\u8cc7\u8a0a\",\r\n            \"admin\" =&gt; \"\u7cfb\u7d71\u7ba1\u7406\",\r\n        );\r\n        $this-&gt;load-&gt;view('template\/main', $data);\r\n    } \r\n}<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Auth.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Auth extends CI_Controller\r\n{\r\n    public function index(){\r\n        $data[\"title\"] = '\u8a9e\u6587\u7af6\u8cfd\u5831\u540d\u7cfb\u7d71';\r\n        $data[\"menu\"] = array(\r\n            \"about\" =&gt; \"\u8aaa\u660e\",\r\n            \"enroll\" =&gt; \"\u5831\u540d\",\r\n            \"list\" =&gt; \"\u6e05\u55ae\",\r\n            \"userinfo\" =&gt; \"\u500b\u4eba\u8cc7\u8a0a\",\r\n            \"admin\" =&gt; \"\u7cfb\u7d71\u7ba1\u7406\",\r\n        );\r\n\r\n        $this-&gt;load-&gt;database();\r\n\r\n        \/\/$query = $this-&gt;db-&gt;query(\"select * from post\");\r\n        $this-&gt;db-&gt;select('id, post_title, post_content, created_time, updated_time');\r\n        $this-&gt;db-&gt;from('post');\r\n        if( ! empty($this-&gt;uri-&gt;segment(3)) ){\r\n            $this-&gt;db-&gt;where('id', $this-&gt;uri-&gt;segment(3));\r\n        }\r\n\r\n        $query = $this-&gt;db-&gt;get();\r\n        $data[\"posts\"] = $query;\r\n\r\n        $this-&gt;load-&gt;view('template\/main', $data);\r\n    }\r\n}<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\controllers\\Post.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">class Post extends CI_Controller\r\n{\r\n    public function show(){\r\n\r\n        $this-&gt;load-&gt;database();\r\n\r\n        $data[\"title\"] = '\u8a9e\u6587\u7af6\u8cfd\u5831\u540d\u7cfb\u7d71';\r\n        $data[\"menu\"] = array(\r\n            \"about\" =&gt; \"\u8aaa\u660e\",\r\n            \"enroll\" =&gt; \"\u5831\u540d\",\r\n            \"list\" =&gt; \"\u6e05\u55ae\",\r\n            \"userinfo\" =&gt; \"\u500b\u4eba\u8cc7\u8a0a\",\r\n            \"admin\" =&gt; \"\u7cfb\u7d71\u7ba1\u7406\",\r\n        );\r\n\r\n        $this-&gt;db-&gt;select('id, post_title, post_content, created_time, updated_time');\r\n        $this-&gt;db-&gt;from('post');\r\n        if( ! empty($this-&gt;uri-&gt;segment(3)) ){\r\n            $this-&gt;db-&gt;where('id', $this-&gt;uri-&gt;segment(3));\r\n        }\r\n\r\n        $query = $this-&gt;db-&gt;get();\r\n        $data[\"posts\"] = $query;\r\n\r\n        $this-&gt;load-&gt;view('template\/header', $data);\r\n        $this-&gt;load-&gt;view('template\/menu', $data);\r\n        $this-&gt;load-&gt;view('template\/title_block', $data);\r\n        $this-&gt;load-&gt;view('template\/content', $data);\r\n        $this-&gt;load-&gt;view('template\/footer', $data);\r\n    }\r\n\r\n    public function post_desc(){\r\n\r\n        $this-&gt;load-&gt;database();\r\n\r\n        if( empty($this-&gt;uri-&gt;segment(3)) ) redirect(\"\/post\/show\");\r\n\r\n        $data[\"title\"] = '\u8a9e\u6587\u7af6\u8cfd\u5831\u540d\u7cfb\u7d71';\r\n        $data[\"menu\"] = array(\r\n            \"about\"     =&gt; \"\u8aaa\u660e\",\r\n            \"enroll\"     =&gt; \"\u5831\u540d\",\r\n            \"list\"     =&gt; \"\u6e05\u55ae\",\r\n            \"userinfo\"     =&gt; \"\u500b\u4eba\u8cc7\u8a0a\",\r\n            \"admin\"     =&gt; \"\u7cfb\u7d71\u7ba1\u7406\",\r\n        );\r\n\r\n        $this-&gt;db-&gt;select('id, post_title, post_content, created_time, updated_time');\r\n        $this-&gt;db-&gt;from('post');\r\n        if( ! empty( $this-&gt;uri-&gt;segment(3)) ){\r\n            $this-&gt;db-&gt;where('id', $this-&gt;uri-&gt;segment(3));\r\n        }\r\n\r\n        $query = $this-&gt;db-&gt;get();\r\n        $data[\"posts\"] = $query;\r\n\r\n        $this-&gt;load-&gt;view('template\/post_desc', $data);\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">.htaccess<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-bash\">RewriteEngine On\r\nRewriteCond %{REQUEST_FILENAME} !-f\r\nRewriteCond %{REQUEST_FILENAME} !-d\r\nRewriteRule ^(.*)$ index.php?\/$1 [L]<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\config\\database.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">$db['default'] = array(\r\n   'dsn'  =&gt; '',\r\n   'hostname' =&gt; 'localhost',\r\n   'username' =&gt; 'blogadm',\r\n   'password' =&gt; '!2345678',\r\n   'database' =&gt; 'blog',\r\n   'dbdriver' =&gt; 'mysqli',\r\n   'dbprefix' =&gt; '',\r\n   'pconnect' =&gt; FALSE,\r\n   'db_debug' =&gt; (ENVIRONMENT !== 'production'),\r\n   'cache_on' =&gt; FALSE,\r\n   'cachedir' =&gt; '',\r\n   'char_set' =&gt; 'utf8',\r\n   'dbcollat' =&gt; 'utf8_general_ci',\r\n   'swap_pre' =&gt; '',\r\n   'encrypt' =&gt; FALSE,\r\n   'compress' =&gt; FALSE,\r\n   'stricton' =&gt; FALSE,\r\n   'failover' =&gt; array(),\r\n   'save_queries' =&gt; TRUE\r\n);<\/code><\/pre>\n<h3><span style=\"color: #0000ff;\">application\\views\\template\\main.php<\/span><\/h3>\n<pre class=\"language-php\"><code class=\"language-php\">&lt;head&gt;\r\n...\r\n&lt;!-- Bootstrap Core CSS --&gt;\r\n&lt;link href=\"\/assets\/css\/bootstrap.min.css\" rel=\"stylesheet\"&gt;\r\n\r\n&lt;!-- Custom CSS --&gt;\r\n&lt;link href=\"\/assets\/css\/blog-post.css\" rel=\"stylesheet\"&gt;\r\n...\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n...\r\n<\/code><code class=\"language-php\">&lt;div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-1\"&gt;\r\n    &lt;ul class=\"nav navbar-nav\"&gt;\r\n        &lt;?php foreach( $menu as $key =&gt; $value): ?&gt;\r\n        &lt;li&gt;\r\n            &lt;a href=\"#\"&gt;&lt;?=$value?&gt;&lt;\/a&gt;\r\n        &lt;\/li&gt;\r\n        &lt;?php endforeach; ?&gt;\r\n    &lt;\/ul&gt;\r\n&lt;\/div&gt;\r\n...\r\n<\/code><code class=\"language-php\">&lt;!-- Title --&gt;\r\n&lt;h1&gt;&lt;?=$title?&gt;&lt;\/h1&gt;\r\n...\r\n\r\n&lt;!-- Post Content --&gt;\r\n&lt;ul&gt;\r\n    &lt;?php foreach( $posts-&gt;result() as $row ): ?&gt;\r\n    &lt;li class=\"lead\"&gt;\r\n        &lt;a href=\"\/post\/post_desc\/&lt;?=$row-&gt;id?&gt;\"&gt;&lt;?=$row-&gt;post_title?&gt;&lt;\/a&gt;\r\n        &lt;a href=\"\/post\/delete\/&lt;?=$row-&gt;id?&gt;\"&gt;\u522a&lt;\/a&gt;\r\n    &lt;\/li&gt;\r\n    &lt;?php endforeach; ?&gt;\r\n&lt;\/ul&gt;\r\n<\/code><code class=\"language-php\">\r\n...\r\n<\/code><code class=\"language-php\">&lt;!-- jQuery --&gt;\r\n&lt;script src=\"\/assets\/js\/jquery.js\"&gt;&lt;\/script&gt;\r\n\r\n&lt;!-- Bootstrap Core JavaScript --&gt;\r\n&lt;script src=\"\/assets\/js\/bootstrap.min.js\"&gt;&lt;\/script&gt;\r\n<\/code><code class=\"language-php\">&lt;\/body&gt;<\/code><\/pre>\n<p><a name=\"resource\"><\/a><\/p>\n<h3><span style=\"color: #ff0000;\">\u3010<a style=\"color: #ff0000;\" href=\"#resource\">\u5b78\u7fd2\u8cc7\u6e90<\/a>\u3011<\/span>\u3010<a href=\"#0913\">\u4e5d\u670813\u65e5<\/a>\u3011\u3010<a href=\"#0920\">\u4e5d\u670820\u65e5<\/a>\u3011\u3010<a href=\"#0927\">\u4e5d\u670827\u65e5<\/a>\u3011<\/h3>\n<h3>\u5b78\u7fd2\u8cc7\u6e90\uff1a<\/h3>\n<ul>\n<li><a href=\"https:\/\/ithelp.ithome.com.tw\/users\/20103681\/ironman\/1170\" target=\"_blank\" rel=\"noopener noreferrer\">2017 iT \u90a6\u5e6b\u5fd9\u9435\u4eba\u8cfd &#8211;\u00a0\u81ea\u5b78CodeIgniter\u8dcc\u8dcc\u649e\u649e30\u5929 \u7cfb\u5217<\/a><\/li>\n<li><a href=\"https:\/\/www.ccc.tc\/article\/php-standards-recommendations\" target=\"_blank\" rel=\"noopener noreferrer\">\u6dfa\u8ac7PSRs\uff1aPHP\u6a19\u6e96\u5efa\u8b70 (PHP Standards Recommendations)<\/a><\/li>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/archives\/7535\" target=\"_blank\" rel=\"noopener noreferrer\">\u6559\u7814\u4e2d\u5fc3\u7814\u7fd2\uff1aPHP \u7db2\u9801\u7a0b\u5f0f\u8a2d\u8a08(1060807-0808)<\/a><\/li>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/archives\/7269\" target=\"_blank\" rel=\"noopener noreferrer\">\u65b0\u5317\u5e02\u6559\u80b2\u5c40\u7a0b\u5f0f\u61c9\u7528\u7814\u767c\u793e\u7fa4\u5de5\u4f5c\u574a-Angular 2 \u9032\u968e(1060712~0714)<\/a><\/li>\n<li><a href=\"http:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/archives\/6512\" target=\"_blank\" rel=\"noopener noreferrer\">\u65b0\u5317\u5e02\u6559\u80b2\u5c40\u7a0b\u5f0f\u61c9\u7528\u7814\u767c\u793e\u7fa4\u5de5\u4f5c\u574a-Angular 2(1060503~0621)<\/a><\/li>\n<li><a href=\"https:\/\/www.apachefriends.org\/zh_tw\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">XAMPP Installers and Downloads for Apache Friends<\/a><\/li>\n<li><a href=\"https:\/\/www.wikiwand.com\/zh-tw\/LAMP\" target=\"_blank\" rel=\"noopener noreferrer\">LAMP &#8211; \u7dad\u57fa\u767e\u79d1\uff0c\u81ea\u7531\u7684\u767e\u79d1\u5168\u66f8 &#8211; Wikipedia<\/a>\n<ul>\n<li>LAMP(Linux\u3001Apache\u3001Mysql\u3001PHP)+phpMyAdmin \u5b89\u88dd\u8a2d\u5b9a\u2013 \u884c\u96f2\u8005<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p> \u65e5\u671f\uff1a106\u5e749\u670813\u65e5 &#8211; 9\u670827\u65e5 \u6642\u9593\uff1a\u9031\u4e09\u4e0b\u5348 \u5730\u9ede\uff1a\u65b0\u5317\u5e02\u6559\u7814\u4e2d\u5fc3 \u516c\u6587\u8207\u8a08\u756b\uff1a \u516c\u6587\uff1a106E0001588 \u65b0\u5317\u5e02106\u5e74\u5ea6\u81ea\u7531\u8edf\u9ad4\u63a8\u5ee3\u66a8\u7a0b\u5f0f\u61c9\u7528\u7814\u767c\u4e2d\u5fc3\u5de5\u4f5c\u8a08\u756b \u8ab2\u7a0b\u4e3b\u984c\uff1aPHP \u6846\u67b6 CodeIgniter 3 CodeIgniter \u7e41\u9ad4\u4e2d\u6587\u5b98\u65b9\u7db2\u7ad9 CodeIgniter \u4f7f\u7528\u624b\u518a\u2014 CodeIgniter 3.1.5 documentation \u8b1b\u5e2b\uff1a\u6a39\u6797\u570b\u5c0f\u9ec3\u4fdd\u592a\u8001\u5e2b \u958b\u767c\u74b0\u5883\u8207\u5de5\u5177\uff1a Wagon \u7684\u4e0b\u8f09\u53ca\u8a2d\u5b9a wagon-1.3.1.7z \u514d\u5b89\u88dd\u53ef\u651c\u7684 LARAVEL \u958b\u767c\u74b0\u5883 wagon on github \u6ce8\u610f\u4e8b\u9805\uff1a\u89e3\u58d3\u7e2e\u5f8c\uff0c\u9808\u8a2d\u5b9a\u8a72\u8cc7\u6599\u593e\u7684\u5b89\u5168\u6027\uff0c\u4f7f Users \u7fa4\u7d44\u8a2d\u70ba\u53ef\u300c\u4fee\u6539\u300d\uff0c\u5982\u6b64\u5728\u555f\u52d5\u53ca\u95dc\u9589 uwAmp \u6642\uff0c\u624d\u4e0d\u6703\u51fa\u554f\u984c\u3002 PhpStorm GitKraken: Git GUI for Windows, Mac &amp; Linux \u3010\u5b78\u7fd2\u8cc7\u6e90\u3011\u3010\u4e5d\u670813\u65e5\u3011\u3010\u4e5d\u670820\u65e5\u3011\u3010\u4e5d\u670827\u65e5\u3011 \u8ab2\u5f8c\u88dc\u5145\u6559\u6750\uff1a CodeIgniter3 Linux\u958b\u767c\u74b0\u58830001 ~ 0003 CodeIgniter3 \u4e0a\u50b3XML\u3001\u89e3\u6790\u3001\u5beb\u5165\u8cc7\u6599\u5eab01 ~ 05 [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[34],"tags":[],"_links":{"self":[{"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/posts\/7933"}],"collection":[{"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/comments?post=7933"}],"version-history":[{"count":2,"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/posts\/7933\/revisions"}],"predecessor-version":[{"id":47650,"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/posts\/7933\/revisions\/47650"}],"wp:attachment":[{"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/media?parent=7933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/categories?post=7933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webnas.bhes.ntpc.edu.tw\/wordpress\/wp-json\/wp\/v2\/tags?post=7933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}