2013-10-14 14 views
9

Ho una piccola funzione, che crea il documento .xls (usando PHPexcel) e poi lo invia a php: // output. Quindi scaricalo dall'utente.
Tutto funziona correttamente, ad eccezione del safari su Mac OS X che aggiunge l'estensione .html per qualche motivo.
Quindi il file risultante è denominato report.xls.html. Il contenuto è ok, ma è fastidioso per gli utenti.Safari aggiungendo .html per scaricare

Come posso risolvere questo?

Ecco parte del mio codice:

$filename = 'report.xls'; 

header('Content-Description: File Transfer'); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="'.$filename.'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Connection: Keep-Alive'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 
$objWriter->save('php://output'); 

risposta

19

Ho avuto lo stesso problema

risolto con uscita; alla fine dello script

$filename = 'report.xls'; 
header('Content-Description: File Transfer'); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="'.$filename.'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Connection: Keep-Alive'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 
$objWriter->save('php://output'); 
exit; 
+0

Grazie a Dio che questa soluzione funziona, ma posso chiederti perché "exit" risolve il problema? – cytsunny

1

Si può provare questa intestazione:

header('Content-type: application/ms-excel'); 

o controllare http://www.solutionoferror.com/php/phpexcel-not-downloading-in-mobile-safari-81107.asp.

+0

Non cambia nulla. Inoltre non è corretto il mime per xls .. – Davinel

+0

puoi usare javascript window.location.href = "http://stackoverflow.com/file.xls"; e apri quella fonte xls –

+0

Beh, tipo di lavoro. Non molto elegante, ma sì, se prima salvavo il file e poi puntato il browser su di esso, esso viene salvato come .xls. Puoi postarlo come risposta, quindi posso accettarlo? – Davinel

0

È possibile utilizzare codice javascript

<script> 
window.location.href = "stackoverflow.com/file.xls"; 
</script> 

Questo aprirà quella fonte xls e file sarà disponibile per il download

0

Per chiunque abbia questo problema è il browser a fare la sua cosa. L'utilizzo di JavaScript ha funzionato per me, ma è necessario aggiungere HTML che utilizzare JavaScript per l'output nel browser.

<!doctype html> 
<html> 
    <head> <meta charset="UTF-8"> <title>Untitled ocument</title> </head> 
    <body> 
      <script> window.location.href = http://example/file.docx"; </script> 
    </body> 
</html> 
0

Se qualcuno sta ancora affrontando sopra problema

Si prega di modificare il tipo di contenuto come

header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
Problemi correlati