-1

我已经编写了这段代码,但它只生成csv 文件,而不是在目录中上传。

$file = 'export';
    $csv_output .= "CustID,CustName,CustMobile,CustEmail\n";

$sql = "select CustID,CustName,CustMobile,CustEmail from dep_customer_details LIMIT 0,10";
$res = mysql_query($sql);
while ($row = mysql_fetch_row($res)) {
 for ($j=0;$j<$res;$j++) {
  $csv_output .= $row[$j].", ";
 }
 $csv_output .= "\n";
}

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
print $csv_output;


$uploaddir = dirname(__FILE__) .'/csv/';
$uploadfile = $uploaddir.$filename;
move_uploaded_file($filename,$uploadfile);
4

2 回答 2

1

此代码将创建一个文件,export_2013-09-18_10-41.csv例如(根据我的执行时间),将其保存在名为csv.

然而,这只是使用 Mark Ba​​ker 的评论file_put_contents($uploadfile,$csv_output);而不使用标题的示例。

之后可以作为附件实施。您需要自己为它找到一个功能。

<?php

$file = 'export';
$csv_output = "CustID,CustName,CustMobile,CustEmail\n";

// Commented out your DB code for you to test 
// my example with above $csv_output fields only.
/*
$sql = "select CustID,CustName,CustMobile,CustEmail from dep_customer_details LIMIT 0,10";
$res = mysql_query($sql);
while ($row = mysql_fetch_row($res)) {
 for ($j=0;$j<$res;$j++) {
  $csv_output .= $row[$j].", ";
 }
 $csv_output .= "\n";
}
*/

$filename = $file."_".date("Y-m-d_H-i",time());

$uploaddir = dirname(__FILE__) .'/csv/';
$uploadfile = $uploaddir.$filename.".".csv;

file_put_contents($uploadfile,$csv_output);

print $csv_output;

// Mail function and headers for file attachment
// can be implemented in this section afterwards

?>

正如 Mark Ba​​ker 还所说,“由于文件尚未从 Web 浏览器上传,而是由服务器上的脚本生成......”move_uploaded_file()通常使用表单和其他指令执行以move创建文件进入文件夹/子文件夹。

因此,使用file_put_contents更适合这种类型的应用程序,因为它会保存到文件而不是上传,这不是您需要的。

有关这两个函数的更多信息,请访问 PHP.net 网站。

于 2013-09-18T14:56:54.603 回答
0

您不必设置这些标题:

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv".date("Y-m-d").".csv");
header("Content-disposition: filename=".$filename.".csv");

因为他们让客户下载文件并可能将其保存在他的硬盘上。您想将其保存在服务器的硬盘上。

您也不需要移动上传的文件

move_uploaded_file($filename, $uploadfile);

因为客户端没有(要)上传文件。

唯一要做的就是:

  • 从数据库中获取 csv 内容;
  • 将它们保存到文件中(仍然是服务器端);

所以这里是代码:

$file = "export";
$csv_output .= "CustID,CustName,CustMobile,CustEmail\n";

$sql = "select CustID,CustName,CustMobile,CustEmail from dep_customer_details LIMIT 0,10";
$res = mysql_query($sql);
while ($row = mysql_fetch_row($res)) {
    for ($j = 0; $j < $res; $j++) {
        $csv_output .= $row[$j].", ";
    }
    $csv_output .= "\n";
}

$uploaddir = dirname(__FILE__)."/csv/";
$uploadfile = $uploaddir.$filename;
file_put_contents($uploadfile, $csv_output); // Just like Mark Baker mentioned

然后就可以读取csv文件的文件内容,放入邮件内容中。

由于您只想邮寄 CSV 文件,因此您可以跳过将文件存储在服务器上并读取它的整个过程。那是因为您可以$csv_output在邮件内容中的某个位置放置。

如何做到这一点,取决于您发送邮件的方式(例如,您是否使用 PHPMailer)。有关如何执行此操作的更多详细信息,请参阅手册(和评论!)。

我还建议您搜索有关该主题的教程。

于 2013-09-18T14:55:12.693 回答