0

アップロード時に画像の名前を変更しようとしましたが、見つかったコードは 32 文字のハッシュを使用するものだけでした。

function make_filename_hash($filename) {
  $info = pathinfo($filename);
  $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
  $name = basename($filename, $ext);
  return md5($name) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);

私のphpの知識は非常に限られており、ハッシュの代わりに生成される乱数を使用する例をどこでも探しましたが、成功しませんでした。私の最初のアイデアは、データベース イメージ ID を取得し、アップロード時にイメージ ファイル名として使用することでしたが、その過程で頭が混乱してしまいました。

とにかく、この時点で、アップロードごとに 1 桁ずつ増加するある種の番号付けシステムに落ち着くか、それが不可能な場合は、rand(10000,99999) のような範囲を使用して、少なくともいくつかの乱数を使用します。

どんな助けでも大歓迎ですどうもありがとう

================================================= ============================== 助けてくれてありがとう エリック、これは私がこれまでに得たもので、よりうまく機能しているようです. しかし、それを連続させる方法はありますか?明らかに mt_rand を使用していません :) アップロードごとに 1 ずつ増加するようなものです。また、アップロード時に問題が発生する可能性があるため、同じ番号が 2 回生成される可能性もあります。

function make_filename_hash($filename) {
  $info = pathinfo($filename);
  $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
  return mt_rand(10,10000) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);

================================================== ============================== functions.php のカスタム テーブルからデータを読み込んで書き込めますか。テーブルからカウンターを読み取って、イメージをそのカウンター番号に設定し、データベースのカウンターを更新しようとしています。機能していないようです。カウンターは増加しますが、テーブルは更新されず、db の値に関係なく、カウンターはその値を使用しないため、この値も読み取られません。ファイルの名前を変更するためにこれを行う別の方法があるかどうかを知りたいだけですが、カスタムテーブルの値を使用しています。これは私がこれまでに得たものです。間違ったフックを使用しているのではないかと考えていましたが、この時点で少し行き詰まっています。みんなありがとう。

 function make_filename_counter($filename) {      
    $qry;
    $fcnt = 0;
    $sql = ("SELECT counter FROM bwbps_filenamecounter WHERE id = 1");
    $cnt = mysql_query($sql);
    foreach($cnt as $cnt) {
        $fcnt = $cnt->counter;
    }
    $fcnt = $fcnt + 1;
    $info = pathinfo($filename);
    $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
    $sql = "UPDATE bwbps_filenamecounter SET counter = " . $fcnt . " WHERE id = 1";
    $qry = mysql_query($sql);
    $fcnt = 0;
    return $fcnt . $ext;
}
add_filter('sanitize_file_name', 'make_filename_counter', 10); 
4

1 に答える 1

1

この質問への回答に基づいて、次のようなものをお勧めします。

function make_filename_hash($filename) {
  $info = pathinfo($filename);
  $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
  $uniqueName = uniqid(basename($filename, $ext));
  return $uniqueName . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);

これは、元のファイル名をベースとして使用し、それに時間依存の識別子を追加します。PHP の uniqid() 関数の説明については、こちらを参照してください。

私は肯定的ではありませんが、WordPress はデータベースに何かを保存する前に sanitize_file_name フィルターを適用すると思います。その場合、新しい名前をデータベース ID に結び付けることができません。

編集

元のファイル名を含まない一意の識別子を返すには:

    function make_filename_hash($filename) {
      $info = pathinfo($filename);
      $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
      return uniqid() . $ext;
    }
于 2012-07-20T20:39:27.320 に答える