PHP Başlıklarla Dosya Ekleri Çıkarılması

2 Cevap php

Burada birkaç mesajları okuduktan sonra diğerleri bir demet bir karışıklık nevi bu işlevi formüle:

function outputFile( $filePath, $fileName, $mimeType = '' ) {
    // Setup
    $mimeTypes = array(
        'pdf' => 'application/pdf',
        'txt' => 'text/plain',
        'html' => 'text/html',
        'exe' => 'application/octet-stream',
        'zip' => 'application/zip',
        'doc' => 'application/msword',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',
        'gif' => 'image/gif',
        'png' => 'image/png',
        'jpeg' => 'image/jpg',
        'jpg' => 'image/jpg',
        'php' => 'text/plain'
    );

    // Send Headers
    //-- next line fixed as per suggestion --
    header('Content-Type: ' . $mimeTypes[$mimeType]); 
    header('Content-Disposition: attachment; filename="' . $fileName . '"');
    header('Content-Transfer-Encoding: binary');
    header('Accept-Ranges: bytes');
    header('Cache-Control: private');
    header('Pragma: private');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    readfile($filePath);

}

Böyle bir şey (diğer kod sürü dışarı çıkardı) yapan bir php sayfası (file.php) var:

   // I run this thru a safe function not shown here
$safe_filename = $_GET['filename'];	
outputFile ( "/the/file/path/{$safe_filename}", 
             $safe_filename, 
             substr($safe_filename, -3) );

Çalışması gerekir gibi görünüyor, ve neredeyse yok, ama aşağıdaki sorunları yaşıyorum:

  1. Onun bir metin dosyası, ben metin belgesinde ilk harfi olarak garip bir sembolü alıyorum zaman

  2. Ne zaman onun bir kelime doc, bunun (muhtemelen aynı ilk bit veya bayt atma şeyler kapalı) bozuk.

  3. Tüm diğer dosya türleri bozuk olacağını tahmin - hatta onları denemedim

Herhangi bir yanlış yapıyorum ne fikir?

Teşekkürler -

Önerdiği gibi UPDATE: kod satırını değişti - hala aynı sorun.

2 Cevap

Tamam, ben bunu anladım.

Komut yukarıdaki çalışmaya YAPAR.

Ne oluyordu ben include_once dosyaları bir dizi vardı ve bunlardan biri soruna neden boş bir satır vardı olduğunu.

Bu gerçek cevap, ama amaçlanan düşünüyorsanız emin değil

header('Content-Type: ' . $mimeType);

olduğu

header('Content-Type: ' . $mimeTypes[$mimeType]);