PHP indirme bağlantısı olarak Başlığını kullanma

0 Cevap php

Yani bu sorun benim indirme linki zekâ yaşıyorum. Temelde download linki oluşturmak benim önceki yolu sadece yöntem = 'bağlantı' ve dosyaya bağlantı olarak eylem ile bir form düğmesi sahip olmaktır. Bu firefox ve başkaları için çalışıyor ama safari değil. Kullanıcı safari dosyası (excel dosyası) indirmek için çalıştığında nedense, için, sadece (ben onun tarayıcısını kullanarak okumaya çalışıyor sanırım?) Tarayıcı üzerinde ASCII karakter demet gösterir. Eh, başka bir çözüm arıyordu ve başlığını kullanarak bunu yapmak için bir yol gibi görünüyor. Yani şimdi ben yöntemi ile bir form düğmesi oluşturmak için tryng ediyorum = 'post' ve eylem = gizli bir alan dosyaya bağlantı ile orada 'download.php'. Bu gibi görünüyor

function showDownloadWithHeader($link){
    echo "<form action='download.php' method='post' >";
    echo "<input class='downloadButton' type='submit' value='Download Report'>";
    echo "<input type='hidden' name='filename' value='$link'>";
    echo "</form>";
}

Ve download.php içinde ben sadece kullanıcı dosyayı indirmek sorulmasını isterim.

<?php
    if($_POST['filename'] == '' || empty($_POST['filename'])){
        exit;
    }

    $filename = $_POST['filename']; //the file is 2 folder down. e.g. data/stack/bla.xlsx
    $file = $filename;
    $extension = end(explode('.', $filename));
    error_reporting(E_ALL);
    ini_set("display_errors",1);
//  echo $filename;
//  echo "<br/>";
//  echo $extension;
//  echo filesize($filename);
//  echo "<br/>";
    switch($extension){
        case 'xls':
            $mimeType = 'application/vnd.ms-excel';
            break;
        case 'xlsx':
            $mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
            break;
    }
//  echo $mimeType;
    header('Content-Description: File Transfer');
    header('Content-Type: ' . $mimeType);
    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($filename);
    exit;
?>

Ben readfile altında php.net () fonksiyonu bu çözüm gördüm ama bu benim için çalışıyor görünmüyor. Ben localhost yapıyorum.

0 Cevap