Heim > Backend-Entwicklung > PHP-Problem > So erreichen Sie nicht doppelte eindeutige Werte in PHP

So erreichen Sie nicht doppelte eindeutige Werte in PHP

藏色散人
Freigeben: 2023-03-17 11:12:01
Original
1227 Leute haben es durchsucht

So implementieren Sie sich nicht wiederholende eindeutige Werte in PHP: 1. Sie können die Funktion „uniqid()“ verwenden, um einen sich nicht wiederholenden eindeutigen Bezeichner zu generieren. 2. Sie können die Funktion „session_create_id()“ zum Generieren verwenden eine eindeutige Kennung; 3. Sie können die Funktion „session_create_id()“ verwenden, um eine eindeutige Kennung zu generieren.

So erreichen Sie nicht doppelte eindeutige Werte in PHP

Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 8.1, Dell G3-Computer.

Wie erreicht man in PHP nicht doppelte eindeutige Werte?

PHP generiert eine eindeutige eindeutige Kennung session_create_id()

PHP-uniqid()-Funktion kann verwendet werden, um eine eindeutige eindeutige Kennung basierend auf dem aktuellen Zeitstempel auf Mikrosekundenebene zu generieren. Bei hoher Parallelität oder extrem kurzen Intervallen (z. B. Schleifencode) wird eine große Menge doppelter Daten angezeigt. Dies wird auch dann wiederholt, wenn der zweite Parameter verwendet wird.

Verwenden Sie die Funktion session_create_id(), um eine eindeutige Kennung zu generieren. Nach tatsächlichen Tests wurde festgestellt, dass es keine Duplikate gibt, selbst wenn session_create_id() zyklisch 100 Millionen Mal aufgerufen wird.

php session_create_id() ist eine neue Funktion in PHP 7.1. Sie wird zum Generieren einer Sitzungs-ID verwendet. Sie kann in niedrigeren Versionen nicht verwendet werden.

Die PHP-Funktion uniqid() kann verwendet werden, um eine nicht doppelte eindeutige Kennung basierend auf dem aktuellen Zeitstempel in Mikrosekunden zu generieren. Bei hoher Parallelität oder extrem kurzen Intervallen (z. B. Schleifencode) wird eine große Menge doppelter Daten angezeigt. Dies wird auch dann wiederholt, wenn der zweite Parameter verwendet wird.

Verwenden Sie die Funktion session_create_id(), um eine eindeutige Kennung zu generieren. Nach tatsächlichen Tests wurde festgestellt, dass es keine Duplikate gibt, selbst wenn session_create_id() zyklisch 100 Millionen Mal aufgerufen wird.

php session_create_id() ist eine neue Funktion in PHP 7.1. Sie wird zum Generieren einer Sitzungs-ID verwendet. Sie kann in niedrigeren Versionen nicht verwendet werden.

<?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(&#39;YmdHis&#39;));
        // 使用uniqid()方法创建唯一id
        $request_id = strtoupper(md5(uniqid($prefix, true)));
        // 格式化请求id
        return self::format($request_id);
    }
 
    public static function generate(){
        // 创建前缀
        $prefix = self::create_guid(date(&#39;YmdHis&#39;));
        // 使用uniqid()方法创建唯一id
        $request_id = strtoupper(md5(uniqid($prefix, true)));
        // 格式化请求id
        return self::format($request_id);
    }
 
    public static function create_guid($namespace = &#39;&#39;) {  
        static $guid = &#39;&#39;;
        $uid = uniqid("", true);
        $data = $namespace;
        $data .= $_SERVER[&#39;REQUEST_TIME&#39;];
        $data .= $_SERVER[&#39;HTTP_USER_AGENT&#39;];
        $data .= isset($_SERVER[&#39;LOCAL_ADDR&#39;])?$_SERVER[&#39;LOCAL_ADDR&#39;]:$_SERVER[&#39;SERVER_ADDR&#39;];
        $data .= isset($_SERVER[&#39;LOCAL_PORT&#39;])?$_SERVER[&#39;LOCAL_PORT&#39;]:$_SERVER[&#39;SERVER_PORT&#39;];
        $data .= $_SERVER[&#39;REMOTE_ADDR&#39;];
        $data .= $_SERVER[&#39;REMOTE_PORT&#39;];
        $hash = strtoupper(hash(&#39;ripemd128&#39;, $uid . $guid . md5($data)));
        $guid = &#39;{&#39; . 
          substr($hash, 0, 8) .
          &#39;-&#39; .
          substr($hash, 8, 4) .
          &#39;-&#39; .
          substr($hash, 12, 4) .
          &#39;-&#39; .
          substr($hash, 16, 4) .
          &#39;-&#39; .
          substr($hash, 20, 12) .
          &#39;}&#39;;
        return $guid;
    }
 
    /**
    * 格式化请求id
    * @param String $request_id 请求id
    * @param Array $format  格式
    * @return String
    */
    private static function format($request_id, $format=&#39;8,4,4,4,12&#39;){
        $tmp = array();
        $offset = 0;
        $cut = explode(&#39;,&#39;, $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(&#39;-&#39;, $tmp);
    }
} // class end
 
// 生成10个请求id
for($i=0; $i<10; $i++){
 echo RequestID::generate().PHP_EOL.&#39;<br>&#39;;
}
Nach dem Login kopieren

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo erreichen Sie nicht doppelte eindeutige Werte in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage