2010-05-16 3 views
0

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


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(); 
     } 
    } 
} 

EDIT: По недействителен, например загрузить картинку и попытаться увидеть его в iPhotos или Windows Picture Viewer, и он говорит, формат файла не поддерживается. Когда я просматриваю его на сервере, он выглядит нормально, но после загрузки он поврежден.

+0

В несвязанной ноте: Имеет ли базовые() обеспечивает защиту от атак LFI? –

+0

Вы должны быть более конкретными. Как это «недействительно»? Каково его содержание? – Artefacto

+0

Попробуйте использовать простой текстовый файл и посмотрите загруженные данные с помощью шестнадцатеричного просмотра. – Gumbo

ответ

1

Благодаря Гамбо, пробовал и выводимый:

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

Fixed этой строки:

//Added filemtime();  
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($this->path . basename($_GET['file']))) . ' GMT'); 
Смежные вопросы