ホームページ  >  記事  >  バックエンド開発  >  PHP イメージをアップロードおよび名前変更する 6 つの方法のまとめ

PHP イメージをアップロードおよび名前変更する 6 つの方法のまとめ

WBOY
WBOYオリジナル
2016-07-25 08:54:261571ブラウズ
  1. /*
  2. com_create_guid() は、php5 バージョンでサポートされている関数です。サポートされていないバージョンの場合は、自分で定義できます
  3. */
  4. function guid(){
  5. if (function_exists('com_create_guid')){
  6. return com_create_guid();
  7. }else{
  8. mt_srand((double)microtime()*10000);//php 4.2.0 以降ではオプション
  9. $charid = strtoupper(md5(uniqid) ( rand(), true)));
  10. $hyphen = chr(45);// "-"
  11. $uuid = chr(123)// "{"
  12. .substr($charid, 0, 8).$ハイフン
  13. .substr($charid, 8, 4).$hyphen
  14. .substr($charid,12, 4).$hyphen
  15. .substr($charid,16, 4).$hyphen
  16. .substr($charid, 20 ,12)
  17. .chr(125);// "}"
  18. return $uuid
  19. }
  20. }
コードをコピー
2.MD5 guid と同様に、32 文字の 16 進数を出力します。違いは、guid がランダムに生成されるのに対し、md5 は入力データに基づいて生成される必要があることです。 例:

    $str = "Hello";
  1. コードをコピーします。 出力: 8b1a9953c4611296a827abf8c47804d7 利点: 入力シード データに基づいて出力値を制御できます。シード データが規則的で反復しない場合、データは md5 によって保護できるため、大きな混乱効果が生じます。 欠点: 32 ビット文字は長すぎるため、一意のシード データを提供する必要があります。 使用法: 同時実行性が高く、シード データとして秒を使用しても、重複は発生します。
/*

* time() 関数と組み合わせて使用​​され、1970 年から現在までの秒数をシード番号として使用します
*/
$str=time() ;
    echo md5($ str)
  1. ?>
  2. 3. uniqid(): 13 桁または 23 桁の文字列を返します。 私たちの目的では、uniqid() は md5() の改良版のようなもので、特に差分識別子を文字列プレフィックスとして使用できるため、名前が重複する可能性を減らすことができます。 同時実行性が高くないなどの極端な状況の場合は、一般的なニーズをすでに満たしているこの関数を使用することをお勧めします。 詳細な説明: 定義: uniqid() 関数は、マイクロ秒単位の現在時刻に基づいて一意の ID を生成します。 使用法: uniqid(prefix,more_entropy); 注: prefix は出力文字列に接頭辞を追加できます。more_entropy パラメーターが true の場合、23 ビット文字列が出力されます。
var_dump(uniqid());
; 出力は次のとおりです。 文字列(13) "51734aa562254" 文字列(14) "a51734aa562257" 利点: 13 ビットの文字列長が許容可能なファイル名長です。プレフィックスを追加でき、結果にはデータの難読化が含まれるため、元のデータの逆参照を回避できます。 欠点: md5 と同様、同時実行性が高く、シード データとして秒を使用するため、やはり重複が発生します。 3.バージョンアップ計画 1. fast_uuid: 17 桁を返します。 uniqid() の不完全なカスタマイズ バージョンに似ていますが、この関数に表示される「シード番号の開始時刻」という概念は非常に啓発的です。 time() と uniqid() で使用されるデフォルトの時刻は 1970 年から計算され、その長さは 10 桁 (1366512439) です。実際に必要なのは 1 つだけであるため、「シード番号開始時刻」を使用するとこの値を減らすことができます。自動的に増加する可能性のある値。 開始時間をカスタマイズすると、長さが短縮されるだけでなく、混乱を招く可能性もあります。

    /*
  1. * パラメータ suffix_len は、生成された ID 値に追加されるランダムな桁数を指定します。デフォルト値は 3 です。
  2. * @param int suffix_len
  3. * @return string
  4. */
  5. function fast_uuid($ suffix_len=3) {
  6. //! シード番号の計算開始時刻
$being_timestamp = strtotime('2013-3-21')
$time =explode(' ', microtime()); = ($time[1 ] - $being_timestamp) . sprintf('%06u', substr($time[0], 2, 6)); if ($suffix_len > 0) {
$id .= substr (sprintf('%010u ', mt_rand()), 0, $suffix_len);

$id を返す
}
  1. コードをコピーします。

    出力: 29832412631099013 2. time()+乱数 1 秒間に発生する複数のリクエストを解決するために、乱数の使用は上記の例ですでに登場しています。 次の 2 つの関数が提供されます。

      functionrandom($length) {
    1. $hash = '';
    2. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';文字) - 1;
    3. PHP_VERSION < 4.2.0' && mt_srand((double)microtime() * 1000000);
    4. for($i = 0; $i $hash .= $chars[mt_rand(0, $max) )];
    5. return $hash;
    6. }
    7. function randman2($length, $numeric = 0) {
    8. PHP_VERSION $seed = base_convert(md5(print_r($_SERVER, 1).microtime()), 16, $numeric ? 10 : 35);
    9. $seed = $numeric ? (str_replace('0', '', $シード).'012340567890') : ($seed.'zZ'.strtoupper($seed));
    10. $hash = '';
    11. $max = strlen($seed) - 1; $i < $length; $i++) {
    12. $hash .= $seed(0, $max) }
    13. $hash;
    14. ; ,最終提案 アイデア: ユーザー ID + 秒 + 乱数。このうち、「userid+秒」は10進数から64に変換され、桁数が減ります。 例証します: 1. userid: 16 進数の「ZZZZ」の最大値を 10 進数に変換すると「16777215」、「ZZZ」の 10 進数に変換した最大値は「262143」になります。 2. 秒: 独自の時間の開始点を設定します。 $less=time()-strtotime(’2012-4-21’) は 16 進数の「1SpRe」、5 桁に変換されます $less=time()-strtotime(’2013-3-21’) は 16 進数の「_jHY」、4 桁に変換されます 3. 乱数:random(3) を使用して 3 桁の乱数を生成します。 最終結果: 4 桁のユーザー ID + 4 桁の秒 + 3 桁の乱数 = 11 桁の文字列。結果は uniqid() と似ていますが、堅牢性が向上しています。
    15. 1
    16. 2 次のページ 最後のページ

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。