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

时间:2011-06-27 13:27:28

标签: php

$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文件下载到客户端计算机? (打开文件对话框)

3 个答案:

答案 0 :(得分:2)

要将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);
}

答案 1 :(得分:1)

通常,以这种方式下载CSV:

/* 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');

答案 2 :(得分:1)

  

我想在我的csv文件中编写主机,用户,密码,对。之后我想下载那个csv文件我得到了下载提示但是当我得到那个下载文件时我用我的设计页面代码得到了这些数据...... -

我正在猜测你的意思,所以我提供了3种可能的想法,为你的情况。

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

<?php echo 'Test Output'; ?>

并确保您在浏览器中看到的所有内容都是“测试输出”,而不是PHP代码。 PHP 3+要求open标签默认使用“php”一词,这与之前的版本相反,你可以使用问号。

已经给出的答案是正确的,不应该在下载的文件中导致PHP代码。

2)如果通过“设计页面代码”,您意味着在浏览器中看到HTML和其他非PHP,非CSV输出,请确保在提供CSV标题后不向浏览器输出任何其他数据在之前的答案中给出。例如,放一个'退出;'紧跟在readfile或get_file_contents之后。

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

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

http://www.sitepoint.com/should-you-close-your-php-code-tags/