Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk mencapai nilai unik bukan pendua dalam php
Cara melaksanakan nilai unik unik dalam PHP: 1. Anda boleh menggunakan fungsi "uniqid()" untuk menjana pengecam unik yang tidak berulang; 2. Anda boleh menggunakan fungsi "session_create_id()". untuk menjana pengecam unik; 3. Pengecam unik boleh dijana menggunakan fungsi "session_create_id()".
Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 8.1, komputer Dell G3.
Bagaimana untuk mencapai nilai unik bukan pendua dalam PHP?
PHP menjana pengecam unik unik session_create_id()
Fungsi PHP uniqid() boleh digunakan untuk menjana pengecam unik unik berdasarkan cap masa semasa peringkat mikrosaat. Dalam kes konkurensi yang tinggi atau selang yang sangat singkat (seperti kod gelung), sejumlah besar data pendua akan muncul. Ini diulang walaupun hujah kedua digunakan.
Gunakan fungsi session_create_id() untuk menjana pengecam unik Selepas ujian sebenar, didapati bahawa walaupun session_create_id() dipanggil secara kitaran 100 juta kali, tiada penduaan.
php session_create_id() ialah fungsi baharu dalam PHP 7.1 Ia digunakan untuk menjana id sesi. Ia tidak boleh digunakan dalam versi yang lebih rendah.
Fungsi PHP uniqid() boleh digunakan untuk menjana pengecam unik unik berdasarkan cap masa semasa dalam mikrosaat. Dalam kes konkurensi yang tinggi atau selang yang sangat singkat (seperti kod gelung), sejumlah besar data pendua akan muncul. Ini diulang walaupun hujah kedua digunakan.
Gunakan fungsi session_create_id() untuk menjana pengecam unik Selepas ujian sebenar, didapati bahawa walaupun session_create_id() dipanggil secara kitaran 100 juta kali, tiada penduaan.
php session_create_id() ialah fungsi baharu dalam PHP 7.1 Ia digunakan untuk menjana id sesi. Ia tidak boleh digunakan dalam versi yang lebih rendah.
<?php /** * PHP生成唯一RequestID类 * Version: 1.0 */ class RequestID{ // class start /** * 生成唯一请求id * session_create_id 需要php7.1以上版本 * @return String */ public static function generateV7(){ // 使用session_create_id()方法创建前缀 $prefix = session_create_id(date('YmdHis')); // 使用uniqid()方法创建唯一id $request_id = strtoupper(md5(uniqid($prefix, true))); // 格式化请求id return self::format($request_id); } public static function generate(){ // 创建前缀 $prefix = self::create_guid(date('YmdHis')); // 使用uniqid()方法创建唯一id $request_id = strtoupper(md5(uniqid($prefix, true))); // 格式化请求id return self::format($request_id); } public static function create_guid($namespace = '') { static $guid = ''; $uid = uniqid("", true); $data = $namespace; $data .= $_SERVER['REQUEST_TIME']; $data .= $_SERVER['HTTP_USER_AGENT']; $data .= isset($_SERVER['LOCAL_ADDR'])?$_SERVER['LOCAL_ADDR']:$_SERVER['SERVER_ADDR']; $data .= isset($_SERVER['LOCAL_PORT'])?$_SERVER['LOCAL_PORT']:$_SERVER['SERVER_PORT']; $data .= $_SERVER['REMOTE_ADDR']; $data .= $_SERVER['REMOTE_PORT']; $hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data))); $guid = '{' . substr($hash, 0, 8) . '-' . substr($hash, 8, 4) . '-' . substr($hash, 12, 4) . '-' . substr($hash, 16, 4) . '-' . substr($hash, 20, 12) . '}'; return $guid; } /** * 格式化请求id * @param String $request_id 请求id * @param Array $format 格式 * @return String */ private static function format($request_id, $format='8,4,4,4,12'){ $tmp = array(); $offset = 0; $cut = explode(',', $format); // 根据设定格式化 if($cut){ foreach($cut as $v){ $tmp[] = substr($request_id, $offset, $v); $offset += $v; } } // 加入剩余部分 if($offset<strlen($request_id)){ $tmp[] = substr($request_id, $offset); } return implode('-', $tmp); } } // class end // 生成10个请求id for($i=0; $i<10; $i++){ echo RequestID::generate().PHP_EOL.'<br>'; }
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Bagaimana untuk mencapai nilai unik bukan pendua dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!