Обслуживание загрузки файла с помощью PHP

Первый проект PHP и я застреваем!
Я хочу позволить пользователям нажимать кнопку или ссылку и загружать файл.

Однако мой PHP должен сначала выполнить некоторые задачи, выбрать правильный файл, записать событие загрузки в дб и т.д. Это, я могу сделать, но как я затем отправляю файл как ответ на щелчок пользователя?

Спасибо за любую справку.

1
задан sepehr 11 May 2010 в 21:47
поделиться

4 ответа

header("Content-type: image/png"); (или что там у вас), а затем просто выводите файл.

0
ответ дан 3 September 2019 в 00:44
поделиться

Отправьте соответствующий заголовок в вашем скрипте:

header("content-type: application/pdf");

Используйте правильный mime-type согласно вашему файлу и отправьте содержимое в браузер, используя readfile.

0
ответ дан 3 September 2019 в 00:44
поделиться

Как @Sarfraz предполагает, вы можете,после выполнения задач, которые вам нужно выполнить, отправьте заголовок Content-Type в браузер, а затем извергайте содержимое файла в браузер. Затем браузер будет работать в соответствии с пользовательскими настройками, которые, как правило, будут либо а) открывать и отображать файл, либо б) сохранять файл на диск.

Если вы хотите принудительно сохранить файл на диск, а не отображать его в браузере, обычно используется способ указать MIME-тип Content-Type: application/octet-stream. Можно также указать имя файла вложения с заголовком Content-Disposition: attachment; имя_файла=foobar.baz.

2
ответ дан 3 September 2019 в 00:44
поделиться

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

$ fileName : путь + имя файла, который необходимо отправить в браузер $ downloadName : это имя (путь не требуется) файла что пользователь видит при загрузке (не обязательно то же самое, что $ filename

 function sendFileDirectlyToBrowser($downloadName, $fileName) {
        if (! file_exists($fileName)) {
            throw new Exception('file does not exist!');
        }

        $pathInfo = pathinfo($fileName);

        //list with mime-types http://en.wikipedia.org/wiki/Mime_type#List_of_common_media_types

        switch (strtolower($pathInfo['extension'])) {
            case 'csv':
                header("Content-type: test/csv");
                break;
            case 'doc':
            case 'docx':
                header("Content-type: application/msword");
                break;
            case 'gif':
                header("Content-type: image/gif");
                break;
            case 'jpg':
            case 'jpeg':
                header("Content-type: image/jpeg");
                break;
            case 'png':
                header("Content-type: image/png");
                break;
            case 'pdf':
                header("Content-type: application/pdf");
                break;
            case 'tiff':
                header("Content-type: image/tiff");
                break;
            case 'txt':
                header("Content-type: text/plain");
                break;
            case 'zip':
                header("Content-type: application/zip");
                break;
            case 'xls':
            case 'xlsx':
                if(!(strpos($HTTP_USER_AGENT,'MSIE') === false)) {
                    header("Content-type:application/x-msdownload");
                }
                else {
                    header("Content-type:application/vnd.ms-excel ");
                }
                break;
        }


        header('Content-Disposition:attachment;filename="'  . $downloadName . '"');
        print file_get_contents($fileName);
    }
0
ответ дан 3 September 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: