Die Array-to-CSV-Exportfunktion hat ein Problem im WordPress-Plugin
Lesezeit: 3 Minuten
dipanjan chakraborty
Ich verwende eine einfache Array-zu-CSV-Exportfunktion auf meiner Plugin-Seite zum Generieren eines Berichts.
Wenn ich diesen Code ausführe, erhalte ich eine Fehlermeldung, dass der gesamte HTML-Inhalt zusammen mit meinem erwarteten Array exportiert wird.
Hier ist mein Code:
function convert_to_csv($input_array, $output_file_name, $delimiter)
{
clearstatcache();
/** open raw memory as file, no need for temp files */
$temp_memory = fopen('php://memory', 'w');
/** loop through array */
foreach ($input_array as $line) {
/** default php csv handler **/
fputcsv($temp_memory, $line, $delimiter);
}
//echo '<pre>';
//print_r($temp_memory); exit;
/** rewrind the "file" with the csv lines **/
fseek($temp_memory, 0);
/** modify header to be downloadable csv file **/
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
/** Send file to browser for download */
fpassthru($temp_memory);
}
/** Array to convert to csv */
$array_to_csv = Array(
Array(12566,
'Enmanuel',
'Corvo'
),
Array(56544,
'John',
'Doe'
),
Array(78550,
'Mark',
'Smith'
)
);
clearstatcache();
convert_to_csv($array_to_csv, 'report.csv', ',');
Ich erhalte keine Fehlermeldung, wenn ich diesen Code ausführe. Ich lade die CSV wie erwartet herunter.
– Rasklatt
23. April 2015 um 7:18 Uhr
Wenn ich diesen Code in meiner Plugin-Umgebung in WordPress ausführe, erhalte ich CSV, das den gesamten HTML-Code mit der Liste anzeigt
– dipanjan chakraborty
23. April 2015 um 8:30 Uhr
Der Code läuft wie erwartet für mich und eine CSV-Datei wird heruntergeladen. Fügen Sie Informationen zum Plug-in und zur WordPress-Version hinzu, damit wir dies herausfinden können.
– geeves
18. November 2016 um 16:12 Uhr
Hast du irgendeine Art von Debugging aktiviert (WP_DEBUG auf true oder XDebug setzen)? Wenn dies der Fall ist, könnte dies möglicherweise dazu beitragen, dass überflüssiges HTML mit Ihrer CSV-Datei gerendert wird.
– Paul Wenzel
15. Mai 2018 um 19:12 Uhr
Ich vermute, dass WP nach dem Aufruf dieser Funktion mit seinen normalen Operationen fortfährt, sodass Sie die Ausgabe der HTML-Vorlage nach der CSV-Datei erhalten. Einsetzen exit Aussage nach fpassthru sollte es tun, aber Sie müssen darauf achten, dass dies nichts anderes durcheinander bringt, was WordPress am Ende jeder Seitenantwort tut. Drupal zum Beispiel hat eine drupal_exit() Funktion nur für diesen Zweck. Ich bin mit WP nicht vertraut genug, um es sicher zu wissen, aber die Dokumentation für die wp_die() Funktion schlägt vor, dass Sie PHP verwenden können exit ohne allzu viele Probleme
Manoj Swami
Sie können diesen Code verwenden, um eine Excel-Datei mit der Erweiterung .xlsx zu generieren
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/alasql/0.3/alasql.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.7.12/xlsx.core.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var insuranceArray = new Array(insuranceInfo);
var bills = db.bills;
//Create tabs in excel file
var opts = [{sheetid:'Insurance Information',header:true},{sheetid:'bills Info',header:false}];
alasql('SELECT * INTO XLSX("Data.xlsx",?) FROM ?', [opts, insuranceArray,bills]]);
// Close the window once you save the file
window.onfocus=function(){
window.close();
}
</script>
Dieser Code funktioniert bei mir…
Versuchen Sie dies oben in der Exportfunktion.
global $wpdb;
$wpdb->hide_errors();
@set_time_limit(0);
if ( function_exists( 'apache_setenv' ) )
@apache_setenv( 'no-gzip', 1 );
@ini_set('zlib.output_compression', 0);
//@ob_clean();
@ob_end_clean(); // to prevent issue that unidentified characters when opened in MS-Excel in some servers
header( 'Content-Type: text/csv; charset=UTF-8' );
header( 'Content-Disposition: attachment; filename=export.csv' );
header( 'Pragma: no-cache' );
header( 'Expires: 0' );
$fp = fopen('php://output', 'w');
Die einfachste Möglichkeit, CSV zu generieren, ohne die Datei auf dem Server zu speichern
Ich erhalte keine Fehlermeldung, wenn ich diesen Code ausführe. Ich lade die CSV wie erwartet herunter.
– Rasklatt
23. April 2015 um 7:18 Uhr
Wenn ich diesen Code in meiner Plugin-Umgebung in WordPress ausführe, erhalte ich CSV, das den gesamten HTML-Code mit der Liste anzeigt
– dipanjan chakraborty
23. April 2015 um 8:30 Uhr
Der Code läuft wie erwartet für mich und eine CSV-Datei wird heruntergeladen. Fügen Sie Informationen zum Plug-in und zur WordPress-Version hinzu, damit wir dies herausfinden können.
– geeves
18. November 2016 um 16:12 Uhr
Hast du irgendeine Art von Debugging aktiviert (
WP_DEBUG
auf true oder XDebug setzen)? Wenn dies der Fall ist, könnte dies möglicherweise dazu beitragen, dass überflüssiges HTML mit Ihrer CSV-Datei gerendert wird.– Paul Wenzel
15. Mai 2018 um 19:12 Uhr