長也 - 筆記長也NotesHazuya

PHP—消毒與驗證使用者輸入

本文分享我自己如何實作使用者資料的驗證與消毒,驗證與消毒可以使你的應用程式更安全。但請注意,以下介紹的只是我的作法(或者我知道的作法),並不代表只能這樣做,或者我的作法是好的。 外部資料來源 $_GET、$_POST、$_COOKIE、file_get_contents()、遠端資料庫...... 消毒資料的重要性 不要信任你的使用者,因為隨時有人會刻意或不......

PHP - Password_Hash密碼雜湊API

為何需要雜湊密碼 密碼若以明文的形式儲存在資料庫當中,當應用程式產生漏洞而導致資料庫注入攻擊將可能導致密碼外洩,故以雜湊後的雜湊值儲存是安全的,此外也能避免網站被懷疑洩漏密碼。 從PHP5.5.0開始內建了密碼HASH的API,讓密碼雜湊變得相當容易,新的算法也比MD5、SHA1來得安全。 產生雜湊值:password_hash 這個函式共有三個引......

PHP閉包(匿名函式)與繫結狀態

閉包與匿名函式 閉包是創造時就封裝了內部狀態的函式,即使函式已經結束了,但狀態會一直被保存在閉包中。匿名函式就是沒有名字的函式,匿名函式可以跟其他物件一樣指派給變數。 在PHP中,閉包與匿名函式視為同樣的東西。 建立閉包 $plusone=function ($num){ re......

PHP—產生器的介紹與使用

產生器 產生器是一個簡單的迭代器,只在有需要的時候計算並產生迭代的數值;但是產生器是一個用過即丟的工具,無法利用同一個產生器重複迭代,也不能倒退。 產生器的使用 如果我們要產生介於0並小於$step中間的所有數值,傳統上我們會將所有產生的數值存進一個陣列,並回傳 function make($step){ $......

PHP特徵機制介紹

何謂特徵機制? PHP中的特徵機制是一個類別的局部實作(方法或屬性等),而且可以被多個類別同時使用;而特徵機制具有介面(定義類別可以做什麼)與模組化(不必重複篩寫程式碼)的特性。 從範例了解為何使用特徵機制 當今天我們有兩個較無關係的類別:人與車子,我希望他們都回報所在的地址資訊,我們有幾種做法可以實現: 建立共同類別並且......

PHP物件導向觀念—介面(Interface)

本文討論PHP物件導向當中的介面,應該與其他語言中的物件導向是差不多的。 何謂介面(Interface)? 介面可以做為兩個類別溝通的橋樑,讓一個類別可以知道另外一個類別要做什麼,讓這些類別有了共同的標準;介面中宣告的方法也不會有任何的實作,因為只定義了使用這個介面的類別應該要實作什麼,但不管

PHP輸出緩衝與header函式

此次升級PHP7遇到一個問題,header()函數沒辦法正常運作,被報錯以下訊息: PHP Warning: Cannot modify header information - headers already sent by (output started at /xxx/xxx/xxx.php:3) in /xxx/xxx/xxx.php on line 4 這項錯誤是說header已經發送,無法再更改,為何會這樣?本文在此討論。 PHP的輸出緩衝機......

PHP - NameSpace命名空間

上一回提到命名空間是在"C#的命名空間與Java的套件包"一文當中,比較了Java的Package以及C#的namespace,本次要提到的是PHP當中的namespace,與C#當中的namespace是差不多的,都是一種虛擬的結構,而非系統實體檔案的位置與結構,本文將介紹如何使用PHP的命名空間......

C#的命名空間與Java的套件包

先回顧一下兩者的使用方法,再來比較 C# - 命名空間namespace //定義一個命名空間 namespace space { // ... } //using關鍵字,告訴程式我們使用的命名空間 using space; Java - 套件包 //告訴程式屬於哪個包 package pack; //import關鍵字 - 使用......

JavaScript - 陣列(Array)

JavaScript的陣列有超過一種的宣告方式,也提供了很多的函數可以使用。 JavaScript中的陣列 在JS當中,陣列既是一種資料集合,也是一種物件。 宣告陣列 以Array方法宣告 這種方法大致上是利用建構子建構出一個Array物件,例如: var p=new Array(10); p[1]=50;