PHP - Как эффективно доставить локальный файл - PullRequest
0 голосов
/ 23 мая 2018

Я разработал скрипт, который доставляет файлы по защищенному URL-адресу, цель - имитировать частный хостинг файлов Amazon S3.Пользователь отправляет запрос на сервер, который генерирует URL, который можно использовать для доступа к файлу.Срок действия сгенерированного URL истекает через 2 часа с момента его создания.

Это расшифрованная часть скрипта:

$data = decrypt($_GET['data']);
    $data_json = json_decode($data,true);

    // print_r($data_json); die;
    $elapsed = strtotime('now') - $data_json['expire'];
    if ($elapsed > URLEXPIRE) {
        echo json_encode(array(
            'status'=>false,
            'error'=>'URL expired.',
            'debug'=>$data,
            'debug2'=>$_GET['data']
        ));
        die;
    }

    $object = OBJECTSTORE . $data_json['path'];
    header('X-Elapsed: ' . $elapsed);
    // header('Content-Type: '.get_mime_type($object));
    header('Content-Type: application/octet-stream');
    // header('Content-Disposition: attachment; filename=' . basename($object));
    if (strpos($data_json['path'],'?download'))
        header('Content-Disposition: attachment;');

    // echo file_get_contents($object);
    readfile($object);
    die;

Во время моего теста на промежуточном сервере скрипт работает нормально,Тем не менее, после выпуска в производство при доставке больших видеофайлов это кажется медленным.Загрузка URL-адреса в качестве источника тега HTML-видео занимает некоторое время.Я не знаю, помогает ли это, но функция decrypt использует openssl_decrypt с использованием шифра AES-256-CBC.

Есть идеи более эффективного подхода к этому?

1 Ответ

0 голосов
/ 23 мая 2018

Убедитесь, что выходной буфер отключен перед readfile (): добавьте ob_end_clean ().Кроме того, readfile, вероятно, не эффективен для больших файлов.См. Readfile () и большие файлы

...