PHP_PHP チュートリアルに基づいてアップロードされた画像の名前を変更するための 6 つのソリューションの詳細な紹介
1. 該当するシナリオ: データベースから返された自己増加する番号を使用して、アップロードされた画像の名前を変更することはできません。
これは、画像またはファイルをアップロードするプロセスによって決まります。
一般的な画像アップロード プロセスでは、まず画像をサーバーにアップロードし、名前を変更してからデータベースに挿入します。
つまり、データベース内で非常に簡単に取得できる自己増加IDは、ファイル名の重複を避けるためにアップロードされた写真の名前を変更するのに使用できません
データベースから最大のIDを取得して1を加算する方法が使用されます。データベースを増やす 接続数は高い同時実行性と大量のデータには適していません
2番目の通常プラン:
1、guid: 32 文字の 16 進数。
形式: GUID の形式は「xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx」です。各 x は、0 ~ 9 または a ~ f の範囲の 32 桁の 16 進数です。たとえば、6F9619FF-8B86-D011-B42D-00C04FC964FF は有効な GUID 値です。
長所: 重複はほとんどありません。
短所: アップロードされた写真の名前を変更するにはまだ時間がかかります。
使用法:
/*
com_create_guid() は、php5 バージョンでサポートされている関数です。サポートされていないバージョンの場合は、自分で定義できます。
function guid() {
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//php 4.2.0 以降ではオプション.
echo(m t_rand ());
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123 )// "{"
.substr($charid, 0, 8).$hyphen
. .substr($charid,16 , 4).$hyphen
.substr($charid,20,12)
.chr( 125);// "}"
guid と同じ 32 文字の 16 進数を出力する点が異なり、md5 は入力データに基づいて生成される必要があります。
例、
コードをコピーします
コードは次のとおりです:
$str = "Hello";echo md5($str);?>出力、
コードをコピーします
コードは次のとおりです:
8b1a9953c4611296a827abf8c47804d7
コードをコピーします
コードは次のとおりです:
/** time() 関数と組み合わせて使用され、1970 年から現在時刻までの秒数を使用します。シード番号。 */$str=time();echo md5($str);
3, uniqid(): 13 桁または 23 桁の文字列を返します。
特に、名前が重複する可能性を減らすために文字列プレフィックスとして差分識別子を使用できるため、uniqid() は md5() の改良版のようなものです。
同時実行性が高くないなどの極端な状況では、すでに一般的なニーズを満たすことができるこの関数を使用することをお勧めします。
詳細、
定義: uniqid() 関数は、マイクロ秒単位の現在時刻に基づいて一意の ID を生成します。
使用法: uniqid(prefix,more_entropy)
説明: prefix は出力文字列にプレフィックスを追加できます。 more_entropy パラメーターが true の場合、23 ビットの文字列が出力されます。
コードをコピーします
コードは次のとおりです:
var_dump(uniqid());var_dump(uniqid("a"));?>
出力結果は次のとおりです:
string(13) "51734aa562254" string(14) "a51734aa562257"
利点: 13桁の文字列の長さは許容可能なファイル名の長さのプレフィックスを追加でき、結果にはデータの難読化が含まれるため、元のデータの逆推論を回避できます。
欠点: md5 と同様、同時実行性が高く、シード データとして秒を使用するため、やはり重複が発生します。
3. アップグレードバージョンの計画:
1、fast_uuid: 17 桁を返します。
これは、uniqid() の不完全なカスタマイズ版に似ています。この関数に登場する「シード番号開始時間」の概念は非常に分かりやすいです。
time() と uniqid() で使用されるデフォルトの時刻は 1970 年から計算され、長さは 10 桁 (1366512439) です。「シード番号開始時刻」を使用すると、実際には必要なため、この値を減らすことができます。これは単なる値です。自動的に成長する可能性があります。
開始時間をカスタマイズすると、長さが短縮されるだけでなく、混乱を招く可能性もあります。
/*
* パラメータ suffix_len は、生成された ID 値に追加されるランダムな桁の数を指定します。デフォルト値は 3 です。
* アルゴリズムを提供してくれた「Ivan Tan| Tan Junqing DrinChing (at) Gmail.com」に感謝します。
* @param intsuffix_len
* @returnstring
*/
functionfast_uuid($ suffix_len = 3){
$ time = explode( ''、microtime());
$ id =($ time [1] - $ being_timestamp)。
29832412631099013
2、時間()+乱数:
1 秒間に発生する複数のリクエストを解決するために、上記の例で乱数の使用がすでに登場しています。次のように 2 つの関数を提供します。
コードは次のとおりです:
PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length ; $i++) {
} return $hash;
}
function random2($length, $numeric = 0) {
?>
4、最終計画:
アイデア: ユーザー ID + 秒 + 乱数。このうち、「userid+秒」は10進数から64桁に変換され、桁数が減ります。
説明:
1、ユーザー ID: 10 進数に変換された「ZZZZ」の最大値は「16777215」に等しく、10 進数に変換された「ZZZ」の最大値は「262143」に等しくなります。
2、秒: を設定します。自分の時間のスタート地点。
$less=time()-strtotime('2012-4-21'); 16進数の「1SpRe」、5桁に変換します
$less=time()-strtotime('2013-3-21'); 16 進数 "_jHY"; 4 桁
3、乱数: 3 桁の乱数を生成するには、random(3) を使用します。
最終結果:
4 桁のユーザー ID + 4 桁の秒 + 3 桁の乱数 = 11 桁の文字列。結果は uniqid() と似ていますが、堅牢性が向上しています。
5、10進数から16進数への変換アルゴリズム:
1、アルゴリズム 1:
コードをコピーします コードは次のとおりです:
View Code
const KeyCode = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';
/**
* 64 進数の数値文字列を 10 進数の数値文字列に変換します
* @param $m string 64 進数の数値文字列
* @param $len integer 文字列の長さを返します。長さが十分でない場合は、0 パディングを使用します, 0はパディングなしを意味します
* @return string
* @author 野马
*/
function hex64to10($m, $len = 0) {
$m = (文字列)$m;
$hex2 = '';
$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, '0', STR_PAD_LEFT);
}
$return = binding($hex2);
if($len) {
$clen = strlen( $return);
if($clen >= $len) {
return $return;
}
else {
return str_pad($return, $len, ' 0', 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 = binding($one);
$hex64[] = $KeyCode[$t];
}
$ return = preg_replace('/^0*/', '', implode('', $hex64));
if($len) {
$clen = strlen($return);
if($clen >= $len) {
return $return;
}
else {
return str_pad($return, $len, '0', STR_PAD_LEFT);
}
}
return $return;
}
/**
* 16進数の数値文字列を16進数の数値文字列に変換します
* @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($m[$i], 16, 2), '0', STR_PAD_LEFT);
$hex2 = implode('', $hex2);
$hex2 = str_rsplit($hex2, 6);
foreach($hex2 as $one) {
$hex64[] = $KeyCode[bindec($one)] ;
}
$return = preg_replace('/^0*/', '', implode('', $hex64));
if($len) {
$clen = strlen($return);
if( $clen >= $len) {
return $return;
}
else {
return str_pad($return, $len, '0',
}
}
return $return;
}
/ **
* PHPのネイティブ関数str_splitに近いですが、切り取る場合は端から数えます
* @param $str string 切り取る文字列
* @param $len integer 各文字列の長さ
* @return ワイルド馬
*/
function str_rsplit($str, $len = 1) {
if($str == null || $str == false || $str == '') return false;
$strlen = strlen($str);
if($strlen $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));
}
echo "rn
e:" 。 hex10to64($a);
echo "rn
e:" 。 hex64to10(hex10to64($a));
コードを表示
function dec2s4($dec) {
$base = '0123456789_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$result = '';
{
$result = $base[$dec % 64] を実行します。 $結果;
$dec = intval($dec / 64);
} while ($dec != 0);
$result を返す;
}
function s42dec($sixty_four) {
$base_map = array ( '0' => 0, '1' => 1, '2' => 2, '3' => 3, ' 4' => 4、 '5' => 5、 '7' => 8、 '9' => => 10、 '$' => 11、 'b' => 14、 'd' => ; 16、「f」 => 18、「h」 => 20、「k」 => 22 、 'l' => 24、 'n' => 26、 'q' => 28、 r' => 29、 's' => 31、 'v' => 34、 'x' => 35、 'y' => 37、 'B' => 39、 'C' => ; 41、「E」 => 43、「G」 => 45、「I」 => 47 、 'K' => 49、 'M' => 51、 'P' => ' Q' => 54、「R」 => 55、「S」 => 56、 'T' => 57、 'U' => 58、 'V' => 59、 'W' => 60、 'X' => 61、 'Y' => 62、 'Z' => 63、 );
$結果 = 0;
$len = strlen($sixty_four);
for ($n = 0; $n $result *= 64;
$result += $base_map[$sixty_four{$n}];
}
$result を返します。
}
$a=idate("U");
var_dump(dec2s4($a));
var_dump(s42dec(dec2s4($a)));
3,算法效率测试:
コードを表示
$strarr = array();
$time1 = microtime(true);
for($i = 0; $i $str = idate("U")+$i ;
$strarr[] = "{$i}->$strrn
";
}
$time2 = microtime(true);
$time3 = $time2 - $time1;
$time1 = microtime(true);
for($i = 0; $i $str = dec2s4(idate("U")+$i);
$strarr[ ] = "{$i}->$strrn
";
}
$time2 = microtime(true);
echo "rn
运行10000回使用時間(秒):" . ($time2 - $time1 - $time3);
4. テスト結果
アルゴリズム 1: 0.1687250137329
アルゴリズム 2: 0.044965028762817
5. 結論: アルゴリズム 1 は、md5 によって生成された 16 進数を 16 進数に変換でき、md5 を使用する必要がある場合に使用できます。文字列環境の中で。
6 番目の概要
この記事では、アップロードされた画像の名前を変更するために使用できるいくつかの方法について説明します。重要な点は、文字列を減らすために 10 進数を 16 進数に変更することです。
例えば、fast_uuid で生成された 17 桁の数値は、たった 7 文字の 16 進数に変換されます。
具体的な使い方は、状況に応じて柔軟に使用できます。
参考:
1、GUID Baidu 百科事典: http://baike.baidu.com/view/185358.htm
2、com_create_guid() 公式ガイド: http://www.php.net/manual/zh/function.com-create -guid.php
3、MD5() 関数の説明: http://www.w3school.com.cn/php/func_string_md5.asp
4、time() 関数の説明: http://www.w3school.com.cn /php/func_date_time.asp
5、uniqid() 関数の説明: http://www.w3school.com.cn/php/func_misc_uniqid.asp

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。
