2013-06-24 13 views
11

मैं एक बटन बनाने की कोशिश कर रहा हूं जो एक CSV फ़ाइल डाउनलोड को मजबूर करेगा लेकिन किसी कारण से मैं इसे काम नहीं कर पा रहा हूं।फोर्स डाउनलोड सीएसवी फ़ाइल

public function export_to_csv($result) { 

$shtml=""; 

for ($i=0; $i<count($result); $i++){ 

$shtml = $shtml.$result[$i]["order_number"]. "," .$result[$i]["first_name"]. "," .$result[$i]["middle_name"]. "," .$result[$i]["last_name"]. "," .$result[$i]["email"]. "," .$result[$i]["shipment_name"]. "," .$result[$i]["payment_name"]. "," .$result[$i]["created_on"]. "," .$result[$i]["modified_on"]. "," .$result[$i]["order_status"]. "," .$result[$i]["order_total"]. "," .$result[$i]["virtuemart_order_id"]. "\n"; 

} 

Header('Content-Description: File Transfer'); 
Header('Content-Type: application/force-download'); 
Header('Content-Disposition: attachment; filename=pedidos.csv'); 

} 

$ परिणाम चर यहाँ से आता है::

public function get_orders_k() { 

$db=JFactory::getDBO(); 

    $query = " select o.order_number, o.virtuemart_order_id, o.order_total, o.order_status, o.created_on, o.modified_on, u.first_name,u.middle_name,u.last_name " 
    .',u.email, pm.payment_name, vsxlang.shipment_name ' . 
    $from = $this->getOrdersListQuery(); 

$db->setQuery($query); 

$result=$db->loadAssocList(); 

    if ($result > 0) 
    { 
     $datos = VirtueMartModelKiala::export_to_csv($result); 

    }else return 0; 
} 

इम यकीन है कि यहां तक ​​कि जहां तलाश शुरू करने के लिए नहीं इस कोड है कि मैं है। मैंने ऐसा करने के विभिन्न तरीकों से इंटरनेट पर ध्यान दिया है और उन सभी की कोशिश की है और अभी भी इसे काम करने के लिए प्रबंधित नहीं कर सकते हैं। कृपया मेरी मदद करें!

शुक्रिया

+1

तो इसके बजाय क्या होता है? त्रुटि संदेश? क्या फ़ाइल ब्राउज़र में प्रदर्शित होती है? क्या फाइल डाउनलोड है लेकिन टूटा हुआ है? – JJJ

+0

फ़ाइल डाउनलोड नहीं होती है और जब मैं फ़ायरफ़ॉक्स का उपयोग उदाहरण के लिए करता हूं और फ़ायरबग का उपयोग करता हूं यह देखने के लिए कि मुझे यह त्रुटि क्या मिलती है: 500 आंतरिक सर्वर त्रुटि – MONZTAAA

उत्तर

21

अपने पाश नीचे इस कोड डाल के बाद अपनी सामग्री echo की जरूरत है।

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename="pedidos.csv"'); 

echo $shtml; 

सामग्री प्रकार एप्लिकेशन/बल डाउनलोड कैसे किया गया? मैंने इसके हारे में नहीं सुना है। सीएसवी के लिए उचित MIME प्रकार पाठ/सीएसवी

आप अधिक उदाहरण कैसे php manual

में हेडर समारोह का उपयोग करने के लिए आप की जरूरत भी $shtml प्रदर्शित आप अपने कोड में यह नहीं किया मिल सकती है।

+0

आपका मतलब हेडर को $ shtml = $ shtml के बाद या उसके बाद सही है। $ परिणाम [$ i] ..? - धन्यवाद – MONZTAAA

+2

किसी अन्य डेटा को ब्राउज़र पर भेजे जाने से पहले शीर्षलेख भेजे जाने चाहिए। यहां तक ​​कि सफेद चरित्र भी स्क्रिप्ट तोड़ सकता है। – Robert

2

आप हेडर

header('Content-Description: File Transfer'); 
header('Content-Type: application/force-download'); 
header('Content-Disposition: attachment; filename=pedidos.csv'); 
echo $shtml 
4

अच्छा। आप इसे आज़मा सकते हैं, यदि आपका परिणाम खाली नहीं है तो यह काम करेगा

public function export_to_csv($result) 
{ 
    if(!$result) return false; 
    ob_end_clean(); 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment;filename=pedidos.csv'); 
    $fp = fopen('php://output', 'w'); 
    $headrow = $result[0]; 
    fputcsv($fp, array_keys($headrow)); 
    foreach ($result as $data) { 
     fputcsv($fp, $data); 
    } 
    fclose($fp); 
    $contLength = ob_get_length(); 
    header('Content-Length: '.$contLength); 
} 
+0

'हेडर ('सामग्री-लंबाई:'। $ ContLength); 'एक त्रुटि उत्पन्न होगी जो हेडर पहले ही भेजे गए हैं। –

संबंधित मुद्दे