Nasıl otomatik olarak PHP Dosyaya başlamalı?

4 Cevap php

Eğer otomatik bir bağlantı ziyaret edildiğinde tarayıcı yerel makineye bir dosya indirmek için PHP eklemek için ne kod gerekiyor?

Eğer yazılımın adını tıklayın sonra ben özellikle diske bir dosya kaydetmek için kullanıcı istemi indirme siteleri benzer işlevsellik düşünüyorum?

4 Cevap

Dosyayı çıktısı önce şu başlıkları gönder:

header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/force-download");
header("Content-Length: " . filesize($File));
header("Connection: close");

@ Grom: 'application / octet-stream' MIME türü hakkında ilginç. Ben farkında değildim, her zaman sadece 'application / force-indir' kullanmış :)

İşte pdf geri gönderiyor bir örnektir.

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);

@Swish I (IE ve Firefox test) farklı bir şey yapmak için application / force-indirme içerik türünü bulamadık. Gerçek MIME türünü geri göndermiyor için bir neden var mı?

Ayrıca PHP kılavuzda Hayley Watson yayınlanmıştır:

Yerine işlenmiş olma, indirilebilir ve kaydedilecek bir dosya zorlamak isterseniz, "application / force-indirme" gibi bir MIME türü olduğunu unutmayın. Bu durumda kullanmak için doğru tip "application / octet-stream" olduğunu ve başka bir şey kullanmadan sadece müşteriler tanınmayan MIME türleri görmezden ve yerine "application / octet-stream" (referans kullanmak gerekiyordu gerçeğine güvenerek: Bölümler 4.1.4 ve RFC 2046 4.5.1).

Ayrıca uygun IANA, kayıtlı olmayan bir uygulama / force-indirme türü vardır.

Temiz bir örnek.

<?php
    header('Content-Type: application/download');
    header('Content-Disposition: attachment; filename="example.txt"');
    header("Content-Length: " . filesize("example.txt"));

    $fp = fopen("example.txt", "r");
    fpassthru($fp);
    fclose($fp);
?>

benim kod txt, doc, docx, pdf, ppt, pptx, jpg, png, zip uzantıları için çalışıyor ve ben açıkça gerçek MIME türlerini kullanmak, onun daha iyi düşünüyorum.

$file_name = "a.txt";

// extracting the extension:
$ext = substr($file_name, strpos($file_name,'.')+1);

header('Content-disposition: attachment; filename='.$file_name);

if(strtolower($ext) == "txt")
{
    header('Content-type: text/plain'); // works for txt only
}
else
{
    header('Content-type: application/'.$ext); // works for all extensions except txt
}
readfile($decrypted_file_path);