通過(guò)PHP的內(nèi)置函數(shù),通過(guò)DES算法對(duì)數(shù)據(jù)加密和解密
更新時(shí)間:2012年06月21日 06:40:43 作者:
數(shù)據(jù)加密的基本過(guò)程就是對(duì)原來(lái)為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱(chēng)為密文,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來(lái)內(nèi)容,通過(guò)這樣的途徑來(lái)達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的
由于項(xiàng)目的需要,要寫(xiě)一個(gè)能生成“授權(quán)碼”的類(lèi)(授權(quán)碼主要包含項(xiàng)目使用的到期時(shí)間),生成的授權(quán)碼將會(huì)寫(xiě)入到一個(gè)文件當(dāng)中,每當(dāng)項(xiàng)目運(yùn)行的時(shí)候,會(huì)自動(dòng)讀取出文件中的密文,然后使用唯一的“密鑰”來(lái)調(diào)用某個(gè)函數(shù),對(duì)密文進(jìn)行解密,從中解讀出項(xiàng)目的使用到期時(shí)間。
之前,自己有先試著寫(xiě)了下,主要是base64+md5+反轉(zhuǎn)字符串。算法太過(guò)簡(jiǎn)單,很容易被破解,而且也沒(méi)有能過(guò)做到“密鑰”在加解密中的重要性,故而舍之。
后來(lái),查找了相關(guān)資料,發(fā)現(xiàn),原來(lái)PHP中內(nèi)置了一個(gè)功能強(qiáng)大的函數(shù)庫(kù),即Mcrypt。
其實(shí),mcrypt本身就提供了強(qiáng)大的加密解密方法,并且支持很多流行的公開(kāi)的加密算法,如DES, TripleDES, Blowfish (默認(rèn)), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB。
這里簡(jiǎn)單的引用下百度百科關(guān)于“加密算法”的解釋?zhuān)?
數(shù)據(jù)加密的基本過(guò)程就是對(duì)原來(lái)為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱(chēng)為“密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來(lái)內(nèi)容,通過(guò)這樣的途徑來(lái)達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。 該過(guò)程的逆過(guò)程為解密,即將該編碼信息轉(zhuǎn)化為其原來(lái)數(shù)據(jù)的過(guò)程。
加密技術(shù)通常分為兩大類(lèi):“對(duì)稱(chēng)式”和“非對(duì)稱(chēng)式”。
對(duì)稱(chēng)式加密就是加密和解密使用同一個(gè)密鑰,通常稱(chēng)之為“Session Key ”這種加密技術(shù)目前被廣泛采用,如美國(guó)政府所采用的DES加密標(biāo)準(zhǔn)就是一種典型的“對(duì)稱(chēng)式”加密法,它的Session Key長(zhǎng)度為56Bits。
非對(duì)稱(chēng)式加密就是加密和解密所使用的不是同一個(gè)密鑰,通常有兩個(gè)密鑰,稱(chēng)為“公鑰”和“私鑰”,它們兩個(gè)必需配對(duì)使用,否則不能打開(kāi)加密文件。這里的“公鑰”是指可以對(duì)外公布的,“私鑰”則不能,只能由持有人一個(gè)人知道。它的優(yōu)越性就在這里,因?yàn)閷?duì)稱(chēng)式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密鑰告訴對(duì)方,不管用什么方法都有可能被別竊聽(tīng)到。而非對(duì)稱(chēng)式的加密方法有兩個(gè)密鑰,且其中的“公鑰”是可以公開(kāi)的,也就不怕別人知道,收件人解密時(shí)只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問(wèn)題。
前面提到過(guò),mcrypt支持多種國(guó)際公開(kāi)的算法,我在這次的項(xiàng)目中使用的是DES算法,DES(Data Encryption Standard),這是一個(gè)對(duì)稱(chēng)算法,速度較快,適用于加密大量數(shù)據(jù)的場(chǎng)合。
接下來(lái)我簡(jiǎn)要的說(shuō)明下加密類(lèi)中會(huì)使用到的幾個(gè)函數(shù)。
--------------------------------------------------------------------------------
resource mcrypt_module_open ( string $algorithm , string $algorithm_directory , string $mode , string $mode_directory )
參數(shù)$algorithm:要使用的算法,可以通過(guò)函數(shù)mcrypt_list_algorithms()來(lái)查看所有支持的算法名稱(chēng)
參數(shù)$ mode:要使用哪種模式,同樣,可以?xún)?nèi)置函數(shù)mcrypt_list_algorithms()來(lái)查看所有支持的模式
--------------------------------------------------------------------------------
int mcrypt_enc_get_iv_size ( resource $td )
該函數(shù)將返回使用的算法的初始化向量(IV)的大?。粗悬c(diǎn)抽象),如果IV在算法中被忽略的話講返回0。
參數(shù)$td就是使用mcrypt_module_open函數(shù)的返回值。
--------------------------------------------------------------------------------
string mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_RANDOM ] )
該函數(shù)會(huì)創(chuàng)建一個(gè)初始化向量(IV)
參數(shù):
$source可以使MCRYPT_RAND,MCRYPT_DEV_RANDOM,
MCRYPT_DEV_URANDOM
注意:PHP5.3.0以上的版本,只支持MCRYPT_RAND
返回值:
成功,則返回一個(gè)字符串型的初始向量,失敗,則返回False
--------------------------------------------------------------------------------
int mcrypt_enc_get_key_size ( resource $td )
該函數(shù)能夠取得當(dāng)前算法所支持的最大的密鑰長(zhǎng)度(以字節(jié)計(jì)算)
int mcrypt_generic_init ( resource $td , string $key , string $iv )
調(diào)用mcrypt_generic() or mdecrypt_generic()之前,首先需要調(diào)用該函數(shù),該函數(shù)能夠幫我們初始化緩沖區(qū),用以存放加密數(shù)據(jù)。
參數(shù)$key:密鑰長(zhǎng)度,記住,當(dāng)前$key的值,要比函數(shù)mcrypt_enc_get_key_size()返回的值小
問(wèn)題:$key的值,越大越好嗎?有同學(xué)會(huì)的,幫忙解答下。
--------------------------------------------------------------------------------
string mcrypt_generic ( resource $td , string $data )
完成了前面的工作之后,就可以調(diào)用該函數(shù)用以加密數(shù)據(jù)了。
參數(shù)$data:要加密的數(shù)據(jù)內(nèi)容
返回值:返回加密后的密文
--------------------------------------------------------------------------------
bool mcrypt_generic_deinit ( resource $td )
該函數(shù)能夠幫我們卸載當(dāng)前使用的加密模塊。
返回值
成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE.
--------------------------------------------------------------------------------
string mdecrypt_generic ( resource $td , string $data )
該函數(shù)能夠用來(lái)解密數(shù)據(jù)。
注意:解密后的數(shù)據(jù)可能比實(shí)際上的更長(zhǎng),可能會(huì)有后續(xù)的\0,需去掉
--------------------------------------------------------------------------------
bool mcrypt_module_close ( resource $td )
關(guān)閉指定的加密模塊資源句柄
返回值
成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE.
--------------------------------------------------------------------------------
貼上代碼:
<?php
class authCode {
public $ttl;//到期時(shí)間 時(shí)間格式:20120101(年月日)
public $key_1;//密鑰1
public $key_2;//密鑰2
public $td;
public $ks;//密鑰的長(zhǎng)度
public $iv;//初始向量
public $salt;//鹽值(某個(gè)特定的字符串)
public $encode;//加密后的信息
public $return_array = array(); // 返回帶有MAC地址的字串?dāng)?shù)組
public $mac_addr;//mac地址
public $filepath;//保存密文的文件路徑
public function __construct(){
//獲取物理地址
$this->mac_addr=$this->getmac(PHP_OS);
$this->filepath="./licence.txt";
$this->ttl="20120619";//到期時(shí)間
$this->salt="~!@#$";//鹽值,用以提高密文的安全性
// echo "<pre>".print_r(mcrypt_list_algorithms ())."</pre>";
// echo "<pre>".print_r(mcrypt_list_modes())."</pre>";
}
/**
* 對(duì)明文信息進(jìn)行加密
* @param $key 密鑰
*/
public function encode($key) {
$this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$size=mcrypt_enc_get_iv_size($this->td);//設(shè)置初始向量的大小
$this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//創(chuàng)建初始向量
$this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密鑰長(zhǎng)度(以字節(jié)計(jì)算)
$this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始處理
//要保存到明文
$con=$this->mac_addr.$this->ttl;
//加密
$this->encode = mcrypt_generic($this->td, $con);
//結(jié)束處理
mcrypt_generic_deinit($this->td);
//將密文保存到文件中
$this->savetofile();
}
/**
* 對(duì)密文進(jìn)行解密
* @param $key 密鑰
*/
public function decode($key) {
try {
if (!file_exists($this->filepath)){
throw new Exception("授權(quán)文件不存在");
}else{//如果授權(quán)文件存在的話,則讀取授權(quán)文件中的密文
$fp=fopen($this->filepath,'r');
$secret=fread($fp,filesize($this->filepath));
$this->key_2 = substr(md5(md5($key).$this->salt),0,$this->ks);
//初始解密處理
mcrypt_generic_init($this->td, $this->key_2, $this->iv);
//解密
$decrypted = mdecrypt_generic($this->td, $secret);
//解密后,可能會(huì)有后續(xù)的\0,需去掉
$decrypted=trim($decrypted) . "\n";
//結(jié)束
mcrypt_generic_deinit($this->td);
mcrypt_module_close($this->td);
return $decrypted;
}
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 將密文保存到文件中
*/
public function savetofile(){
try {
$fp=fopen($this->filepath,'w+');
if (!$fp){
throw new Exception("文件操作失敗");
}
fwrite($fp,$this->encode);
fclose($fp);
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 取得服務(wù)器的MAC地址
*/
public function getmac($os_type){
switch ( strtolower($os_type) ){
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach( $this->return_array as $value ){
if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array )){
$mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $mac_addr;
}
/**
* windows服務(wù)器下執(zhí)行ipconfig命令
*/
public function forWindows(){
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
/**
* Linux服務(wù)器下執(zhí)行ifconfig命令
*/
public function forLinux(){
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
$code=new authCode();
//加密
$code->encode("~!@#$%^");
//解密
echo $code->decode("~!@#$%^");
?>
原創(chuàng)文章:WEB開(kāi)發(fā)_小飛
之前,自己有先試著寫(xiě)了下,主要是base64+md5+反轉(zhuǎn)字符串。算法太過(guò)簡(jiǎn)單,很容易被破解,而且也沒(méi)有能過(guò)做到“密鑰”在加解密中的重要性,故而舍之。
后來(lái),查找了相關(guān)資料,發(fā)現(xiàn),原來(lái)PHP中內(nèi)置了一個(gè)功能強(qiáng)大的函數(shù)庫(kù),即Mcrypt。
其實(shí),mcrypt本身就提供了強(qiáng)大的加密解密方法,并且支持很多流行的公開(kāi)的加密算法,如DES, TripleDES, Blowfish (默認(rèn)), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB。
這里簡(jiǎn)單的引用下百度百科關(guān)于“加密算法”的解釋?zhuān)?
數(shù)據(jù)加密的基本過(guò)程就是對(duì)原來(lái)為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼,通常稱(chēng)為“密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來(lái)內(nèi)容,通過(guò)這樣的途徑來(lái)達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。 該過(guò)程的逆過(guò)程為解密,即將該編碼信息轉(zhuǎn)化為其原來(lái)數(shù)據(jù)的過(guò)程。
加密技術(shù)通常分為兩大類(lèi):“對(duì)稱(chēng)式”和“非對(duì)稱(chēng)式”。
對(duì)稱(chēng)式加密就是加密和解密使用同一個(gè)密鑰,通常稱(chēng)之為“Session Key ”這種加密技術(shù)目前被廣泛采用,如美國(guó)政府所采用的DES加密標(biāo)準(zhǔn)就是一種典型的“對(duì)稱(chēng)式”加密法,它的Session Key長(zhǎng)度為56Bits。
非對(duì)稱(chēng)式加密就是加密和解密所使用的不是同一個(gè)密鑰,通常有兩個(gè)密鑰,稱(chēng)為“公鑰”和“私鑰”,它們兩個(gè)必需配對(duì)使用,否則不能打開(kāi)加密文件。這里的“公鑰”是指可以對(duì)外公布的,“私鑰”則不能,只能由持有人一個(gè)人知道。它的優(yōu)越性就在這里,因?yàn)閷?duì)稱(chēng)式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密鑰告訴對(duì)方,不管用什么方法都有可能被別竊聽(tīng)到。而非對(duì)稱(chēng)式的加密方法有兩個(gè)密鑰,且其中的“公鑰”是可以公開(kāi)的,也就不怕別人知道,收件人解密時(shí)只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問(wèn)題。
前面提到過(guò),mcrypt支持多種國(guó)際公開(kāi)的算法,我在這次的項(xiàng)目中使用的是DES算法,DES(Data Encryption Standard),這是一個(gè)對(duì)稱(chēng)算法,速度較快,適用于加密大量數(shù)據(jù)的場(chǎng)合。
接下來(lái)我簡(jiǎn)要的說(shuō)明下加密類(lèi)中會(huì)使用到的幾個(gè)函數(shù)。
--------------------------------------------------------------------------------
resource mcrypt_module_open ( string $algorithm , string $algorithm_directory , string $mode , string $mode_directory )
參數(shù)$algorithm:要使用的算法,可以通過(guò)函數(shù)mcrypt_list_algorithms()來(lái)查看所有支持的算法名稱(chēng)
參數(shù)$ mode:要使用哪種模式,同樣,可以?xún)?nèi)置函數(shù)mcrypt_list_algorithms()來(lái)查看所有支持的模式
--------------------------------------------------------------------------------
int mcrypt_enc_get_iv_size ( resource $td )
該函數(shù)將返回使用的算法的初始化向量(IV)的大?。粗悬c(diǎn)抽象),如果IV在算法中被忽略的話講返回0。
參數(shù)$td就是使用mcrypt_module_open函數(shù)的返回值。
--------------------------------------------------------------------------------
string mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_RANDOM ] )
該函數(shù)會(huì)創(chuàng)建一個(gè)初始化向量(IV)
參數(shù):
$source可以使MCRYPT_RAND,MCRYPT_DEV_RANDOM,
MCRYPT_DEV_URANDOM
注意:PHP5.3.0以上的版本,只支持MCRYPT_RAND
返回值:
成功,則返回一個(gè)字符串型的初始向量,失敗,則返回False
--------------------------------------------------------------------------------
int mcrypt_enc_get_key_size ( resource $td )
該函數(shù)能夠取得當(dāng)前算法所支持的最大的密鑰長(zhǎng)度(以字節(jié)計(jì)算)
int mcrypt_generic_init ( resource $td , string $key , string $iv )
調(diào)用mcrypt_generic() or mdecrypt_generic()之前,首先需要調(diào)用該函數(shù),該函數(shù)能夠幫我們初始化緩沖區(qū),用以存放加密數(shù)據(jù)。
參數(shù)$key:密鑰長(zhǎng)度,記住,當(dāng)前$key的值,要比函數(shù)mcrypt_enc_get_key_size()返回的值小
問(wèn)題:$key的值,越大越好嗎?有同學(xué)會(huì)的,幫忙解答下。
--------------------------------------------------------------------------------
string mcrypt_generic ( resource $td , string $data )
完成了前面的工作之后,就可以調(diào)用該函數(shù)用以加密數(shù)據(jù)了。
參數(shù)$data:要加密的數(shù)據(jù)內(nèi)容
返回值:返回加密后的密文
--------------------------------------------------------------------------------
bool mcrypt_generic_deinit ( resource $td )
該函數(shù)能夠幫我們卸載當(dāng)前使用的加密模塊。
返回值
成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE.
--------------------------------------------------------------------------------
string mdecrypt_generic ( resource $td , string $data )
該函數(shù)能夠用來(lái)解密數(shù)據(jù)。
注意:解密后的數(shù)據(jù)可能比實(shí)際上的更長(zhǎng),可能會(huì)有后續(xù)的\0,需去掉
--------------------------------------------------------------------------------
bool mcrypt_module_close ( resource $td )
關(guān)閉指定的加密模塊資源句柄
返回值
成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE.
--------------------------------------------------------------------------------
貼上代碼:
復(fù)制代碼 代碼如下:
<?php
class authCode {
public $ttl;//到期時(shí)間 時(shí)間格式:20120101(年月日)
public $key_1;//密鑰1
public $key_2;//密鑰2
public $td;
public $ks;//密鑰的長(zhǎng)度
public $iv;//初始向量
public $salt;//鹽值(某個(gè)特定的字符串)
public $encode;//加密后的信息
public $return_array = array(); // 返回帶有MAC地址的字串?dāng)?shù)組
public $mac_addr;//mac地址
public $filepath;//保存密文的文件路徑
public function __construct(){
//獲取物理地址
$this->mac_addr=$this->getmac(PHP_OS);
$this->filepath="./licence.txt";
$this->ttl="20120619";//到期時(shí)間
$this->salt="~!@#$";//鹽值,用以提高密文的安全性
// echo "<pre>".print_r(mcrypt_list_algorithms ())."</pre>";
// echo "<pre>".print_r(mcrypt_list_modes())."</pre>";
}
/**
* 對(duì)明文信息進(jìn)行加密
* @param $key 密鑰
*/
public function encode($key) {
$this->td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式
$size=mcrypt_enc_get_iv_size($this->td);//設(shè)置初始向量的大小
$this->iv = mcrypt_create_iv($size, MCRYPT_RAND);//創(chuàng)建初始向量
$this->ks = mcrypt_enc_get_key_size($this->td);//返回所支持的最大的密鑰長(zhǎng)度(以字節(jié)計(jì)算)
$this->key_1 = substr(md5(md5($key).$this->salt),0,$this->ks);
mcrypt_generic_init($this->td, $this->key_1, $this->iv); //初始處理
//要保存到明文
$con=$this->mac_addr.$this->ttl;
//加密
$this->encode = mcrypt_generic($this->td, $con);
//結(jié)束處理
mcrypt_generic_deinit($this->td);
//將密文保存到文件中
$this->savetofile();
}
/**
* 對(duì)密文進(jìn)行解密
* @param $key 密鑰
*/
public function decode($key) {
try {
if (!file_exists($this->filepath)){
throw new Exception("授權(quán)文件不存在");
}else{//如果授權(quán)文件存在的話,則讀取授權(quán)文件中的密文
$fp=fopen($this->filepath,'r');
$secret=fread($fp,filesize($this->filepath));
$this->key_2 = substr(md5(md5($key).$this->salt),0,$this->ks);
//初始解密處理
mcrypt_generic_init($this->td, $this->key_2, $this->iv);
//解密
$decrypted = mdecrypt_generic($this->td, $secret);
//解密后,可能會(huì)有后續(xù)的\0,需去掉
$decrypted=trim($decrypted) . "\n";
//結(jié)束
mcrypt_generic_deinit($this->td);
mcrypt_module_close($this->td);
return $decrypted;
}
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 將密文保存到文件中
*/
public function savetofile(){
try {
$fp=fopen($this->filepath,'w+');
if (!$fp){
throw new Exception("文件操作失敗");
}
fwrite($fp,$this->encode);
fclose($fp);
}catch (Exception $e){
echo $e->getMessage();
}
}
/**
* 取得服務(wù)器的MAC地址
*/
public function getmac($os_type){
switch ( strtolower($os_type) ){
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach( $this->return_array as $value ){
if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,$temp_array )){
$mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $mac_addr;
}
/**
* windows服務(wù)器下執(zhí)行ipconfig命令
*/
public function forWindows(){
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
/**
* Linux服務(wù)器下執(zhí)行ifconfig命令
*/
public function forLinux(){
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
$code=new authCode();
//加密
$code->encode("~!@#$%^");
//解密
echo $code->decode("~!@#$%^");
?>
原創(chuàng)文章:WEB開(kāi)發(fā)_小飛
相關(guān)文章
php通過(guò)排列組合實(shí)現(xiàn)1到9數(shù)字相加都等于20的方法
這篇文章主要介紹了php通過(guò)排列組合實(shí)現(xiàn)1到9數(shù)字相加都等于20的方法,實(shí)例分析了php排列組合數(shù)學(xué)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
php數(shù)據(jù)訪問(wèn)之查詢(xún)關(guān)鍵字
本文根據(jù)數(shù)據(jù)庫(kù)中的car表做一個(gè)汽車(chē)查詢(xún)頁(yè)面,鞏固php查詢(xún)關(guān)鍵字操作,感興趣的小伙伴們可以參考一下2016-05-05
PHP中使用file_get_contents抓取網(wǎng)頁(yè)中文亂碼問(wèn)題解決方法
這篇文章主要介紹了PHP中使用file_get_contents抓取網(wǎng)頁(yè)中文亂碼問(wèn)題解決方法,可以通過(guò)使用curl配置gzip選項(xiàng)來(lái)解決,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
使用PHPStorm+XDebug搭建單步調(diào)試環(huán)境
由于 PhpStorm 不像 Zend 公司為 Zend Studio 那樣配套集成了很多開(kāi)發(fā)部件,包括解釋器、調(diào)試器、虛擬機(jī)、服務(wù)器、開(kāi)發(fā)框架等等。因此,配置 PhpStorm 開(kāi)發(fā)環(huán)境相對(duì)較繁瑣,有很多需要注意的地方。2017-11-11
php 無(wú)限級(jí)分類(lèi) 獲取頂級(jí)分類(lèi)ID
這篇文章主要介紹了php 無(wú)限級(jí)分類(lèi) 獲取頂級(jí)分類(lèi)ID的相關(guān)代碼,需要的朋友可以參考下2016-03-03
PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序,在PHP中內(nèi)置了很多對(duì)數(shù)組進(jìn)行處理的函數(shù),有很多時(shí)候我們直接使用其內(nèi)置函數(shù)就能達(dá)到我們的需求,得到我們所想要的結(jié)果,需要的朋友可以參考下2023-10-10
PHP實(shí)現(xiàn)的注冊(cè),登錄及查詢(xún)用戶(hù)資料功能API接口示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的注冊(cè),登錄及查詢(xún)用戶(hù)資料功能API接口,結(jié)合具體實(shí)例形式分析了php服務(wù)器端用戶(hù)注冊(cè)、登陸、查詢(xún)及curl登陸查詢(xún)功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
php實(shí)現(xiàn)基于openssl的加密解密方法
這篇文章主要介紹了php實(shí)現(xiàn)基于openssl的加密解密方法,結(jié)合實(shí)例形式分析了php自定義函數(shù)實(shí)現(xiàn)基于openssl的加密解密操作相關(guān)技巧,需要的朋友可以參考下2016-09-09

