首页 > 解决方案 > 从 WordPress 下载 mySQL 表作为制表符分隔文件

问题描述

我在 WordPress 表单上有一个按钮,它触发了一个排队脚本,目的是创建一个 mySQL 表提取并将其作为制表符分隔的文件下载到用户的 PC。路由工作正常。我可以从表中提取数据并对其进行格式化。我只是不知道如何使用 PHP Header 和资源指令触发下载。任何帮助,将不胜感激。

代码片段如下:

<?php
function agp_export_csv_table()
{
// =============================================================================
// This function retrieves data from the enquiries table and exports it to a
// tab delimited Excel file
// =============================================================================
    global $wpdb, $bp;
    $query = "SELECT * FROM {$wpdb->prefix}ppl_enquiries";
    $results = $wpdb->get_results($query, ARRAY_A);

    $filename = "Export_excel.xls";
    header("Content-Disposition: attachment; filename=" . $filename);
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Length: " . filesize($filename));

    $file = fopen($filename, 'w');

    $blnHeaderDone = false;

    if (!empty($results)) {
        foreach ($results as $row) {
            if (!$blnHeaderDone) {
                fwrite($file, implode("\t", array_keys($row)) . "\r\n");
                $blnHeaderDone = true;
            }
            fwrite($file, implode("\t", array_values($row)) . "\r\n");
        }
    }
    fclose($file);
    exit();
}

?>

我的期望是这应该会在用户的浏览器中触发下载对话,但我什么也没得到,而且我看不到在服务器端或本地 PC 上生成了任何输出。我没有看到任何 PHP 或 javascript 错误。

标签: phpwordpress

解决方案


关闭文件后,您将不得不使用标题。

            fclose($fp);

            header("Content-Disposition: attachment; filename=\"" . basename($filename) . "\"");
            header("Content-Type: application/text");
            header("Content-Length: " . filesize($filename));
            readfile($filename);
            header("Connection: close");

            exit;

推荐阅读