WP_TEMPNAM() – создание уникального временного файла в WordPress

# WP_TEMPNAM() │ WP 2.6.0

Функция WP_TEMPNAM() создает название уникального временного файла. Учтите, что функция, которая вызывает WP_TEMPNAM(), должна сама удалить или переместить этот файл.

## Примечание
Согласно документации, вызывающая функция должна удалить или переместить созданный файл.

Имя файла основывается на переданном параметре, или, если он не задан, использует текущую метку времени в формате UNIX. Директорию также можно передать в качестве параметра, а если оставить её пустой, по умолчанию будет использоваться доступная временная директория.

### Используется в:
Функция download_url()

**Время выполнения:**
- 1 раз — 0.000405 сек (быстро)
- 50,000 раз — 5.08 сек (быстро)

**Версия PHP:** 7.1.11, **Версия WP:** 4.9.5

**Хуки:** Нет.

## Возвращает
Строку — доступное имя файла.

## Использование
Функция вызывается так:
```php
wp_tempnam( $filename, $dir );
  • $filename (string): Имя файла, на основе которого будет создан уникальный файл. По умолчанию: ''
  • $dir (string): Директория для хранения файла. По умолчанию: ''

Примеры

Пример 1

require_once ABSPATH . 'wp-admin/includes/file.php';

$filename = wp_tempnam(); //> /tmp/1524879129-OkwJkv.tmp

// модифицируем файл и делаем с ним что-то

unlink( $filename ); // удаляем файл

Примеры использования с параметрами

$filename = wp_tempnam( 'my_log_file' );     //> /tmp/my_log_file-BmwSQw.tmp
unlink( $filename );

$filename = wp_tempnam( 'my_log_file.log' ); //> /tmp/my_log_file-AreTYU.tmp
unlink( $filename );

$filename = wp_tempnam( '', $_SERVER['DOCUMENT_ROOT'].'/' ); //> /home/example.com/public_html/1524879213-ieQsRX.tmp
unlink( $filename );

Изменения

  • С версии 2.6.0 — функция введена в использование.

Исходный код функции WP_TEMPNAM

function wp_tempnam( $filename = '', $dir = '' ) {
    if ( empty( $dir ) ) {
        $dir = get_temp_dir();
    }

    if ( empty( $filename ) || in_array( $filename, array( '.', '/', '' ), true ) ) {
        $filename = uniqid();
    }

    $temp_filename = basename( $filename );
    $temp_filename = preg_replace( '|.[^.]*$|', '', $temp_filename );

    if ( ! $temp_filename ) {
        return wp_tempnam( dirname( $filename ), $dir );
    }

    $temp_filename .= '-' . wp_generate_password( 6, false );
    $temp_filename .= '.tmp';
    $temp_filename  = wp_unique_filename( $dir, $temp_filename );

    $characters_over_limit = strlen( $temp_filename ) - 252;
    if ( $characters_over_limit > 0 ) {
        $filename = substr( $filename, 0, -$characters_over_limit );
        return wp_tempnam( $filename, $dir );
    }

    $temp_filename = $dir . $temp_filename;

    $fp = @fopen( $temp_filename, 'x' );

    if ( ! $fp && is_writable( $dir ) && file_exists( $temp_filename ) ) {
        return wp_tempnam( $filename, $dir );
    }

    if ( $fp ) {
        fclose( $fp );
    }

    return $temp_filename;
}
В данном коде мы создаем временное имя файла, обеспечивая его уникальность, добавляя случайные символы к имени. Это помогает избежать конфликтов имен файлов в одной и той же директории.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *