Принудительная загрузка работает, но показывается неверно при попытке открыть локально - PullRequest
0 голосов
/ 16 мая 2010

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


    function download_file() {
    //Check for download request:
    if(isset($_GET['file'])) {
        //Make sure there is a file before doing anything
        if(is_file($this->path . basename($_GET['file']))) {
            //Below required for IE:
            if(ini_get('zlib.output_compression')) {
                ini_set('zlib.output_compression', 'Off');
            }

            //Set Headers:
            header('Pragma: public');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->path . basename($_GET['file'])) . ' GMT');
            header('Content-Type: application/force-download');
            header('Content-Disposition: inline; filename="' . basename($_GET['file']) . '"');
            header('Content-Transfer-Encoding: binary');
            header('Content-Length: ' . filesize($this->path . basename($_GET['file'])));
            header('Connection: close');
            readfile($this->path . basename($_GET['file']));
            exit();
        }
    }
}

РЕДАКТИРОВАТЬ: по недействительным, например, я загружаю изображение и пытаюсь просмотреть его в iPhotos или Windows Picture Viewer, и он говорит, Формат файла не поддерживается. Когда я смотрю его на сервере, он выглядит нормально, но после загрузки он поврежден.

1 Ответ

1 голос
/ 16 мая 2010

Спасибо, Гамбо, попробовал это и вывело:

Предупреждение : gmdate () ожидает параметр 2 должен быть длинным, задана строка в C: \ Program Files \ Wamp Server \ WWW \ TutToasterUpload \ PHPClass.php на линии 83
давайте посмотрим, что случается

Исправлена ​​эта строка:

//Added filemtime();    
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($this->path . basename($_GET['file']))) . ' GMT');
...