web-dev-qa-db-ja.com

日付とタイムスタンプを使用してアップロード中に画像の名前を変更しますか?

特殊文字を含む画像ファイル名とラテン文字を含まないファイル名の問題を避けるため、アップロード中に画像の名前を変更しようとしています。

私はこの機能を WordPressで画像の名前を変更することを見つけました

function sanitize_file_uploads( $file ){
    $file['name'] = sanitize_file_name($file['name']);
    $file['name'] = preg_replace("/[^a-zA-Z0-9\_\-\.]/", "", $file['name']);
    $file['name'] = strtolower($file['name']);
    add_filter('sanitize_file_name', 'remove_accents');

    return $file;
}
add_filter('wp_handle_upload_prefilter', 'sanitize_file_uploads');

それは、特殊な受け入れられない文字を削除し、名前を小文字に変換し、そしてアクセントを削除します。しかし、たとえば、imageにラテン文字以外の文字しか含まれていない場合は、次のように画像ファイル名が作成されます。

年月日日時時分秒.jpgのような現在の日時に基づいた画像ファイル名を付けたいです。

アップロード時にファイル名を変更できるプラグインがあることを知っています しかし、そのためだけにプラグインを使用したくありません。

誰もが解決策、アイデアを持っていますか?

2
Advanced SEO

あなたは例えばカスタムサニタイズの後、pathinfoname__から filename および extension を確認してください。

例:

filename が空で extension が空でない場合は、フォーマットされた現在時刻をファイル名の部分として追加します。

$info = pathinfo( $file['name'] );
if( empty( $info['filename'] ) && ! empty( $info['extension'] ) )
    $file['name'] = sprintf( '%s.%s', current_time( 'Y-m-d-H-i-s' ), $info['extension'] );

カスタムサニタイズでファイルáéíú.png.pngに削除されると、2016-08-14-10-54-07.pngに名前が変更されます。

同じ秒内に別のそのようなファイルをインポートすると、wp_unique_filename()はファイル名部分に-1を追加するので、ファイル名は2016-08-14-10-54-07-1.pngに変更されます。 3番目のファイルには-2が追加されます。

あなたがこれをあなたのニーズに合わせてさらに調整できることを願っています。

4
birgire