php - 从 Mysql 导出数据并输出到 CSV 允许另存为

标签 php mysql csv export

我想从 mysql 导出数据并将其导出为 CSV(允许下载)或通过电子邮件发送。

问题:CSV 文件为空。当下载开始时,文件是空的..

<?php
    require_once("../dbconnection/dbcon.php"); 

if(isset($_POST['download']))
{
    $filName = "customer.csv";
    $objWrite = fopen("customer.csv", "w");

    $query = "SELECT * FROM user";
    $run=mysqli_query($con,$query);

    while($objResult = mysqli_fetch_array($run))
    {
        fwrite($objWrite, "\"$objResult[username]\",\"$objResult[password]\",\"$objResult[name]\",");
        fwrite($objWrite, "\"$objResult[email]\",\"$objResult[role]\",\"$objResult[satus]\" \n");
    }
    fclose($objWrite);
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Length: " . strlen($out));
    // Output to browser with appropriate mime type, you choose ;)
    //header("Content-type: text/x-csv");
    //header("Content-type: text/csv");
    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=$filName");

}

exit;
?>

我的用于通过电子邮件发送 CSV 的代码有效

<?php
$filName = "customer.csv";
$objWrite = fopen("customer.csv", "w");

require_once("../dbconnection/dbcon.php");

$query = "SELECT * FROM user";
$run=mysqli_query($con,$query);

while($objResult = mysqli_fetch_array($run))
{
    fwrite($objWrite, "\"$objResult[username]\",\"$objResult[password]\",\"$objResult[name]\",");
    fwrite($objWrite, "\"$objResult[email]\",\"$objResult[role]\",\"$objResult[satus]\" \n");
}
fclose($objWrite);

//*************** Send Email ***************//

$strTo = "my email";
$strSubject = "CSV Report";
$strMessage = "Download $filName for CSV Report";

//*** Uniqid Session ***//
$strSid = md5(uniqid(time()));

$strHeader = "";
$strHeader .= "From: RecruitMate | Murdoch University<recruitmate.mur@gmail.com>\nReply-To: recruitmate.mur@gmail.com\n";


$strHeader .= "MIME-Version: 1.0\n";
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
$strHeader .= "This is a multi-part message in MIME format.\n";

$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-type: text/html; charset=windows-874\n"; // or UTF-8 //
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";
$strHeader .= $strMessage."\n\n";

$strContent1 = chunk_split(base64_encode(file_get_contents("$filName")));
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$filName."\"\n";
$strHeader .= "Content-Transfer-Encoding: base64\n";
$strHeader .= "Content-Disposition: attachment; filename=\"".$filName."\"\n\n";
$strHeader .= $strContent1."\n\n";

$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error //
if($flgSend)
{
echo "CSV Generated & Email Sending.";
}
else
{
echo "Email Can Not Send.";
}

?>

最佳答案

正如我所提到的 - 您的下载代码除了发送 header 之外什么也不做。但您不发送文件内容。最简单的方法是使用readfile:

// some headers here
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filName");
readfile($filName);
exit;

关于php - 从 Mysql 导出数据并输出到 CSV 允许另存为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524784/

相关文章:

sql - Mysql查找相似行的建议

powershell - 在Powershell中比较属性

python - 如何使用 csv 将列表编写为单独的元素?

java - 如何根据一列对一维(或二维)数组(多维)进行排序?

javascript - 如何查看 Facebook 发送给我的网络请求

php - 有选择地将数据从一个表拆分并保存到另一个mysql

PHPmyadmin 中的 mysql #1064 错误

php - 使用 PHP 按搜索查询在字符串中的位置对来自 MySQL 的搜索结果进行排序

php - 图片“http ://localhost/chart/graph. php”无法显示,因为它在 PHPGraphLib 中包含错误

php - 我想显示各个俱乐部的所有球员,但在 laravel 的表格中遇到一些问题