gpt4 book ai didi

php - 我正在使用 fputcsv() 创建一个 .csv 文件,我想在 PHPMailer 中使用 AddAttachment() 来自动发送它

转载 作者:可可西里 更新时间:2023-11-01 08:29:21 25 4
gpt4 key购买 nike

我已经编辑了原始帖子,希望这更切题。我想删除由 fputcsv() 创建的 .csv 文件并将其放入 AddAttachment 并发送。或者,如果您知道如何获取创建的 .csv 文件并将其发送到服务器上的目录,那也很好。我认为最直接的问题是如何获取 fputcsv() 的结果并将其放入 AddAttachments?我是否使用临时文件?

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="file.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

$csvoutput = fopen('php://output', 'w');
$row = getRow($result3);
$headers = array_keys($row);
fputcsv($csvoutput, $headers);

while ($row = getRow($result3)) {

fputcsv($csvoutput, $row);

}

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp.website.com";
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Username = $email_user;
$mail->Password = $email_pass;
$mail->SetFrom("example@example.com", "Ex");
$mail->AddAddress("example@example.com", "Ex");
$mail->isHTML(true);
$mail->WordWrap = 50;
$mail->Subject = "Example";
$mail->Body = "Example";
$result = $mail->Send();



fclose($csvoutput);
exit;

如果我不将它下载到页面,我需要 headers() 吗?

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="file.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

此外,我知道这需要更改:

$csvoutput = fopen('php://output', 'w');

请尽可能详细,我不熟悉使用文件,我找不到专门针对此的教程。

最佳答案

你不能从 php://output 读回。将 CSV 保存到临时文件:

$filename = tempnam(sys_get_temp_dir(), 'my_script_');
$csvoutput = fopen($filename, 'w');

然后在 AddAttachment() 调用中引用该文件的路径:

$mail->addAttachment($filename);
unlink($filename);

或者,如果您不想弄乱临时文件,您可以使用输出缓冲来捕获标准输出。 (因为 fputcsv() 不能直接输出到字符串。)

ob_start();
$fp = fopen('php://output', 'w');
while (...) {
fputcsv(...);
}
fclose($fp);
$csv_string = ob_get_contents();
ob_end_clean();

$mail->addStringAttachment($csv_string,"file_name.csv");

更新:

你可能正在做这样的事情:

$filename = tempnam(sys_get_temp_dir(), 'my_script.csv');

它给你 /tmp/my_script.csvPFj1Lw

你想做这样的事情:

$filename = tempnam(sys_get_temp_dir(), 'my_script_') . '.csv';

哪个给你 /tmp/my_script_H5GVJp.csv

你想要随机字符的原因是为了避免在同时运行多个脚本实例时发生冲突。

关于php - 我正在使用 fputcsv() 创建一个 .csv 文件,我想在 PHPMailer 中使用 AddAttachment() 来自动发送它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com