我编写了这段代码,但它只会生成 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);
答案 0 :(得分:1)
此代码将创建一个带export_2013-09-18_10-41.csv
的文件(根据我的执行时间)
它将其保存在名为csv
的子文件夹中。
然而,这只是使用Mark Baker的评论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 Baker所说,“由于文件尚未从网络浏览器上传,但是由服务器上的脚本生成......”,move_uploaded_file()
是通常使用表单和其他指令执行,以便将move
创建的文件放入文件夹/子文件夹中。
因此,使用file_put_contents
更适合此类应用,因为它会保存到文件而不上传,这不是您所需要的。
有关这两项功能的更多信息,请访问PHP.net网站。
答案 1 :(得分: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);
因为客户端没有上传文件。
唯一要做的是:
所以这是代码:
$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)。有关如何执行此操作的更多详细信息,请参阅the manual(和注释!)。
我还建议您搜索有关该主题的教程。