欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP三種方式讀取RSA密鑰加解密、簽名驗簽完整教程

 更新時間:2024年04月01日 11:11:04   作者:PHP隔壁老王鄰居  
RSA是一種非對稱加密算法,它使用一對密鑰來進(jìn)行加密和解密操作,這對密鑰包括公鑰和私鑰,公鑰是用于加密的密鑰,私鑰是用于解密的密鑰,本文介紹了PHP三種方式讀取RSA密鑰加解密、簽名驗簽完整教程,需要的朋友可以參考下

第一步、生成公私鑰

在線生成公鑰私鑰對,RSA公私鑰生成-ME2在線工具

密鑰長度

  • RSA 密鑰通常有不同的長度,通常以位數(shù)來表示,如 1024 位、2048 位等。一般來說,密鑰長度越長,加密強(qiáng)度越高,但同時也會增加加密和解密的計算復(fù)雜度。一般推薦使用 2048 位或更長的 RSA 密鑰來確保較高的安全性。

密鑰格式

  • OpenSSL 中的私鑰通常采用 PEM 格式(Privacy-Enhanced Mail,即隱私增強(qiáng)郵件)存儲。PEM 格式的密鑰是經(jīng)過 Base64 編碼的文本字符串,通常以 -----BEGIN PRIVATE KEY----- 開頭,以 -----END PRIVATE KEY----- 結(jié)尾。
  • 另外,私鑰也可以存儲在 PKCS#12 格式的證書文件中,通常以 .p12 或 .pfx 結(jié)尾。這些文件通常包含私鑰、公鑰和證書鏈等信息。

第二步、三種方式讀取RSA密鑰

第1種:公私鑰弄成一行,必須一行沒有空格和換行

$publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKZ1mKTymRoGKnHiP1xAy4aiyt5r0BscCZnDAonCrMFZ4kBGriPNHxEaLr5lfBnMKw7k6i+2dsFPSEZooTvqtPUCAwEAAQ==';
$privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApnWYpPKZGgYqceI/XEDLhqLK3mvQGxwJmcMCicKswVniQEauI80fERouvmV8GcwrDuTqL7Z2wU9IRmihO+q09QIDAQABAkBunx3nGHXYjppsfn++7iyTd+I7+Agfy/0xWyB3rpEiGGgfemjcRFaeq5SC2vUNXsrEOY5gbUSQmFxH//Cym18NAiEA1z1cZx/Q9cbIjFPwp1a+K5CVFDXDcfbi/AQgAkVs0/cCIQDF+2fr23AoBslcOC4S0yAx94AbgxCntYuRqztxybsrcwIgMW86ZcT87TX2oaQ1xXk6vC68zqN6fBZEE7Wu1Fa1pAkCIElmOJP3qfAc/AAlj+dIwLHlqWgJwl3674CU9Bfui2bDAiEA0CKJpF8x7KANCcopEQC93PsbIztuML322LOfDV1Lw/k=';

轉(zhuǎn)化能使用的密鑰資源 

  • 如果私鑰不是資源類型,則將私鑰進(jìn)行處理,將其轉(zhuǎn)換為 PEM 格式。這里使用 chunk_split 函數(shù)將私鑰按照每行64個字符的長度進(jìn)行分割,并在適當(dāng)?shù)奈恢貌迦霌Q行符 \n
  • 在拼接完整的 PEM 格式私鑰之后,再使用 openssl_pkey_get_private 函數(shù)將 PEM 格式的私鑰轉(zhuǎn)換為 OpenSSL 的私鑰資源
$pem = chunk_split($privateKey, 64, "\n");
$pem = "-----BEGIN PRIVATE KEY-----\n" . $pem. "-----END PRIVATE KEY-----\n";
 
$pem2 = chunk_split($publicKey, 64, "\n");
$pem2 = "-----BEGIN PUBLIC KEY-----\n" . $pem2 . "-----END PUBLIC KEY-----\n";

第2種:直接復(fù)制生成公私鑰

$publicKeyString = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1ffL+kUEedBLTzQrKU+
8oq9IZSUroxhmnWrXa1XMGtlbeVCHQNljujqwGuLELyk7i78cGczwCyGE2SVj9oI
tBzGn02fWZNCb3bHPv6ofliTvqYcZOFaFTWB+tTKuOmopCk/bgQVe7HC6+74s/3x
Q4tM1jVbNPYSY11++DLjEQ8KaA3pNJwoFTxER3GVEgmfhi5xUTTaBa5ZOIaNfsFr
0fGzvGbmRpqoIor6MlSxXbMO4k2pMzB7YJYYr7zRC28DoeJCj5XnXkq4XPIJzo8/
g79163dp0y9m7cDn4NfRDdBsFeHy6n+hKps6hSVf1z1ZtQtlfk0mRE/EchubDcuH
+QIDAQAB
-----END PUBLIC KEY-----";
 
$privateKeyString = "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnV98v6RQR50Et
PNCspT7yir0hlJSujGGadatdrVcwa2Vt5UIdA2WO6OrAa4sQvKTuLvxwZzPALIYT
ZJWP2gi0HMafTZ9Zk0Jvdsc+/qh+WJO+phxk4VoVNYH61Mq46aikKT9uBBV7scLr
7viz/fFDi0zWNVs09hJjXX74MuMRDwpoDek0nCgVPERHcZUSCZ+GLnFRNNoFrlk4
ho1+wWvR8bO8ZuZGmqgiivoyVLFdsw7iTakzMHtglhivvNELbwOh4kKPledeSrhc
8gnOjz+Dv3Xrd2nTL2btwOfg19EN0GwV4fLqf6EqmzqFJV/XPVm1C2V+TSZET8Ry
G5sNy4f5AgMBAAECggEAd5rFiV/EmXs4yVVzLEI7OG1S+oJQtmTdieFaZuzyqUfJ
Sf+W/lekKb1ts7PpxD+gfiCVCt2oTk1EUu4MO7GxkNIUYF3Ba+tli3dQt0SaNxum
FZhyKOQsV4ZT7WxTrFBM2XAlxsMie7M0xx6ZIUR6QTV56IxgMP1DbUOw8UKlqlV2
p3Vdckfjt2pWyLqM2yZUoC3+AjfqpJus/dpyIRGtLd8rLoFCrPgM2naEWxYCAeyI
CpHgzYCCAbWyXZOkFOWIFPm53ZDbdZpupzKjS29rYGjiZ7St6sdCegGoZ+aYeUwA
Bb1RKZjkBeLrxbuIZHlSbrBO12yE8gZ+VPzgSy1CVQKBgQDWHjj/7Yur/m+d9yJ0
9S14TK5KX3EX2cl46It8FMJEKTk1IhgYB6Dmk10pDrV2glJ3zLfwYeu82p9Zgswh
F34mU3o67medJ3OJP+/qHYvEm4WOKw1973v8GEQhqTvr7yPYVC/cRoyN49FKbKfC
sF7Scw7EaTObxtWMDJyaa+JDPwKBgQDIE3DhYzx1YahEHktYgVw9OaDdykzYZV2J
KO8rkAwS0oXY6yi2J1nCrq3N5Ro7PAMCESRabgAps7n2GazLNfrtG/DcH87M0kYz
AEwo1DvI3XVIAjiPmZXBeU2xp1o40OOxZXeHP3VzuU2ydyR6yp3Y2WCClmgf3Vuz
O1uGk2A+xwKBgCZzbPcAuJldarvqWoS4Vr8Ivi/a7dtDn/uXfxz8OVq2MHDLO5pt
HEbr5cnuu0WZ56dd2xZO71+Nvxn69B9pMZ0+Vm/oyjCdmhDmq3XWcngPGa/LKXQZ
IqHF1c5ZrsoSutQpYiLjhHAinj4IPyQmOhD+2oMJBVyPG2A4D5Nnlk1PAoGBAIXH
ognC3hEqzGVH0F+Ml82EdBD5DOsA1Es7KLj7J2eKht7lVqJ9q2ImhKaQkzqaRPSj
26fvt4Iq36QzxLtYC8FxllrJlfCUhUXi5AnE53jGw33zpjg2nNDyOEYavZQR8L2U
OBkiEHnhpJc5XRYR1vvBVevbgCIWVBODFA7nCkrPAoGAK2oIQ5SLu5OfAB4qcN6v
vHERc8JXGZWL/o2Z/4t0OX1X6NwDdAl87LCyQ6ab3dqmgemtjdd2Z9DDn2m9oPtO
yuNvlxYNiCqgsNyUCwy6Q1yy1fOvhiUJF8rkq4UTSeQ8gSrf8hf3ajHmzhA1r5B7
Y5MUPUHIS6ckWMTF+pAXAgQ=
-----END PRIVATE KEY-----";

openssl_pkey_get_publicopenssl_pkey_get_private是PHP OpenSSL擴(kuò)展提供的兩個函數(shù)。

openssl_pkey_get_public函數(shù)用于獲取公鑰,它可以從一個證書文件或PEM格式的公鑰字符串中提取公鑰信息,并返回一個公鑰資源

$publicKeyResource = openssl_pkey_get_public($publicKeyString);
$privateKeyResource = openssl_pkey_get_private($privateKeyString);

第3種;復(fù)制密鑰存儲為.pem文件后綴

$publicKeyString = file_get_contents('public.pem');
$privateKeyString = file_get_contents('private.pem');
 
$publicKeyResource = openssl_pkey_get_public($publicKeyString);
$privateKeyResource = openssl_pkey_get_private($privateKeyString);

第三步、RSA加解密

RSA加密

公鑰加密 openssl_public_encrypt => 私鑰解密 openssl_private_decrypt

私鑰加密 openssl_private_encrypt => 公鑰解密 openssl_public_decrypt

1. 公鑰加密、私鑰解密:
   - 使用公鑰加密數(shù)據(jù):發(fā)送方使用接收方的公鑰對數(shù)據(jù)進(jìn)行加密。
   - 使用私鑰解密數(shù)據(jù):只有擁有相應(yīng)私鑰的接收方才能使用私鑰解密并獲取原始數(shù)據(jù)。

2. 私鑰加密、公鑰解密:
   - 使用私鑰加密數(shù)據(jù):發(fā)送方使用自己的私鑰對數(shù)據(jù)進(jìn)行加密。
   - 使用公鑰解密數(shù)據(jù):接收方使用發(fā)送方的公鑰來解密并獲取原始數(shù)據(jù)。

<?php
 
 
 
// 待加密的數(shù)據(jù)
$data = "Hello, RSA!";
 
// 使用公鑰加密數(shù)據(jù)
openssl_public_encrypt($data, $encryptedWithPublicKey, $publicKey);
 
// 使用私鑰解密數(shù)據(jù)
openssl_private_decrypt($encryptedWithPublicKey, $decryptedWithPrivateKey, $privateKey);
 
// 使用私鑰加密數(shù)據(jù)
openssl_private_encrypt($data, $encryptedWithPrivateKey, $privateKey);
 
// 使用公鑰解密數(shù)據(jù)
openssl_public_decrypt($encryptedWithPrivateKey, $decryptedWithPublicKey, $publicKey);
 
// 輸出結(jié)果
echo "原始數(shù)據(jù): " . $data . "\n";
echo "公鑰加密,私鑰解密結(jié)果: " . $decryptedWithPrivateKey . "\n";
echo "私鑰加密,公鑰解密結(jié)果: " . $decryptedWithPublicKey . "\n";
?>

第四步、RSA簽名以及驗證簽名

 
    /**
     * 構(gòu)造簽名
     * @param string $dataString 被簽名數(shù)據(jù)
     * @return string
     */
    public function sign($dataString)
    {
      
        $signature = false;
        openssl_sign($dataString, $signature, $privKey);
        return base64_encode($signature);
    }
 
    /**
     * 驗證簽名
     * @param string $dataString 被簽名數(shù)據(jù)
     * @param string $signString 已經(jīng)簽名的字符串
     * @return number 1簽名正確 0簽名錯誤
     */
    public function verify($dataString, $signString)
    {
      
        $signature = base64_decode($signString);
        $flg = openssl_verify($dataString, $signature, $PubKey);
        return $flg;
     }

第五步、封裝完整代碼 

<?php
class  RSA{
    protected $publicKey;
    protected $privateKey;
    //$type  1長類型 2完整key  3文件內(nèi)完整key
    public function __construct($publicKey = '', $privateKey = '', $type=1){
        $this->setKey($publicKey, $privateKey, $type);
    }
 
    public function setKey($publicKey = null, $privateKey = null, $type=1)
    {
        if (!is_null($publicKey)) {
            $this->setupPubKey($publicKey, $type);
        }
        if (!is_null($privateKey)) {
            $this->setupPrivKey($privateKey, $type);
        }
    }
 
    private function setupPrivKey($privateKey, $type)
    {
        if (is_resource($this->privateKey)) {
            return true;
        }
 
        if ($type == 1) {
            $pem = chunk_split($privateKey, 64, "\n");
            $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n";
            $this->privateKey = openssl_pkey_get_private($pem);
        } elseif ($type == 2) {
            $this->privateKey = openssl_pkey_get_private($privateKey);
        } elseif ($type == 3) {
            $privateKeyString = file_get_contents($privateKey);
            $this->privateKey= openssl_pkey_get_private($privateKeyString);
        }
 
        return true;
    }
 
    private function setupPubKey($publicKey, $type=1)
    {
        if (is_resource($this->publicKey)) {
            return true;
        }
        if ($type == 1) {
            $pem = chunk_split($publicKey, 64, "\n");
            $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";
            $this->publicKey = openssl_pkey_get_public($pem);
        } elseif ($type == 2) {
            $this->publicKey= openssl_pkey_get_public($publicKey);
        } elseif ($type == 3) {
            $pubString = file_get_contents($publicKey);
            $this->publicKey= openssl_pkey_get_public($pubString);
        }
 
        return true;
    }
 
    public function privEncrypt($data)
    {
        if (!is_string($data) || empty($this->privateKey)) {
            return null;
        }
 
        $r = openssl_private_encrypt($data, $encrypted, $this->privateKey);
        if ($r === true) {
            return base64_encode($encrypted);
        }
        return null;
    }
 
    public function privDecrypt($encrypted)
    {
        if (!is_string($encrypted) || empty($this->privateKey)) {
            return null;
        }
 
        $encrypted = base64_decode($encrypted);
        $r = openssl_private_decrypt($encrypted, $decrypted, $this->privateKey);
        if ($r === true) {
            return $decrypted;
        }
        return null;
    }
 
    public function pubEncrypt($data)
    {
        if (!is_string($data) || empty($this->publicKey)) {
            return null;
        }
 
        $r = openssl_public_encrypt($data, $encrypted, $this->publicKey);
        if ($r === true) {
            return base64_encode($encrypted);
        }
        return null;
    }
 
    public function pubDecrypt($crypted)
    {
        if (!is_string($crypted) || empty($this->publicKey)) {
            return null;
        }
 
        $crypted = base64_decode($crypted);
        $r = openssl_public_decrypt($crypted, $decrypted, $this->publicKey);
        if ($r === true) {
            return $decrypted;
        }
        return null;
    }
    /**
     * 構(gòu)造簽名
     * @param string $dataString 被簽名數(shù)據(jù)
     * @return string
     */
    public function sign($dataString)
    {
        $signature = false;
        openssl_sign($dataString, $signature, $this->privateKey);
        return base64_encode($signature);
    }
 
    /**
     * 驗證簽名
     * @param string $dataString 被簽名數(shù)據(jù)
     * @param string $signString 已經(jīng)簽名的字符串
     * @return number 1簽名正確 0簽名錯誤
     */
    public function verify($dataString, $signString)
    {
 
        $signature = base64_decode($signString);
        $flg = openssl_verify($dataString, $signature, $this->publicKey);
        return $flg;
    }
 
    public function __destruct()
    {
        is_resource($this->privateKey) && @openssl_free_key($this->privateKey);
        is_resource($this->publicKey) && @openssl_free_key($this->publicKey);
    }
}
/*$publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKZ1mKTymRoGKnHiP1xAy4aiyt5r0BscCZnDAonCrMFZ4kBGriPNHxEaLr5lfBnMKw7k6i+2dsFPSEZooTvqtPUCAwEAAQ==';
$privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApnWYpPKZGgYqceI/XEDLhqLK3mvQGxwJmcMCicKswVniQEauI80fERouvmV8GcwrDuTqL7Z2wU9IRmihO+q09QIDAQABAkBunx3nGHXYjppsfn++7iyTd+I7+Agfy/0xWyB3rpEiGGgfemjcRFaeq5SC2vUNXsrEOY5gbUSQmFxH//Cym18NAiEA1z1cZx/Q9cbIjFPwp1a+K5CVFDXDcfbi/AQgAkVs0/cCIQDF+2fr23AoBslcOC4S0yAx94AbgxCntYuRqztxybsrcwIgMW86ZcT87TX2oaQ1xXk6vC68zqN6fBZEE7Wu1Fa1pAkCIElmOJP3qfAc/AAlj+dIwLHlqWgJwl3674CU9Bfui2bDAiEA0CKJpF8x7KANCcopEQC93PsbIztuML322LOfDV1Lw/k=';
$rsa = new RSA($publicKey, $privateKey, 1);*/
$publicKeyString = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1ffL+kUEedBLTzQrKU+
8oq9IZSUroxhmnWrXa1XMGtlbeVCHQNljujqwGuLELyk7i78cGczwCyGE2SVj9oI
tBzGn02fWZNCb3bHPv6ofliTvqYcZOFaFTWB+tTKuOmopCk/bgQVe7HC6+74s/3x
Q4tM1jVbNPYSY11++DLjEQ8KaA3pNJwoFTxER3GVEgmfhi5xUTTaBa5ZOIaNfsFr
0fGzvGbmRpqoIor6MlSxXbMO4k2pMzB7YJYYr7zRC28DoeJCj5XnXkq4XPIJzo8/
g79163dp0y9m7cDn4NfRDdBsFeHy6n+hKps6hSVf1z1ZtQtlfk0mRE/EchubDcuH
+QIDAQAB
-----END PUBLIC KEY-----";
 
$privateKeyString = "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnV98v6RQR50Et
PNCspT7yir0hlJSujGGadatdrVcwa2Vt5UIdA2WO6OrAa4sQvKTuLvxwZzPALIYT
ZJWP2gi0HMafTZ9Zk0Jvdsc+/qh+WJO+phxk4VoVNYH61Mq46aikKT9uBBV7scLr
7viz/fFDi0zWNVs09hJjXX74MuMRDwpoDek0nCgVPERHcZUSCZ+GLnFRNNoFrlk4
ho1+wWvR8bO8ZuZGmqgiivoyVLFdsw7iTakzMHtglhivvNELbwOh4kKPledeSrhc
8gnOjz+Dv3Xrd2nTL2btwOfg19EN0GwV4fLqf6EqmzqFJV/XPVm1C2V+TSZET8Ry
G5sNy4f5AgMBAAECggEAd5rFiV/EmXs4yVVzLEI7OG1S+oJQtmTdieFaZuzyqUfJ
Sf+W/lekKb1ts7PpxD+gfiCVCt2oTk1EUu4MO7GxkNIUYF3Ba+tli3dQt0SaNxum
FZhyKOQsV4ZT7WxTrFBM2XAlxsMie7M0xx6ZIUR6QTV56IxgMP1DbUOw8UKlqlV2
p3Vdckfjt2pWyLqM2yZUoC3+AjfqpJus/dpyIRGtLd8rLoFCrPgM2naEWxYCAeyI
CpHgzYCCAbWyXZOkFOWIFPm53ZDbdZpupzKjS29rYGjiZ7St6sdCegGoZ+aYeUwA
Bb1RKZjkBeLrxbuIZHlSbrBO12yE8gZ+VPzgSy1CVQKBgQDWHjj/7Yur/m+d9yJ0
9S14TK5KX3EX2cl46It8FMJEKTk1IhgYB6Dmk10pDrV2glJ3zLfwYeu82p9Zgswh
F34mU3o67medJ3OJP+/qHYvEm4WOKw1973v8GEQhqTvr7yPYVC/cRoyN49FKbKfC
sF7Scw7EaTObxtWMDJyaa+JDPwKBgQDIE3DhYzx1YahEHktYgVw9OaDdykzYZV2J
KO8rkAwS0oXY6yi2J1nCrq3N5Ro7PAMCESRabgAps7n2GazLNfrtG/DcH87M0kYz
AEwo1DvI3XVIAjiPmZXBeU2xp1o40OOxZXeHP3VzuU2ydyR6yp3Y2WCClmgf3Vuz
O1uGk2A+xwKBgCZzbPcAuJldarvqWoS4Vr8Ivi/a7dtDn/uXfxz8OVq2MHDLO5pt
HEbr5cnuu0WZ56dd2xZO71+Nvxn69B9pMZ0+Vm/oyjCdmhDmq3XWcngPGa/LKXQZ
IqHF1c5ZrsoSutQpYiLjhHAinj4IPyQmOhD+2oMJBVyPG2A4D5Nnlk1PAoGBAIXH
ognC3hEqzGVH0F+Ml82EdBD5DOsA1Es7KLj7J2eKht7lVqJ9q2ImhKaQkzqaRPSj
26fvt4Iq36QzxLtYC8FxllrJlfCUhUXi5AnE53jGw33zpjg2nNDyOEYavZQR8L2U
OBkiEHnhpJc5XRYR1vvBVevbgCIWVBODFA7nCkrPAoGAK2oIQ5SLu5OfAB4qcN6v
vHERc8JXGZWL/o2Z/4t0OX1X6NwDdAl87LCyQ6ab3dqmgemtjdd2Z9DDn2m9oPtO
yuNvlxYNiCqgsNyUCwy6Q1yy1fOvhiUJF8rkq4UTSeQ8gSrf8hf3ajHmzhA1r5B7
Y5MUPUHIS6ckWMTF+pAXAgQ=
-----END PRIVATE KEY-----";
//$rsa = new RSA($publicKeyString, $privateKeyString, 2);
$rsa = new RSA("public.pem", "private.pem", 3);
echo "私鑰加密 公鑰解密";
echo "<br/>";
$s = $rsa->privEncrypt("abc");
echo $rsa->pubDecrypt($s);
echo "<br/>";
echo "公鑰加密,私鑰解密";
echo "<br/>";
$d = $rsa->pubEncrypt("dfg");
echo $rsa->privDecrypt($d);
echo "<br/>";
echo "簽名";
echo "<br/>";
$str="a=1&b=2";
$sign=$rsa->sign($str);
echo $sign;
$res6=$rsa->verify($str,$sign);
echo "<br/>";
echo "驗證簽結(jié)果:".$res6;
 
 

以上就是PHP三種方式讀取RSA密鑰加解密、簽名驗簽完整教程的詳細(xì)內(nèi)容,更多關(guān)于PHP RSA密鑰的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • php官方微信接口大全(微信支付、微信紅包、微信搖一搖、微信小店)

    php官方微信接口大全(微信支付、微信紅包、微信搖一搖、微信小店)

    這篇文章主要介紹了php官方微信接口大全,包括微信支付、微信紅包、微信搖一搖、微信小店,感興趣的小伙伴們可以參考一下
    2015-12-12
  • php Illegal string offset 'name'問題及解決

    php Illegal string offset 'name&apo

    這篇文章主要介紹了php Illegal string offset 'name'問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • PHP聚合式迭代器接口IteratorAggregate用法分析

    PHP聚合式迭代器接口IteratorAggregate用法分析

    這篇文章主要介紹了PHP聚合式迭代器接口IteratorAggregate用法,結(jié)合實例形式分析了聚合式迭代器接口IteratorAggregate的概念、功能、定義及使用方法,需要的朋友可以參考下
    2017-12-12
  • PHP中根據(jù)IP地址判斷城市實現(xiàn)城市切換或跳轉(zhuǎn)代碼

    PHP中根據(jù)IP地址判斷城市實現(xiàn)城市切換或跳轉(zhuǎn)代碼

    先要獲取ip地址相當(dāng)簡單,下面先介紹兩種獲取IP地址的代碼,后面需要利用QQIP庫來查找當(dāng)前IP是屬于那個IP段然后得出城市字段并返回
    2012-09-09
  • phpMyAdmin 安裝及問題總結(jié)

    phpMyAdmin 安裝及問題總結(jié)

    今天調(diào)試PHP數(shù)據(jù)庫Mysql,在單位的電腦上安裝phpMyAdmin數(shù)據(jù)庫管理軟件,本來是很簡單的事,卻出現(xiàn)了幾個問題
    2009-05-05
  • 詳解php中反射的應(yīng)用

    詳解php中反射的應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了php中反射的應(yīng)用,何為反射,反射的作用是什么,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 最新評論