verifica si esto esta bien

necesito poder terminar esto para marcar los token usados y arreglar cualquier fallo

<?php

// Función para obtener la URL segura del audio
function tokenAudio($audio_id) {
    if (!preg_match('/^[a-zA-Z0-9_-]+$/', $audio_id)) {
        return false;
    }

    $expiration = time() + 60; // 1 minuto
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $unique_id = uniqid();
    $data = $audio_id . '|' . $expiration . '|' . $user_ip . '|' . $unique_id;
    $signature = hash_hmac('sha256', $data, ($_ENV['AUDIOCLAVE']));
    return base64_encode($data . '|' . $signature);
}

// Función para verificar el token
function verificarAudio($token) {
    $parts = explode('|', base64_decode($token));
    if (count($parts) !== 5) return false; // Asegurarse de que haya 5 partes
    list($audio_id, $expiration, $user_ip, $unique_id, $signature) = $parts;

    if ($_SERVER['REMOTE_ADDR'] !== $user_ip) {
        return false;
    }
    if (time() > $expiration) return false;
    if (!preg_match('/^[a-zA-Z0-9_-]+$/', $audio_id)) {
        return false;
    }
    if (tokenYaUsado($unique_id)) return false;

    $data = $audio_id . '|' . $expiration . '|' . $user_ip . '|' . $unique_id;
    $expected_signature = hash_hmac('sha256', $data, ($_ENV['AUDIOCLAVE']));
    
    if (hash_equals($expected_signature, $signature)) {
        marcarTokenComoUsado($unique_id);
        return true;
    }
    return false;
}

// Función para marcar un token como usado
function marcarTokenComoUsado($unique_id) {
    // Implementa esto usando una base de datos o un sistema de caché
    // Por ejemplo, usando WordPress transients:
    set_transient('audio_token_' . $unique_id, true, 3600); // Guarda por 1 hora
}

// Función para verificar si un token ya ha sido usado
function tokenYaUsado($unique_id) {
    // Implementa esto usando una base de datos o un sistema de caché
    // Por ejemplo, usando WordPress transients:
    return get_transient('audio_token_' . $unique_id) !== false;
}

// Función para obtener la URL segura del audio
function audioUrlSegura($audio_id) {
    $token = tokenAudio($audio_id);
    if (!$token) {
        return new WP_Error('invalid_audio_id', 'Audio ID inválido.');
    }
    return site_url("/wp-json/1/v1/2?token=" . urlencode($token));
}

// Registrar el endpoint REST
add_action('rest_api_init', function () {
    register_rest_route('1/v1', '/2', array(
        'methods' => 'GET',
        'callback' => 'audioStreamEnd',
        'args' => array(
            'token' => array(
                'required' => true,
            ),
        ),
        'permission_callback' => function($request) {
            return verificarAudio($request->get_param('token'));
        }
    ));
});


// Modificar la función audioStreamEnd para implementar streaming
function audioStreamEnd($data) {
    $token = $data['token'];
    $parts = explode('|', base64_decode($token));
    $audio_id = $parts[0];

    // Directorio de caché
    $upload_dir = wp_upload_dir();
    $cache_dir = $upload_dir['basedir'] . '/audio_cache';
    if (!file_exists($cache_dir)) {
        wp_mkdir_p($cache_dir);
    }

    $cache_file = $cache_dir . '/audio_' . $audio_id . '.cache';

    // Verifica si el archivo de caché existe y no ha expirado (1 día)
    if (file_exists($cache_file) && (time() - filemtime($cache_file) < 24 * 60 * 60)) {
        $file = $cache_file;
    } else {
        // El audio no está en caché o ha expirado, copia el archivo original
        $original_file = get_attached_file($audio_id);
        if (!file_exists($original_file)) {
            return new WP_Error('no_audio', 'Archivo de audio no encontrado.', array('status' => 404));
        }

        // Intentar copiar el archivo al caché
        if (!@copy($original_file, $cache_file)) {
            return new WP_Error('copy_failed', 'Error al copiar el archivo de audio al caché.', array('status' => 500));
        }

        $file = $cache_file;
    }

    $fp = @fopen($file, 'rb');
    if (!$fp) {
        return new WP_Error('file_open_error', 'No se pudo abrir el archivo de audio.', array('status' => 500));
    }

    $size = filesize($file);
    $length = $size;
    $start = 0;
    $end = $size - 1;

    header('Content-Type: ' . get_post_mime_type($audio_id));
    header("Accept-Ranges: bytes");
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");

    // Manejar Ranges HTTP para streaming parcial
    if (isset($_SERVER['HTTP_RANGE'])) {
        $c_start = $start;
        $c_end = $end;
        list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
        if (strpos($range, ',') !== false) {
            header('HTTP/1.1 416 Requested Range Not Satisfiable');
            header("Content-Range: bytes $start-$end/$size");
            exit;
        }
        if ($range == '-') {
            $c_start = $size - substr($range, 1);
        } else {
            $range = explode('-', $range);
            $c_start = $range[0];
            $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
        }
        $c_end = ($c_end > $end) ? $end : $c_end;
        if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) {
            header('HTTP/1.1 416 Requested Range Not Satisfiable');
            header("Content-Range: bytes $start-$end/$size");
            exit;
        }
        $start = $c_start;
        $end = $c_end;
        $length = $end - $start + 1;
        fseek($fp, $start);
        header('HTTP/1.1 206 Partial Content');
    }

    header("Content-Range: bytes $start-$end/$size");
    header("Content-Length: " . $length);

    // Streaming con rate limiting
    $buffer = 1024 * 8; // 8 KB
    $sleep = 1000; // Microsegundos de espera entre cada envío de buffer
    $sent = 0;
    while (!feof($fp) && ($p = ftell($fp)) <= $end) {
        if ($p + $buffer > $end) {
            $buffer = $end - $p + 1;
        }
        echo fread($fp, $buffer);
        $sent += $buffer;
        flush();
        if ($sent >= 64 * 1024) { // Cada 64 KB
            usleep($sleep);
            $sent = 0;
        }
    }

    fclose($fp);
    exit();
}