Как добавить в название файла функцию time()

131
22 марта 2018, 09:43

При загрузки файла на сервер, нужно дописать к названию файла уникальный номер например через функцию time() но не знаю как?? ниже код

<?php 
 
if( isset( $_POST['my_file_upload'] ) ){   
    // ВАЖНО! тут должны быть все проверки безопасности передавемых файлов и вывести ошибки если нужно 
 
    $uploaddir = '../../../uploads'; // . - текущая папка где находится submit.php 
     
    // cоздадим папку если её нет 
    if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 ); 
 
    $files      = $_FILES; // полученные файлы 
    $done_files = array(); 
 
    // переместим файлы из временной директории в указанную 
    foreach( $files as $file ){ 
        $file_name = cyrillic_translit( $file['name'] ); 
 
        if( move_uploaded_file( $file['tmp_name'], "$uploaddir/$file_name" ) ){ 
            $done_files[] = realpath( "$uploaddir/$file_name" ); 
        } 
    } 
     
    $data = $done_files ? array('files' => $done_files ) : array('error' => 'Ошибка загрузки файлов.'); 
     
    die( json_encode( $data ) ); 
} 
 
 
## Транслитирация кирилических символов 
function cyrillic_translit( $title ){ 
    $iso9_table = array( 
        'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Ѓ' => 'G', 
        'Ґ' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Є' => 'YE', 
        'Ж' => 'ZH', 'З' => 'Z', 'Ѕ' => 'Z', 'И' => 'I', 'Й' => 'J', 
        'Ј' => 'J', 'І' => 'I', 'Ї' => 'YI', 'К' => 'K', 'Ќ' => 'K', 
        'Л' => 'L', 'Љ' => 'L', 'М' => 'M', 'Н' => 'N', 'Њ' => 'N', 
        'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 
        'У' => 'U', 'Ў' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'TS', 
        'Ч' => 'CH', 'Џ' => 'DH', 'Ш' => 'SH', 'Щ' => 'SHH', 'Ъ' => '', 
        'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA', 
        'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'ѓ' => 'g', 
        'ґ' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'є' => 'ye', 
        'ж' => 'zh', 'з' => 'z', 'ѕ' => 'z', 'и' => 'i', 'й' => 'j', 
        'ј' => 'j', 'і' => 'i', 'ї' => 'yi', 'к' => 'k', 'ќ' => 'k', 
        'л' => 'l', 'љ' => 'l', 'м' => 'm', 'н' => 'n', 'њ' => 'n', 
        'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 
        'у' => 'u', 'ў' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'ts', 
        'ч' => 'ch', 'џ' => 'dh', 'ш' => 'sh', 'щ' => 'shh', 'ъ' => '', 
        'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya' 
    ); 
    $name = strtr( $title, $iso9_table); 
    $name = preg_replace('~[^A-Za-z0-9\'_\-\.]~', '-', $name ); 
    $name = preg_replace('~\-+~', '-', $name ); // --- на - 
    $name = preg_replace('~^-+|-+$~', '', $name ); // кил - на концах 
    return $name; 
}

Answer 1
<?php
if( isset( $_POST['my_file_upload'] ) ){  
    // ВАЖНО! тут должны быть все проверки безопасности передавемых файлов и вывести ошибки если нужно
    $uploaddir = '../../../uploads'; // . - текущая папка где находится submit.php
    // cоздадим папку если её нет
    if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 );
    $files      = $_FILES; // полученные файлы
    $done_files = array();
    // переместим файлы из временной директории в указанную
    foreach( $files as $file ){
        $file_name = cyrillic_translit( $file['name'] );
        ////START////
        $pathinfo = pathinfo($file_name);
        $file_name = $pathinfo['filename'].'_'.time();
        //$file_name = $pathinfo['filename'].'_'.md5(mtime());//Я бы сделал так
        $file_name .= '.'.$pathinfo['extension'];
        $file_name = strtolower($file_name);
        ////END////
        if( move_uploaded_file( $file['tmp_name'], "$uploaddir/$file_name" ) ){
            $done_files[] = realpath( "$uploaddir/$file_name" );
        }
    }
    $data = $done_files ? array('files' => $done_files ) : array('error' => 'Ошибка загрузки файлов.');
    die( json_encode( $data ) );
}

## Транслитирация кирилических символов
function cyrillic_translit( $title ){
    $iso9_table = array(
        'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Ѓ' => 'G',
        'Ґ' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Є' => 'YE',
        'Ж' => 'ZH', 'З' => 'Z', 'Ѕ' => 'Z', 'И' => 'I', 'Й' => 'J',
        'Ј' => 'J', 'І' => 'I', 'Ї' => 'YI', 'К' => 'K', 'Ќ' => 'K',
        'Л' => 'L', 'Љ' => 'L', 'М' => 'M', 'Н' => 'N', 'Њ' => 'N',
        'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
        'У' => 'U', 'Ў' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'TS',
        'Ч' => 'CH', 'Џ' => 'DH', 'Ш' => 'SH', 'Щ' => 'SHH', 'Ъ' => '',
        'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA',
        'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'ѓ' => 'g',
        'ґ' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'є' => 'ye',
        'ж' => 'zh', 'з' => 'z', 'ѕ' => 'z', 'и' => 'i', 'й' => 'j',
        'ј' => 'j', 'і' => 'i', 'ї' => 'yi', 'к' => 'k', 'ќ' => 'k',
        'л' => 'l', 'љ' => 'l', 'м' => 'm', 'н' => 'n', 'њ' => 'n',
        'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
        'у' => 'u', 'ў' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'ts',
        'ч' => 'ch', 'џ' => 'dh', 'ш' => 'sh', 'щ' => 'shh', 'ъ' => '',
        'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya'
    );
    $name = strtr( $title, $iso9_table);
    $name = preg_replace('~[^A-Za-z0-9\'_\-\.]~', '-', $name );
    $name = preg_replace('~\-+~', '-', $name ); // --- на -
    $name = preg_replace('~^-+|-+$~', '', $name ); // кил - на концах
    return $name;
}
Answer 2

Для генерации уникального значения можно воспользоваться дополнительными уникальными данными, например если вы позволяете загружать данные, только авторизированным пользователям, можно использовать id пользователя или время регистрации.

Если вы хотите вставлять уникальное значение ИМЕННО в название файла (file_name%UNIQ_NUM%.exe), то перед этим парсите имя файла.

Само же уникально число можно создать так:

mr_rand(0,time()+$uniqValue) //or
mr_rand(0,microtime()+$uniqValue)

В $uniqValue, нужно положить какое-то уникально значение, например как id пользователя или размер файла или id пользователя + id файла

Хотя использовать размер файла не очень хорошо

PS Хочу отметить, что данный метод генерации из под VM не стоит использовать.

PSPS Прочитайте про PSR

Answer 3
foreach( $files as $file ){
        $file_name = cyrillic_translit( $file['name'] );
        // меняем имя файла до тех пор, пока существует файл с аналогичным названием           
        do {
            $file_info = pathinfo($file_name); 
            $realName = $file_info['filename'] . rand(0,99);
            $file_name = $realName . "." . $file_info["extension"]; 
        } while ( file_exists( "$uploaddir/$file_name" ) )
        if( move_uploaded_file( $file['tmp_name'], "$uploaddir/$file_name" ) ){
            $done_files[] = realpath( "$uploaddir/$file_name" );
        }
    }
READ ALSO
Поиск атрибутов у элементов

Поиск атрибутов у элементов

Не понимаю, почему выделяет всю строку, если я написал, что надо найти ссылку с атрибутов href и эта ссылка может состоять из многих символовИ...

159
Подсчет и вывод элементов массива?

Подсчет и вывод элементов массива?

Всем приветнеобходимо вывести отсортированные и объединенные данные нескольких массивов

153
Вызов метода класса по его имени

Вызов метода класса по его имени

Я пытаюсь сделать что-то подобное

185