Neyse kullanıcı için 'Aç / Kaydet' diyalog getirmek için?

3 Cevap php

Başlık mantıklı değil emin eğer üzgünüm ... temelde ben istemci makine üzerinde otomatik olarak açmak istedim Word belgeleri üreten değilim, ama bu mümkün değil, öyle görünüyor yerine sadece bir listesini sunmak ve onları elle tıklatın sahip en azından bu 'Bu dosyayı kaydetmek veya açmak ister misiniz' diyalog getirebilir eğer her birinin üzerine, ben merak ediyorum: (

Uzun çekim, ama şeyler indirdiğinizde sitelerinde bir sürü bunu biliyorum ... server vb indirmek için yeniden yönetmenlik

Teşekkürler

3 Cevap

Yapabileceğiniz en iyi Content-eğilim başlığı ile bir "ipucu" sağlamaktır.

http://php.net/manual/en/function.header.php

Gibi bir şey belirtme

<?php
header('Content-type: application/msword');

header('Content-Disposition: attachment; filename="downloaded.pdf"');

// output content of document
?>

, belgeyi indirmek için kullanıcı istemi için en tarayıcılarını neden gerekirken bu:

header('Content-Dispotion: inline')

genellikle mevcut penceresinde dosyayı göstermek için tarayıcı neden olmalıdır.

Sen tarayıcıda kaydetmek / açık iletişim kutusunu açmak için içeriktipi ve içerik-disposition başlığını ayarlayabilirsiniz.

Görmek

Header Field Definition

Ayrıntılar için.

Siz böylece doğru başlık göndermek ve gerek.

Ben iyi görünüyor this bulundu:

<?php
function send_file($name) {
  ob_end_clean();
  $path = "protected/".$name;
  if (!is_file($path) or connection_status()!=0) return(FALSE);
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Content-Type: application/octet-stream");
  header("Content-Length: ".(string)(filesize($path)));
  header("Content-Disposition: inline; filename=$name");
  header("Content-Transfer-Encoding: binary\n");
  if ($file = fopen($path, 'rb')) {
    while(!feof($file) and (connection_status()==0)) {
      print(fread($file, 1024*8));
      flush();
    }
    fclose($file);
  }
  return((connection_status()==0) and !connection_aborted());
}
?>

Ve burada işlevini kullanarak bir örnek:

<?php
if (!send_file("platinumdemo.zip")) {
die ("file transfer failed");
// either the file transfer was incomplete
// or the file was not found
} else {
// the download was a success
// log, or do whatever else
}
?>