Функция загрузки не работает - PullRequest
0 голосов
/ 23 августа 2011

У меня проблема с функцией загрузки.В моей системе мне нравится делать безопасные загрузки.Файлы в моем корне не доступны через URL.Я установил права ftp un 700. Только сервер может получить доступ.После этого я сделал функцию, которая может загрузить файл для пользователя.В этот момент я могу выполнить сессию проверки безопасности.

Но когда серверы загружают файл с этим кодом, файл открывается в браузере.С exe в браузере показываются странные буквы.

  // Bestandsnaam
            $file = 'bestanden/test.exe';

            // Ophalen bestand
            if (file_exists($file)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename='.basename($file));
                header('Content-Transfer-Encoding: binary');
                header('Expires: 0');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                header('Pragma: public');
                header('Content-Length: ' . filesize($file));
                ob_clean();
                flush();
                readfile($file);
                exit;
            }

Я хочу сохранить как поле, когда пользователи получают доступ к URL.

Я хочу использовать эту функцию следующим образом:

<a href="www.site.nl/downloadfunction/file">download</a>

Есть ли у кого-нибудь решение.Я пробовал Javascript document.execCommand('SaveAs',null,bestand); вместо файла readfile, но он не работает в Firefox.

Спасибо за помощь!

Ответы [ 4 ]

3 голосов
/ 23 августа 2011

Попробуйте поставить ob_clean над заголовками. Если эти заголовки успешно отправлены в вашем текущем коде, я даже сомневаюсь, что вам нужен ob_clean.

2 голосов
/ 23 августа 2011

Вы могли бы иметь некоторые символы в выводе до того, как заголовки функционируют, потому что код кажется правильным. В этом случае вам также следует отключить error_display, потому что в противном случае вы должны получить предупреждение.

Проверьте это с помощью функции headers_sent сразу после if.

0 голосов
/ 23 августа 2011

Я использую точно такой же код, и он отлично работает.

Однако то, что делает клиент, зависит от параметров браузера. Если в вашем браузере установлен тип файла «всегда открывать», и действие по умолчанию «скачать без запроса» будет 1) загрузить файл в папку загрузки по умолчанию и 2) открыть его. Вам просто нужно поставить галочку напротив «Спросить, где сохранить каждый файл перед загрузкой».

0 голосов
/ 23 августа 2011

Используйте помощник загрузки :

function process($file)
{
    $this->load->helper('download');
    $data = file_get_contents("my-downloads/$file"); // Read the file's contents
    force_download($file, $data);            
}

Следует позаботиться о деталях (заголовки, обнаружение MIME-типа), которые в противном случае вам нужно было бы использовать.

Источник доступен , если вас интересуют подробности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...