Heim Backend-Entwicklung PHP-Problem So laden Sie Bilder hoch und ändern Namen in PHP

So laden Sie Bilder hoch und ändern Namen in PHP

Sep 16, 2021 am 10:46 AM
php 图片

So laden Sie Bilder hoch und ändern Namen in PHP: 1. Benennen Sie hochgeladene Bilder über die GUID-Methode um. 3. Verwenden Sie die Methode uniqid. 4. Verwenden Sie die Methode fast_uuid.

So laden Sie Bilder hoch und ändern Namen in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, Dell G3-Computer

Wie lade ich Bilder hoch und ändere Namen mit PHP?

6 Beispiele für Methoden zum Umbenennen hochgeladener Bilder in PHP

1. Anwendbare Szenarien:
Sie können die von der Datenbank zurückgegebene Auto-Inkrement-Nummer nicht zum Umbenennen hochgeladener Bilder verwenden.
Dies wird durch den Prozess des Hochladens von Bildern oder Dateien bestimmt.
Der allgemeine Prozess zum Hochladen von Bildern besteht darin, das Bild zunächst auf den Server hochzuladen, es umzubenennen und es dann in die Datenbank einzufügen.
Mit anderen Worten, die sich selbst erhöhende ID, die in der Datenbank sehr einfach zu erhalten ist, kann nicht zum Umbenennen hochgeladener Bilder verwendet werden, um doppelte Dateinamen zu vermeiden.
Die Methode zum Abrufen der maximalen ID aus der Datenbank und Hinzufügen von 1 wird verwendet Erhöhen Sie die Anzahl der Verbindungen, die nicht für Situationen mit hoher Parallelität und großem Datenvolumen geeignet sind.
2. Herkömmliche Lösung:
1, Guid: 32-stellige Hexadezimalzahl.
Format: Das Format der GUID ist „xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx“, wobei jedes x eine 32-stellige Hexadezimalzahl im Bereich von 0-9 oder a-f ist. Beispiel: 6F9619FF-8B86-D011-B42D-00C04FC964FF ist ein gültiger GUID-Wert.
Vorteile: Fast keine Duplizierung;
Nachteile: Das Umbenennen hochgeladener Bilder dauert immer noch zu lange.
Verwendung:

Der Code lautet wie folgt:

/*
    com_create_guid()是php5版本支持的功能,对于不支持的版本,可以自己进行定义;
*/
function guid(){
   if (function_exists('com_create_guid')){
       return com_create_guid();
   }else{
       mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
       echo(mt_rand());
       $charid = strtoupper(md5(uniqid(rand(), true)));
       $hyphen = chr(45);// "-"
       $uuid = chr(123)// "{"
               .substr($charid, 0, 8).$hyphen
               .substr($charid, 8, 4).$hyphen
               .substr($charid,12, 4).$hyphen
               .substr($charid,16, 4).$hyphen
               .substr($charid,20,12)
               .chr(125);// "}"
       return $uuid;
   }
}
Nach dem Login kopieren


2, MD5:
Dasselbe wie guid, es wird eine 32-stellige Hexadezimalzahl ausgegeben. Der Unterschied besteht darin, dass guid zufällig generiert wird und MD5 sein muss basierend auf den Eingabedaten generiert.
Beispiel:

Der Code lautet wie folgt:

<?php
$str = "Hello";
echo md5($str);
?>
Nach dem Login kopieren

Ausgabe

8b1a9953c4611296a827abf8c47804d7
Nach dem Login kopieren


Vorteile: Der Ausgabewert kann basierend auf den eingegebenen Seed-Daten gesteuert werden und nicht wiederholt werden geschützt durch md5. Große Verwirrung stiften.
Nachteile: 32-Bit-Zeichen sind zu lang; es müssen nicht duplizierte Seed-Daten bereitgestellt werden.
Verwendung: Hohe Parallelität, bei Sekunden als Seed-Daten kommt es immer noch zu Duplikaten.

Der Code lautet wie folgt:

<?php
/*
*结合time()函数使用,以1970年到当前时间的秒数作为种子数。
*/
$str=time();
echo md5($str);
?>
Nach dem Login kopieren

3, uniqid(): Gibt eine 13- oder 23-stellige Zeichenfolge zurück.
Für unsere Zwecke ist uniqid() wie eine verbesserte Version von md5(), insbesondere können wir die differenzielle Identifizierung verwenden als String-Präfix kann die Wahrscheinlichkeit einer wiederholten Benennung verringern.
Für extreme Situationen wie nicht hohe Parallelität wird die Verwendung dieser Funktion empfohlen, die bereits allgemeine Anforderungen erfüllen kann.
Details,
Definition: Die Funktion uniqid() generiert eine eindeutige ID basierend auf der aktuellen Zeit in Mikrosekunden.
Verwendung: uniqid(prefix,more_entropy)
Erklärung: Präfix kann der Ausgabezeichenfolge ein Präfix hinzufügen. Das Beispiel lautet wie folgt: Wenn der Parameter „more_entropy“ wahr ist, wird eine 23-Bit-Zeichenfolge ausgegeben.

Der Code lautet wie folgt:

<?php
var_dump(uniqid());
var_dump(uniqid("a"));
?>
Nach dem Login kopieren

Das Ausgabeergebnis ist:

string(13) "51734aa562254" string(14) "a51734aa562257"
Nach dem Login kopieren

Vorteile: 13-Bit-Stringlänge ist eine akzeptable Dateinamenslänge; Präfixe können hinzugefügt werden, und das Ergebnis enthält Datenverwirrung, die vermieden werden kann Rückreferenzierung der Originaldaten.
Nachteile: Ähnlich wie bei MD5, hohe Parallelität, Verwendung von Sekunden als Startdaten, es kommt immer noch zu Duplikaten.
3. Aktualisierter Versionsplan:
1, fast_uuid: gibt eine 17-stellige Zahl zurück
Es ist ein bisschen wie eine unvollständige angepasste Version von uniqid(), die in dieser Funktion erscheint sehr aufschlussreich.
Die in time() und uniqid() verwendete Standardzeit wird ab 1970 berechnet und die Länge beträgt zehn Ziffern (1366512439). Die Verwendung der „Startzeit der Startnummer“ kann diesen Wert reduzieren, da wir ihn tatsächlich benötigen. Es ist nur ein Wert das kann automatisch wachsen.
Nachdem die Startzeit individuell angepasst wurde, kann sie neben der Verkürzung der Länge auch zu Verwirrung führen.

Der Code lautet wie folgt:

/*
* 参数 suffix_len指定 生成的 ID 值附加多少位随机数,默认值为 3。
* 感谢“Ivan Tan|谭俊青 DrinChing (at) Gmail.com”提供的算法。
* @param int suffix_len
* @return string
*/
function fast_uuid($suffix_len=3){
    //! 计算种子数的开始时间
    $being_timestamp = strtotime(&#39;2013-3-21&#39;);
    $time = explode(&#39; &#39;, microtime());
    $id = ($time[1] - $being_timestamp) . sprintf(&#39;%06u&#39;, substr($time[0], 2, 6));
    if ($suffix_len > 0)
    {
        $id .= substr(sprintf(&#39;%010u&#39;, mt_rand()), 0, $suffix_len);
    }
    return $id;
}
Nach dem Login kopieren

output,

29832412631099013
Nach dem Login kopieren

2, time()+Zufallszahl:
Die Verwendung von Zufallszahlen ist bereits im obigen Beispiel aufgetaucht, um mehrere Anfragen zu lösen, die in auftreten eine Sekunde. Zwei Funktionen werden wie folgt bereitgestellt:

Der Code lautet wie folgt:

<?php
function random($length) {
    $hash = &#39;&#39;;
    $chars = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz&#39;;
    $max = strlen($chars) - 1;
    PHP_VERSION < &#39;4.2.0&#39; && mt_srand((double)microtime() * 1000000);
    for($i = 0; $i < $length; $i++) {
        $hash .= $chars[mt_rand(0, $max)];
    }
    return $hash;
}
function random2($length, $numeric = 0) {
    PHP_VERSION < &#39;4.2.0&#39; ? mt_srand((double)microtime() * 1000000) : mt_srand();
    $seed = base_convert(md5(print_r($_SERVER, 1).microtime()), 16, $numeric ? 10 : 35);
    $seed = $numeric ? (str_replace(&#39;0&#39;, &#39;&#39;, $seed).&#39;012340567890&#39;) : ($seed.&#39;zZ&#39;.strtoupper($seed));
    $hash = &#39;&#39;;
    $max = strlen($seed) - 1;
    for($i = 0; $i < $length; $i++) {
        $hash .= $seed[mt_rand(0, $max)];
    }
    return $hash;
}
?>
Nach dem Login kopieren

4 Endgültige Lösung:
Idee: Benutzer-ID+Sekunden+Zufallszahl. Darunter wird „Benutzer-ID+Sekunde“ von Dezimalzahl in 64 umgewandelt, wodurch sich die Anzahl der Ziffern verringert Der in Dezimalzahl umgewandelte Wert von „ZZZ“ entspricht „262143“ „;
Sekunden: Legen Sie Ihren eigenen Zeitstartpunkt fest.
$less=time()-strtotime('2012-4-21′); Konvertieren in hexadezimal „1SpRe“, 5 Ziffern
$less=time()-strtotime('2013-3-21′); hexadezimal „_jHY“; 4-stellige Zufallszahl: Verwenden Sie random(3), um eine 3-stellige Zufallszahl zu generieren.
Endergebnis: 4-stellige Benutzer-ID + 4-stellige Sekunde + 3-stellige Zufallszahl = 11-stellige Zeichenfolge . Obwohl die Ergebnisse denen von uniqid() ähneln, ist die Robustheit verbessert.

5. Dezimal-Hexadezimal-Konvertierungsalgorithmus:

Algorithmus 1:
Der Code lautet wie folgt:

const KeyCode = &#39;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$&#39;;
    /**
     * 将64进制的数字字符串转为10进制的数字字符串
     * @param $m string 64进制的数字字符串
     * @param $len integer 返回字符串长度,如果长度不够用0填充,0为不填充
     * @return string
     * @author 野马
     */
    function hex64to10($m, $len = 0) {
        $m = (string)$m;
        $hex2 = &#39;&#39;;
        $Code = KeyCode;
        for($i = 0, $l = strlen($Code); $i < $l; $i++) {
            $KeyCode[] = $Code[$i];
        }
        $KeyCode = array_flip($KeyCode);
        for($i = 0, $l = strlen($m); $i < $l; $i++) {
            $one = $m[$i];
            $hex2 .= str_pad(decbin($KeyCode[$one]), 6, &#39;0&#39;, STR_PAD_LEFT);
        }
        $return = bindec($hex2);
        if($len) {
            $clen = strlen($return);
            if($clen >= $len) {
                return $return;
            }
            else {
                return str_pad($return, $len, &#39;0&#39;, STR_PAD_LEFT);
            }
        }
        return $return;
    }
    /**
     * 将10进制的数字字符串转为64进制的数字字符串
     * @param $m string 10进制的数字字符串
     * @param $len integer 返回字符串长度,如果长度不够用0填充,0为不填充
     * @return string
     * @author 野马
     */
    function hex10to64($m, $len = 0) {
        $KeyCode = KeyCode;
        $hex2 = decbin($m);
        $hex2 = str_rsplit($hex2, 6);
        $hex64 = array();
        foreach($hex2 as $one) {
            $t = bindec($one);
            $hex64[] = $KeyCode[$t];
        }
        $return = preg_replace(&#39;/^0*/&#39;, &#39;&#39;, implode(&#39;&#39;, $hex64));
        if($len) {
            $clen = strlen($return);
            if($clen >= $len) {
                return $return;
            }
            else {
                return str_pad($return, $len, &#39;0&#39;, STR_PAD_LEFT);
            }
        }
        return $return;
    }
    /**
     * 将16进制的数字字符串转为64进制的数字字符串
     * @param $m string 16进制的数字字符串
     * @param $len integer 返回字符串长度,如果长度不够用0填充,0为不填充
     * @return string
     * @author 野马
     */
    function hex16to64($m, $len = 0) {
        $KeyCode = KeyCode;
        $hex2 = array();
        for($i = 0, $j = strlen($m); $i < $j; ++$i) {
            $hex2[] = str_pad(base_convert($m[$i], 16, 2), 4, &#39;0&#39;, STR_PAD_LEFT);
        }
        $hex2 = implode(&#39;&#39;, $hex2);
        $hex2 = str_rsplit($hex2, 6);
        foreach($hex2 as $one) {
            $hex64[] = $KeyCode[bindec($one)];
        }
        $return = preg_replace(&#39;/^0*/&#39;, &#39;&#39;, implode(&#39;&#39;, $hex64));
        if($len) {
            $clen = strlen($return);
            if($clen >= $len) {
                return $return;
            }
            else {
                return str_pad($return, $len, &#39;0&#39;, STR_PAD_LEFT);
            }
        }
        return $return;
    }
    /**
     * 功能和PHP原生函数str_split接近,只是从尾部开始计数切割
     * @param $str string 需要切割的字符串
     * @param $len integer 每段字符串的长度
     * @return array
     * @author 野马
     */
    function str_rsplit($str, $len = 1) {
        if($str == null || $str == false || $str == &#39;&#39;) return false;
        $strlen = strlen($str);
        if($strlen <= $len) return array($str);
        $headlen = $strlen % $len;
        if($headlen == 0) {
            return str_split($str, $len);
        }
        $return = array(substr($str, 0, $headlen));
        return array_merge($return, str_split(substr($str, $headlen), $len));
    }
$a=idate("U");
echo "\r\n<br />e:" . hex10to64($a);
echo "\r\n<br />e:" . hex64to10(hex10to64($a));
Nach dem Login kopieren
Algorithmus 2:

Der Code lautet wie folgt:

function dec2s4($dec) {
    $base = &#39;0123456789_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;;
    $result = &#39;&#39;;
    do {
        $result = $base[$dec % 64] . $result;
        $dec = intval($dec / 64);
    } while ($dec != 0);
    return $result;
}
function  s42dec($sixty_four) {
    $base_map = array ( &#39;0&#39; => 0,    &#39;1&#39; => 1,    &#39;2&#39; => 2,    &#39;3&#39; => 3,    &#39;4&#39; => 4,    &#39;5&#39; => 5,    &#39;6&#39; => 6,    &#39;7&#39; => 7,    &#39;8&#39; => 8,    &#39;9&#39; => 9,    &#39;_&#39; => 10,    &#39;$&#39; => 11,    &#39;a&#39; => 12,    &#39;b&#39; => 13,    &#39;c&#39; => 14,    &#39;d&#39; => 15,    &#39;e&#39; => 16,    &#39;f&#39; => 17,    &#39;g&#39; => 18,    &#39;h&#39; => 19,    &#39;i&#39; => 20,    &#39;j&#39; => 21,    &#39;k&#39; => 22,    &#39;l&#39; => 23,    &#39;m&#39; => 24,    &#39;n&#39; => 25,    &#39;o&#39; => 26,    &#39;p&#39; => 27,    &#39;q&#39; => 28,    &#39;r&#39; => 29,    &#39;s&#39; => 30,    &#39;t&#39; => 31,    &#39;u&#39; => 32,    &#39;v&#39; => 33,    &#39;w&#39; => 34,    &#39;x&#39; => 35,    &#39;y&#39; => 36,    &#39;z&#39; => 37,    &#39;A&#39; => 38,    &#39;B&#39; => 39,    &#39;C&#39; => 40,    &#39;D&#39; => 41,    &#39;E&#39; => 42,    &#39;F&#39; => 43,    &#39;G&#39; => 44,    &#39;H&#39; => 45,    &#39;I&#39; => 46,    &#39;J&#39; => 47,    &#39;K&#39; => 48,    &#39;L&#39; => 49,    &#39;M&#39; => 50,    &#39;N&#39; => 51,    &#39;O&#39; => 52,    &#39;P&#39; => 53,    &#39;Q&#39; => 54,    &#39;R&#39; => 55,    &#39;S&#39; => 56,    &#39;T&#39; => 57,    &#39;U&#39; => 58,    &#39;V&#39; => 59,    &#39;W&#39; => 60,    &#39;X&#39; => 61,    &#39;Y&#39; => 62,    &#39;Z&#39; => 63,  );
    $result = 0;
    $len = strlen($sixty_four);
    for ($n = 0; $n < $len; $n++) {
        $result *= 64;
        $result += $base_map[$sixty_four{$n}];
    }
    return $result;
}
$a=idate("U");
var_dump(dec2s4($a));
var_dump(s42dec(dec2s4($a)));
Nach dem Login kopieren

Algorithmus-Effizienztest:

Der Code ist wie folgt:

$strarr = array();
$time1 = microtime(true);
for($i = 0; $i < 10000; ++$i) {
     $str = idate("U")+$i;
     $strarr[] = "{$i}->$str\r\n<br>";
 }
 $time2 = microtime(true);
 $time3 = $time2 - $time1;
 $time1 = microtime(true);
 for($i = 0; $i < 10000; ++$i) {
     $str = dec2s4(idate("U")+$i);
    $strarr[] = "{$i}->$str\r\n<br>";
}
$time2 = microtime(true);
echo "\r\n<br />运行10000次用时(秒):" . ($time2 - $time1 - $time3);
Nach dem Login kopieren

测试结果
算法1:0.1687250137329
算法2:0.044965028762817
结论:算法1虽然效率上差一些,但是可以把md5生成的16进制转化为64进制,能够使用在必须使用md5的环境下缩短字符串。
六、总结
本文涉及了上传图片重命名可以能使用的几种方法,其中关键点是使用10进制转换为64进制来进行字符串的缩减。
例如,使用fast_uuid生成的17位数字,转换为64进制仅有7位字符;
具体使用,可以根据自身情况灵活使用,希望对大家有所帮助。

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonSo laden Sie Bilder hoch und ändern Namen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles