如何上传使用php创建的csv文件?

时间:2013-09-18 13:56:25

标签: php mysql csv

我编写了这段代码,但它只会生成 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);

2 个答案:

答案 0 :(得分: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所说,“由于文件尚未从网络浏览器上传,但是由服务器上的脚本生成......”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);

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

唯一要做的是:

  • 从数据库中获取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)。有关如何执行此操作的更多详细信息,请参阅the manual(和注释!)。

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