Проблемы с загрузкой файла в браузере с помощью CURL - PullRequest
2 голосов
/ 24 апреля 2019

У меня есть проблема, которую я пытаюсь решить. Проблема заключается в загрузке файла с использованием CURL и предложении пользователю сохранить приглашение в браузере, когда это происходит. Я могу успешно открыть файл, но он открывается прямо в браузере как символьные данные.

До сих пор я пытался использовать стандартные заголовки Content-Type и Content-Disposition, но не повезло, фактически выполнив диалоговое окно сохранения:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "ftp://server.com/recordings/4_23_2019/CD36FAFA9DFD4DE190B487C503D5A3D2 @ 2_04_28 PM.wav");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $file); #output
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
$file = curl_exec($ch);
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="CD36FAFA9DFD4DE190B487C503D5A3D2 @ 2_04_28 PM.wav"');
    header('Content-Transfer-Encoding: binary');
    header('Content-length: ' . filesize($file));
    readfile($file);
    exit;
}
?>

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

Произведенные ошибки:

Предупреждение: file_exists () ожидает, что параметр 1 будет ресурсом, строка указано в / path / name

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены

1 Ответ

0 голосов
/ 24 апреля 2019

Это рабочий код из одного проекта (не в продукте).

if (file_exists($path)) {
    if (is_readable($path)) {
        @set_time_limit(900);
        $NomFichier = basename($path);
        header("Content-Type: application/force-download; name=\"$NomFichier\"");
        header("Content-Transfer-Encoding: binary");
        header("Content-Disposition: attachment; filename=\"$NomFichier\"");
        header("Expires: 0");
        header("Cache-Control: no-cache, must-revalidate");
        header("Pragma: no-cache");
        readfile($path);

      exit;
    } else {
        $this->say_error("Access denied for this file.");
    }
} else {
    $this->say_error("File moved or deleted.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...