0

社区,

我目前正在研究报告生成器。报告生成器的目标是发送一封带有 excel 文档的电子邮件,其中包含来自 sql 表的每周信息。它在星期一当天第一个人登录时激活。如果星期一是节假日,并且当天没有人登录,则不会在数据库中制作时间戳。当用户在星期二登录时,它会查看最后一个时间戳以查看是否为前一天放置了一个。如果没有,它将在星期二触发。

这个过程的第一步看起来像这样......

$today = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y"));
$yesterday = date('Y-m-d', strtotime($date .' -1 day'));
$holiday = false;
if(jddayofweek($today,1) == 'Tuesday')
{
    if(mysql_num_rows(mysql_query("select report_date from report_builder where report_date = '{$yesterday}'")) == 0)
    {
        $holiday = true;
    }
}
if(jddayofweek($today,1) == 'Monday' || $holiday === true)
{
    $today = mysql_query("select report_date from report_builder where report_date = CURDATE()");
    if(mysql_num_rows($today) == 0)
    {
        $date = date('Y-m-d H:i:s',time()-(7*86400));
        mysql_query("INSERT into report_builder (report_date) VALUES (CURDATE())");

//这里有更多代码

**此特定帖子的问题如下:

是否可以将信息发送到实际未打开的 csv 文件以便用户查看,而是保存到临时文件中?这可以通过不发送背景 html 的方式来完成吗?**

一旦完成,我想使用我当前的代码将文件发送给用户,看起来像这样......

require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->From = "**********";
$mail->AddAddress("*************");
$mail->Subject = "Test";
$mail->Body = "HI";
$fileName = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$fileName = addslashes($fileName);
echo $fileName;
$mail->AddAttachment("temporary file path");
if(!$mail->Send())
{
    echo 'Message was not sent.';
    echo 'Mailer error:'.$mail->ErrorInfo;
}
4

1 回答 1

2

是的,您当然可以将文件写入磁盘并以多种方式保存。但是,如果您的应用程序服务器和 MySQL 位于同一物理主机上,我将向您指出一些可能是节省一些步骤的快速方法(即不必在 PHP 中创建文件)。这当然是假设 CSV 文件是合适的(即您实际上不需要使用 PHP Excel 库来构建 XLS 或 XLSX 文件)

SELECT [fields] INTO OUTFILE '/path/to/file'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM your_table;

这将直接在机器上的位置创建一个 CSV,path/to/file然后可以通过 PHP 发送。请注意,文件名不能是现有文件名,因为这种方法不允许您覆盖现有文件。

如果您的 MySQL 主机是远程的,或者您需要在写入文件之前对数据进行操作,我建议您查看fputcsv()http://php.net/manual/en/function.fputcsv.php)以便从您的直接查询 CSV 格式的文件。

$file = fopen('/path/to/file.csv', 'w');

while ($row = [YOUR DATABASE FETCH HERE]) {
    fputcsv($file, $row);
}
于 2013-10-07T16:43:33.810 回答