Nasıl IE indirmek için csv dosya alabilirim?

10 Cevap php

Ben garip bir hata ile mücadele ediyorum. Ben indirilebilir bir csv dosyası olarak çıktılar daha sonra DB şeyler kapmak basit bir web uygulaması var. Bu Firefox ve Chrome üzerinde çalışır, ancak IE (bir html fle düşünme) bir csv dosyası olarak tanımak için başarısız olur ve ben hata alıyorum tasarruf ben tıkladığımda, "{sitenin adını} den {dosyanın adını} yüklenemiyor ., bu internet sitesini açılamıyor .... "

Kod:

session_start();

//some logic goes here...  

//generate csv header  
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=exportevent.csv");  
header("Pragma: no-cache");  
header("Expires: 0");  

echo "Event: " . $event_title . "\n";  

//print the column names  
echo "Last Name, First Name, Company \n";  

while($row = mysql_fetch_assoc($result))  
{  
    echo $row['atlname'] . ',' . $row['atfname'] . ',' . $row['atcompany'] . "\n";      
}

Ben içerik-türü bir sürü etrafında oynadım, ama bu hiçbir etkisi vardı.

Güncelleme: Ben application / vnd.ms-excel (ve bu varyasyonları), text / csv denedim, metin / düz, ve ben artık hiçbir şans ile unutmak bazıları.

Bu btw IE8 olduğunu.

Güncelleme 2: bağlantı SSL bitti.

10 Cevap

Biz IE sevmiyor musun? :)

Bu başlıklarını kullanmayı deneyin:

  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  header("Cache-Control: private",false);
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"exportevent.csv\";" );
  header("Content-Transfer-Encoding: binary"); 

Ben octet-stream içerik türü güçleri dosyasını indirmek için IE olduğunu düşünüyorum.

Biz son zamanlarda bu sorunu kendimiz koştu. Bu bak MSKB article

Bunlar SSL üzerinden işe almak için kullanmak zorunda sona erdi başlıkları vardır.

header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$file_name\";");
header("Content-length: " . strlen($csv_string));

Ben aşağıdaki başarı elde ettik:

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=File.csv");

Uygulama türünü ayarlama / vnd.ms-excel benim durumumda hile yapmak gibiydi. Bu, tüm kullanarak bir form göndererek açılan bir dosya olduğunu

target="_blank"

text/csv yerine için içerik türünü belirlemeyi deneyin application/octet-stream.

Application / octet-stream bir genel ikili mim türü (ve '. Csv' uzantısı uymuyor) bu yana, Internet Explorer bunu görmezden ve dosya uzantısına göre mime türünü işlem olabilir.

We have just had the same issue and after adding many headers and getting a working link I then removed them one by one and found the key one for us was "Cache-Control: public" so in the end we just had

header("Cache-Control: public"); 
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=some_filename.csv");

hangi iyi çalıştı.

Nefret IE (herhangi bir sürüm) nefret nefret ... Aslında Nefret nefret nefret, Windows

Benim için bir çözüm oldu:

header_remove(); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename=brokerlist.csv'); 
echo $content;

Text / csv: İçerik-tipi denedin mi?

Bir süre önce ben IE6 pdf dosyaları açma ve AdobeReader 6.0 yüklü ve tarayıcı penceresinde dosyayı açmak için çalıştı zaman çökmesini ile ilgili bir sorun var. Ben bir yerde bu başlığı buldum daha:

header('Content-Type: application/force-download');

Ve bu sorunu çözmüş, her pdf dosyası Adobe yerine IE indirilen ve hizmete açılmıştır.

Bu sadece mantıklı değil. Ben, burada tüm diğer cevapları kabul cevabı denedim, ve bu benim için işe yaramadı. Ben onların permütasyonlarını denedim, ve nedense ben bunu gibi IE'de çalışması yapmak başardı:

 header("Pragma: public");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: public");
 header("Content-Type: application/vnd.ms-exce");
 header("Content-Disposition: attachment; filename=coupons.csv" );
 header("Content-Transfer-Encoding: binary");       
 header("Content-Length: " . strlen($csv)); 
 echo $csv;
 die();

Ben yaptım Bir şey önbelleğe Ben kodu test her zaman hilkat garibesi boşaltmaktır. Ve hala mantıklı değil. Sadece durumda birisi umutsuzca bu gerekebilir ;)

Bu görevi (IE8 indirmek için bir CSV dosyası alma) gerçekleştirmek için çalışıyoruz using Salesforce.com (ön-uç Visualforce olduğunu ve başlıkların tüm ayarlanamaz durumda, sadece bazıları), buraya ne gerek var:

<apex:page cache="true" 
        contentType="application/octet-stream#myAwesomeFileName.csv" 
        showHeader="false" sidebar="false" standardStylesheets="false">
     <apex:outputText value="{!csvContent}" escape="false"/>
</apex:page>

Burada anahtar adet varsayılan expires=0 niteliği ile bağlantılı olarak, aşağıdaki başlıkları elde ki, cache=true gibidir:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");

Ve sonra contentType --- application/octet-stream işinin text/csv IE8 için başarısız olur.