phpClass

php動態網頁語言

┤課前廢話├───────────────────────────────── 最近在幫iBunny改寫核心,其中一項改變不是有關使用者體驗的方面,是與通訊軟體方 伺服器(下稱:Remote Server)進行通訊的程式要翻修。 目前Chat Bot的串接方式是利用設定webhook的方式,我們必須告知Remote Server在 Bunny Server上哪個位置是在接收消息的窗口,當使用者在APP上發出一條訊息Remote就 會把訊息、ID等等資訊包裝起來發送給Bunny。 以上不贅述。重點是目前處理方式是Bunny收到資訊後會先消化訊息→想怎麼回應→回 覆使用者→回應Remote說"200 OK!"。基本上在流量小、程式正確…等等最佳狀況下這樣 的方式是沒有問題的,但一旦有環節錯了,Remote跟Bunny的連線就會超時中斷,持續發 生的話Remote就會把Bunny當作壞了中斷串接。 ┤課前簡介├───────────────────────────────── 一般在 unix-like 的作業系統下,要寫多程序程式一定會用到fork。在 PHP 裡也不例 外,若要在 PHP 中建一個子程序,要叫用 pcntl_fork()函式。 把pcntl_fork用在iBunny的話就是先請父程序回應Remote並關閉連線再叫子程序負責回 應使用者。 ┤範例寫法├───────────────────────────────── 01 <?php 02 $pid = pcntl_fork(); 03 if($pid == -1){ 04 die("Fork fail."); 05 }else if($pid){ 06 //父程序 07 echo "Father start...<br />"; 08 sleep(5); 09 echo "Father end...<br />"; 10 exit; 11 }else{ 12 //子程序 13 for($i=1;$i<=3;$i++){ 14 echo "I am child ".$i."<br />"; 15 } 16 exit; 17 } 18 ?> ┤輸出結果├───────────────────────────────── Father srart... I am child 1 I am child 2 I am child 3 Father end... ┤ 後記 ├───────────────────────────────── 父程序與子程序會各自執行,父子各自的exit;也不會互相影響。 範例中是子程序先結束,當然也可以運用成父先結束子繼續執行。 ───────────────────────────────────────

todaySep 12, 2018

1. 到官網下載tar.gz原檔 (以5.6為例: wget http://tw2.php.net/distributions/php-5.6.37.tar.gz) 2. tar -zxvf php-5.6.37.tar.gz 解壓縮 3. cd php-5.6.37/ext/pcntl 4. phpize (*註1) 5. ./configure && make install 6. echo "extension=pcntl.so" >> /etc/php5.6/php.ini ^^^^^^^^^^^^^^^^^^^(視ini檔的位置輸入) 亦或是用編輯器(如:vim、nano…)打開ini檔最末行輸入extension=pcntl.so 7. service apache2 restart 上述步驟完成後,執行pcntl_fork();時 如果php有報錯:PHP Warning: pcntl_fork() has been disabled for security reasons 的話,請打開ini檔,找到以下這行: disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait…… 在行首加上;把該行註釋 備註 1.如果執行phpize顯示command no found請直接從套件庫安裝php-dev (ex: apt-get install php5.6-dev)

todaySep 12, 2018

┤課前廢話├───────────────────────────────── 最近正好需要用到雜湊 原本已經稍微忘記這些東西 趕緊查完資料做筆記 ┤課前簡介├───────────────────────────────── 什麼是SHA雜湊? 安全雜湊演算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼雜湊函式家 族,是FIPS(聯邦資訊處理標準 Federal Information Processing Standards,是美國聯 邦政府制定給所有軍事機構除外的政府機構及政府的承包商所使用的公開標準。)所認證的 安全雜湊演算法。 SHA家族的演算法,由美國國家安全局(NSA)所設計,並由美國國家標準與技術研究 院(NIST)發布,是美國的政府標準,其分別是:SHA-0(1993年發布)、SHA-1(1995年 發布)、SHA-2(2001年發布)、SHA-3(2015年正式發布)。 僅節錄部分內容,詳細可參考維基百科: https://zh.wikipedia.org/wiki/SHA%E5%AE%B6%E6%97%8F ┤課程簡介├───────────────────────────────── PHP針對演算法有制定了md5()、sha1()...等函式,但隨著雜湊演算法越來越多,PHP把 所有的雜湊(hash)演算都整合成一個函式:hash(),直接在函式中指定要用哪個演算法。 本次課程會先講解md5()、sha1()兩種函式,接著介紹hash()。 ┤如何使用├───────────────────────────────── md5(string,raw) 參數解析: string: 必須,要轉換的字串(或變數) raw: 可略,輸出格式(二進位制或十六進位制) ├ TRUE: 輸出16個字符的二進制格式 └ FALSE: 輸出32個字符十六進制格式(未設置參數時默認選項) sha1(string,raw) 參數解析: string: 必須,要轉換的字串(或變數) raw: 可略,輸出格式(二進位制或十六進位制) ├ TRUE: 輸出20個字符的二進制格式 └ FALSE: 輸出40個字符十六進制格式(未設置參數時默認選項) hash(algo,string,raw) 參數解析: algo: 必須,使用的演算法 string: 必須,要轉換的字串(或變數) raw: 可略,輸出格式(二進位制或十六進位制) 另外關於hash可以使用的演算法可用hash_algos()列出(陣列,需以print_r()列出) ┤範例寫法├───────────────────────────────── 01 <?php 02 $string = "Hello bunny!"; 03 echo md5($string)."<br>"; 04 echo sha1($string)."<br>"; 05 echo hash("sha256",$string); 06 ?> ┤輸出結果├───────────────────────────────── 08f4951f7aeaf3a1977c46d7b0c08db1 7d24988bb1911b0c7118bbd35cf1dc0de9003711 fd27e8994a09a5c1197f1a3944c7518b27bc80e276cd2b381d8ddcf339d82a68 ───────────────────────────────────────

todayJan 27, 2018

print_r是一個將陣列列出的函式 當然,echo也能列出陣列,但是只能一一列出陣列的元素 相較之下,print_r在列出陣列會方便得多 ┤範例程式├───────────────────────────────── 01 <?php 02 $array = array("A", "B", "C"); 03 echo $array."<br>"; 04 echo $array[1]."<br>"; 05 print_r($array); 06 ?> ┤輸出結果├───────────────────────────────── Array B Array ( [0] => A [1] => B [2] => C ) ─────────────────────────────────────── 根據範例 當直接用echo列出陣列不指定項目時 程式只會返回Array 必須指定第幾項才會正確輸出該項的元素 但是print_r就可以直接將整個陣列輸出

todayDec 27, 2017

兩個東西,就只差了_r 看似相同的東西 但其實兩個東西完全不同 print本身並不是一個函式,用來輸出字串 跟上篇說的echo功能一樣 print_r則是一個用來輸出陣列的函式 是個函式,所以必須加上小括號 01 print_r($array); 下篇會說到echo、print_r輸出陣列的細節

todayDec 21, 2017

在php中,要輸出字串 除了有大家都熟知的print之外 還有一個其他語言較少見的echo 兩者的使用上大概像這樣: 01 print "Hello bunny!"; 02 echo "Hello bunny!"; 同樣都輸出 Hello bunny! 使用上大同小異 不過呢......事情不是一般人想的簡單 print會返回結果,echo則不會 當print執行成功返回1,失敗時則是會返回false echo則只會單純將要求的送出 另外print可以放在比較複雜的運算中,但echo不行 不過echo的執行速度會比print稍快

todayDec 20, 2017

今天需要把數列打亂 查詢做法時 突然發現這個簡單的函式:shuffle() ┤範例寫法├───────────────────────────────── 01 <?php 02 $array = array("A", "B", "C"); 03 shuffle($array); 04 print_r($array); 05 ?> ┤輸出結果├───────────────────────────────── Array ( [0] => B [1] => C [2] => A ) ───────────────────────────────────────

todayDec 20, 2017

看板板主

嗯兔