Die Array-to-CSV-Exportfunktion hat ein Problem im WordPress-Plugin

Lesezeit: 3 Minuten

Benutzeravatar von dipanjan chakraborty
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

Benutzeravatar von Manoj Swami
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

<?php
$array = Array(
    Array(
        12566,
        'Enmanuel',
        'Corvo'
    ),
    Array(
        56544,
        'John',
        'Doe'
    ),
    Array(
        78550,
        'Mark',
        'Smith'
    )
    
);
arr_to_csv($array);
function arr_to_csv($array)
{
    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=test.csv");
    $fp = fopen('php://output', 'w');
    foreach ($array as $row) {
        fputcsv($fp, $row);
    }
}

1402390cookie-checkDie Array-to-CSV-Exportfunktion hat ein Problem im WordPress-Plugin

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy