如何在通过电子邮件发送.csv文件后使用PHP下载.csv文件?

如何在通过电子邮件发送.csv文件后使用PHP下载.csv文件?,php,Php,发送电子邮件后,如何将.csv文件下载到客户端计算机?(打开文件对话框)要将CSV文件发送到浏览器,您需要提供适当的标题,然后将其数据发送到输出缓冲区: $mailflg = $SiteObj->Sendsmtpmail($FromMail,$Email,"Check",$trackerCode,$smtpDetails); if(!$mailflg) { $myFile = "../csv/".$my_file_name; $smtpDetails['Test'

发送电子邮件后,如何将.csv文件下载到客户端计算机?(打开文件对话框)

要将CSV文件发送到浏览器,您需要提供适当的标题,然后将其数据发送到输出缓冲区:

$mailflg = $SiteObj->Sendsmtpmail($FromMail,$Email,"Check",$trackerCode,$smtpDetails);

if(!$mailflg)
{
    $myFile = "../csv/".$my_file_name;
        $smtpDetails['Test'] = "FAIL";
    $file = @fopen($myFile, "a");
    if($file)
    {
        fwrite($file,$smtpDetails['HOST']. ",".$smtpDetails['USER'].",".$smtpDetails['PASSWORD'].",".$smtpDetails['PORT'].",".$smtpDetails['NOEMAIL'].",".$smtpDetails['SSL'].",".$smtpDetails['FROM'].",".$smtpDetails['Test']. "\r\n");
        fclose($file);
    }
}
else
{
    $myFile = "../csv/".$my_file_name;
    $smtpDetails['Test'] = "SEND";
    $file = @fopen($myFile, "a");
    if($file)
    {
        fwrite($file,$smtpDetails['HOST']. ",".$smtpDetails['USER'].",".$smtpDetails['PASSWORD'].",".$smtpDetails['PORT'].",".$smtpDetails['NOEMAIL'].",".$smtpDetails['SSL'].",".$smtpDetails['FROM'].",".$smtpDetails['Test']. "\r\n");
        fclose($file);
    }
}

通常,CSV是通过以下方式下载的:

// Your other file handling code above here....
if($file)
{
  fwrite($file,$smtpDetails['HOST']. ",".$smtpDetails['USER'].",".$smtpDetails['PASSWORD'].",".$smtpDetails['PORT'].",".$smtpDetails['NOEMAIL'].",".$smtpDetails['SSL'].",".$smtpDetails['FROM'].",".$smtpDetails['Test']. "\r\n");
  fclose($file);

  // The file was written and closed, now send it to the browser...
  header("Content-type: text/csv");
  header("Content-description: File Transfer");
  header("Content-disposition: attachment; filename=\"thefilename.csv\"");
  header("Pragma: public");
  header("Cache-control: max-age=0");
  header("Expires: 0");

  // readfile() will progressively read from disk and send data to the output buffer
  readfile($myFile);
}

我想在我的csv文件中写入主机、用户和密码,对吗。之后,我想下载csv文件,我得到了下载提示,但当我得到下载的文件时,我得到了带有设计页面代码的数据…–

我想猜猜你的意思,所以我提供了三种可能,我可以为你的情况想出

1) 如果您的意思是,当您从命令行运行CSV时,它可以工作,但当您使用浏览器时,它会显示PHP代码,请确保您的web服务器已设置为正确运行PHP代码。制作一个类似test.php的测试程序:

/* Set your headers: */
//Content type.
header("Content-type: application/csv");
//replace file.csv with whatever you want to have as a file.
header("Content-Disposition: attachment; filename=file.csv");
// Prevent caching.
header("Pragma: no-cache");
header("Expires: 0");

readfile('/path/to/file');

确保您在浏览器中看到的只是“测试输出”,而不是php代码。PHP3+要求OpenTag默认使用“PHP”一词,这与以前的版本不同,在以前的版本中,您可以只使用问号

给出的答案已经是正确的,并且不会导致下载文件中出现PHP代码

2) 如果“设计页面代码”是指在浏览器中看到HTML和其他非PHP、非CSV输出,请确保在提供前面答案中给出的CSV标题后,不会向浏览器输出任何进一步的数据。例如,放一个“exit;”在读取文件或获取文件内容之后

这将防止在下载的CSV文件中显示任何额外的HTML或etc。在代码中写入CSV文件以供下载的部分,您无法控制下载后的浏览器行为。在提供下载框之前,您需要在HTML中这样做,例如,如果您放置一个显示下载CSV的链接的页面,那么您可以在链接上使用javascript控制浏览器,或者让它停留在当前页面上

3) 如果“设计页面代码”的意思是文件没有真正下载,并且您在浏览器的网页上看到了CSV,请确保在CSV输出之前调用“header()”函数之前,脚本没有向浏览器输出任何内容。例如,确保没有PHP print()或echo()调用,并且在任何包含的文件中,在打开PHP标记之前或关闭标记之后的PHP文件中没有空白链接。通常,在仅表示为包含文件的PHP文件中,由于这个原因,您甚至不应该放置结束标记


请提供您希望完成的任务的完整描述,并解释哪些工作没有按预期进行。没有工作,实际上我得到的是我的设计页面代码,而不是用户名、密码等part@user817442我不知道你在说什么。您的问题是如何让浏览器提示保存CSV文件。我的代码就是这样做的。@cwallenpole的答案也是如此。你可以在fclose之后复制粘贴@Michael的答案。我想在我的csv文件中写入主机、用户和密码,对吗。在那之后,我想下载csv文件,我得到了下载提示,但当我得到下载的文件时,我用我的设计页面代码得到了数据……正如@LawrenceGS在下载csv时指出的那样,将我的代码粘贴在你的
fclose()
之后,文件将被发送到浏览器。
<?php echo 'Test Output'; ?>