[教學] CodeIgniter4 快速上手 (ㄧ) 下載與安裝

CodeIgniter 是一個PHP 基底的框架,由於PHP7的執行效率比PHP5好,所以CodeIgniter4 幾乎重寫了整個架構,採用PHP7作為基底,並於2020年5月1號正式發布,沒錯!就是今年的勞動節,趁著它發表還沒多久,我們就來試試看看有哪些坑要採吧!

 
開始開發前請確定你的電腦裡有足夠可以運行PHP7.2以上的環境,並且搭配Mysql或MariaDB資料庫,如果這個部分不會的朋友,建議google一下xamppmampampps等等的其中一套LAMP套裝軟體,以快速建置你的本機PHP執行環境。
 
無廢話開始教學!第一步就是安裝CodeIgniter4,你可以透過 Composer下載,也可以用 git 從 github上clone下來,本篇要教的是連程式小白都會的從官網直接下載法!跟著以下步驟保證你零基礎也沒問題啊!
 
  1. 前往CodeIgniter 官網下載 CodeIgniter4
    CodeIgniter 4 官方網站

    CodeIgniter4 官方網站

  2. 下載回來直接直接解壓縮,會出現一個framework-4.X.X,把該資料內的檔案全數複製貼到你的開發環境中。
  3. 接著因為這個東西是外國人發明的,所以我們要添加語系包,讓錯誤訊息可以中文化,因此我們一定要到官方的github下載多國語言語系包,下載回來之後將「/Language」內的zh-tw資料夾,貼到我們開發環境中的「app/Language」內即可。
    github上CodeIgniter的多國語言

    github上CodeIgniter的多國語言

  4. 確定你的開發環境是有正常啟動的,然後開啟你開發環境中的“/app/Config/App.php” ,確定第26行的public $baseURL 的設定符合你的本機環境。有些人要改成http://localhost 或是 http://localhost:8080,有些人可能是自訂名稱,所以這裡每個人都可都有點差異。
    localhost設定

    localhost設定

  5. 設定完baseurl 變數之後,我們要往下尋找大概第72行左右的「$defaultLocale」,將其從en設定成「zh-tw」,也就是我們步驟3所複製的那個Language資料夾,如此一來我們就把錯誤訊息都設定成繁體中文了!
  6. 時區的部分也不要忘記了,讓我們繼續往下尋找大概第111行左右的「$appTimezone」,把America/Chicago改成「Asia/Taipei」,到這邊這個App.php設定檔就差不多完成了。
  7. 我們回到開發環境的根目錄,將public資料夾裡面的「.htaccess」跟 index.php 複製一份到根目錄,接著打開你剛剛建立在根目錄的index.php,將20行的「../」移除,如下圖:
    delete "../"

    delete "../"

     

    如果你找不到上面20行的「$pathsPath = FCPATH . '../app/Config/Paths.php';」,請試著改找28行的「require realpath(FCPATH . '../app/Config/Paths.php') ?: FCPATH . '../app/Config/Paths.php';」,一樣移除裡面的「../」,共有前後兩個部分,移除完請記得儲存。

  8. 在瀏覽器中開啟你的本機測試環境,你就可以看到歡迎頁了!
    welcome 歡迎頁

    welcome 歡迎頁

     
  9. 如果你想要開啟除錯模式,在CodeIgniter4 你可以快速切換成開發模式來開啟除錯模式,只要在根目錄找到檔名env的檔案,將其複製一份,並重新命成成「.env」,然後將裡面的第17行設定成「CI_ENVIRONMENT = development」 即可快速切換成開發模式,當然你也可以改回「CI_ENVIRONMENT = production」即可關閉。
    CI_ENVIRONMENT = development

    CI_ENVIRONMENT = development

以上就是本次的CodeIgniter4 下載與安裝的教學,如果有哪邊寫錯或不清楚的地方麻煩留言告訴我,我會盡快修正的,下一篇是CodeIgniter 4 快速上手 (二) 建議簡單的簡易最新消息-新增篇

[php] 快速分割datetime資料

這其實沒什麼了不起,但是我五六年的菜菜鳥就是不常用,所以一天到晚都忘記,乾脆寫一篇放在部落格裡,這樣我就不會忘記了!

一般的datetime格式產出的資料會是像這樣“2015-09-08 02:28:07”,以前光是要把年月日時分秒拆開就要寫很多explode,就算要把日期跟時間差開也要寫一個explode,像這樣
$datetime = '2015-09-08 02:28:07';
$date_time = explode(' ', $datetime);
//$date_time[0]=2015-09-08
//$date_time[1]=02:28:07

如果我們要拆成年、月、日、時、分、秒就更麻煩了,就會變成這樣
$datetime = '2015-09-08 02:28:07';
$date_time = explode(' ', $datetime);
$date = explode('-', $date_time[0]);
$time = explode(':', $date_time[1]);
//$date[0]=2015
//$date[1]=09
//$date[2]=08
//time[0]=02
//time[1]=28
//time[2]=07

所以就會有一種怎麼越寫越複雜的感覺,事實上如果你會正規表達式,那就神奇了,因為只要一行就解決了 list($year, $month, $day, $hour, $minute, $second) = preg_split('/[-: ]/', $datetime);
//var_dump($year, $month, $day, $hour, $minute, $second);
所以新東西還是要加減學一下,這樣才可以提升自己的效率啊!

[筆記] opencart 1.5.6.1 後台 Sort Order 排序數字無法正常顯示

最近朋友開了一間店,因為預算有限又想用最快速度完成購物網站,所以就用Opencart來製作,本來打算裝2.0,但是朋友買版型只適用1.5.6,所以只好裝1.5.6版本,在上稿的過程中,編輯分類的時候發現在列表裡面的排序數字一直都不對,所以就回去查了一下程式,原來是原本的程式筆誤,導致 opencart 最終發佈的1.5.6.1版本裡面有bug,修改方式如下:

1. 找到admin/model/catalog/category.php,並用編輯器打開。
2. 尋找208行$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR ' > ') AS name, c.parent_id, c.sort_order FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c ON (cp.path_id = c.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (c.category_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
3. 將上方紅色文字改成“cp.category_id” 變成+ $sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR ' > ') AS name, c.parent_id, c.sort_order FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c ON (cp.category_id = c.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
4. 修改完成後上傳覆蓋admin/model/catalog/category.php,即可修復Sort Order 排序數字問題

[php]PHP in a Tweet 用140字寫完PHP功能

大家都知道Twitter一篇只能發表140字元的內容,所以只要在140個字以內的東西都可以發表出來,而PHP in a Tweet 是一個運用140發表出可用的PHP程式的活動,這種感覺其實非常的微妙,對PHP沒有說很熟悉的我來說,更是非常的有趣且特別,這個活動的規則也非常的簡單易懂:

1. 必須使用正規PHP撰寫
2. 最後的結果必須是echo "結果"或是return "結果"
3. 開始標籤(<?)與結束標籤(?>)可省略

由於規則非常簡單,所以參加的人也蠻多的,如果你有在玩Twitter,而且也會寫PHP,可以考慮參加一下這個140寫完PHP的活動噢!

詳細內容請見:PHP in a Tweet

[mysql]MD5加密 VS. sha1加密

一般建立會員資料的時候,密碼都會使用加密來隱藏密碼,這樣做可以避免哪天資料庫被駭客入侵,這樣大批會員權益會受損的危險,但是加密方式這麼多,到底哪一種加密方式比較好?就以往我的經驗來看,會員部分加密有使用MD5或Sha1加密,到底哪一種加密方式比較安全呢?

而到底什麼是MD5加密呢?

MD5的全名是Message-Digest Algorithm 5Message-Digest Algorithm 5(資訊-摘要演算法 5),是基於MD2、MD3和MD4,,在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來的。是一種不可逆的加密算法,目前還沒有實際可以反逆推回的公式,但已有網站提供暴力破解MD5的資料查詢。

那什麼又是SHA1加密呢?

SHA1其實是SHA家族中的其中一員,SHA的全名是Secure Hash Algorithm(安全雜湊演算法) ,是由美國國家安全域(NSA)所設計,並由美國國家標準與技術研究院(NIST)發佈;是美國政府標準。而SHA1是基於MD5發展而來,SHA1比MD5多32位密文,所以更安全,但由於長度較長,所以使用SHA1的運算時間會比MD5還長一些。

最後簡單整理一下:

明碼 = 不加密,安全度為0
md5 = 比較安全,但是容易破解
sha1 = 比md5安全
sha256 = 比sha1安全
sha 512 = 比sha 256安全