fputcsv 创建文件但下载为空

fputcsv Creates the file but downloads it empty

我有一段 PHP 代码,用于从 mySQL 数据库中检索数据,并将其导出到 CSV 文件,创建后必须自动下载该文件。

$connection = mysqli_connect($host, $username, $password, $dbname) or die("Connection Error " . mysqli_error($connection));

// fetch mysql table rows
$sql = "select * from users";
$result = mysqli_query($connection, $sql) or die("Selection Error " . mysqli_error($connection));

$fp = fopen('users.csv', 'w');

while($row = mysqli_fetch_assoc($result)) {
    fputcsv($fp, $row);
}

fclose($fp);

header('Content-Type: text/csv');

header('Content-Disposition: attachment; filename="users.csv"');

mysqli_close($connection);

这里的问题是:

谢谢。

您正在将其写入名为 users.csv 的文件,但您强制用户下载的文件是页面的输出。

只要您的查询是正确的,一旦 PHP 脚本有 运行,在与 PHP 相同的目录中应该有一个名为 users.csv 的文件包含正确数据的文件。

您需要将数据输出到浏览器,以便将其归因于您正在下载的文件。

试试这个:

//Connect to database
$connection = mysqli_connect($host, $username, $password, $dbname) or die("Connection Error " . mysqli_error($connection));

//Fetch mysql table rows
$sql = "select * from users";
$result = mysqli_query($connection, $sql) or die("Selection Error " . mysqli_error($connection));

//Close connection
mysqli_close($connection);

//Set $output
$output = "";

//Set header values
$headers = array("Header 1", "Header 2", "Header 3");

//Insert header values to $output
foreach($headers as $h){
    $output .= fieldCheck($h) . ",";
}
$output = rtrim($output, ","). "\n";

//Iterate through results
while($row = mysqli_fetch_assoc($result)) {
    foreach($row as $cell){
        //Comma-separate each value
        $output .= fieldCheck($cell).",";
    }
    //Remove last comma of each line and add newline
    $output = rtrim($output, ",") . "\n";
}

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

//Output
echo $output;

exit;

//Function in case of comma in field
function fieldCheck($string){
    if(strpos($string, ",") !== false){
        $string = '"'.$string.'"';
    }
    return $string;
}