2013-06-24 21 views
11

CSVファイルを強制的にダウンロードするボタンを作成しようとしていますが、何らかの理由でそれを動作させることができません。強制的に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; 
} 

イムはわからないこれは私が持っているコードです。私はこれを行う様々な方法でインターネットを見て、それらのすべてを試しても、それを稼働させることはできません。私を助けてください!あなたはループの下にこのコードを入れて、ヘッダー

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

代わりに何が起こりますか?エラーメッセージ?ファイルは代わりにブラウザに表示されますか?ファイルはダウンロードされますが、壊れていますか? – JJJ

+0

ファイルがダウンロードされず、Firebugを使用してFirebugを使用してボタンの内容を確認すると、このエラーが発生します:500 Internal Server Error – MONZTAAA

答えて

21

後、あなたのコンテンツをechoする必要が

-Thanks

+0

$ shtml = $ shtmlの後またはその直後にヘッダーを置くことを意味します。 $ result [$ i] ..? -Thanks – MONZTAAA

+2

他のデータがブラウザに送信される前に、ヘッダーを送信する必要があります。白い文字でもスクリプトを壊す可能性があります。 – Robert

2

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

echo $shtml; 

どのようにコンテンツタイプapplication/force-downloadを見つけましたか?そのようなことを聞​​いたのは初めてだ。 CSVのための適切なMIMEタイプは、あなたがあなたのコードでそれをしなかったあなたが必要とするも$shtmlを表示php manual

にヘッダー機能を使用するには、どのように多くの例を見つけることができますテキスト/ CSV

です。

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

'header( 'Content-Length:'。$ contLength);'はすでにヘッダが送信されているというエラーを発生させます。 –

関連する問題