[英]php export mysql table to excel and create a local file, not download
我有这个运行良好的代码,它创建了 Excel 文件并发送给我通过浏览器下载。
我怎样才能使这个代码适应,而不是下载,而是在本地目录中创建相同的文件?
$con = new mysqli($servername, $username, $password, $dbname);
if ($con->connect_error) { //error check
die("Connection failed: " . $con->connect_error);
}
else
{
}
$DB_TBLName = "tblenc";
$filename = "excelfilename"; //your_file_name
$file_ending = "xls"; //file_extention
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=$filename.'.'.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
$sep = "\t";
$sql="SELECT * FROM $DB_TBLName";
$resultt = $con->query($sql);
while ($property = mysqli_fetch_field($resultt)) { //fetch table field name
echo $property->name."\t";
}
print("\n");
while($row = mysqli_fetch_row($resultt)) //fetch_table_data
{
$schema_insert = "";
for($j=0; $j< mysqli_num_fields($resultt);$j++)
{
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
$schema_insert .= "\t";
print(trim($schema_insert));
print "\n";
}
?>
删除文件顶部的标题,而不是打印每一行,而是将其存储到文件中。
如果文件很小,那么您可以像这样使用file_put_contents()
:
$sep = "\t";
$output = '';
$sql = "SELECT * FROM $DB_TBLName";
$resultt = $con->query($sql);
while ($property = mysqli_fetch_field($resultt)) { //fetch table field name
$output .= $property->name."\t";
}
$output .= "\n";
foreach ($resultt as $row) { //fetch_table_data
$schema_insert = "";
foreach ($row as $field) {
if (!isset($field)) {
$schema_insert .= "NULL".$sep;
} elseif ($field != "") {
$schema_insert .= $field.$sep;
} else {
$schema_insert .= $sep;
}
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
$schema_insert .= "\t";
// append a new line to our file output
$output .= trim($schema_insert)."\n";
}
如果你有一个大文件,那么你应该使用fopen()
代替。 您可以使用fwrite()
将每一行fwrite()
保存到一个文件中并节省内存使用量,而不是连接整个输出。
$fp = fopen('data.csv', 'w');
$output = '';
$sql = "SELECT * FROM $DB_TBLName";
$resultt = $con->query($sql);
while ($property = mysqli_fetch_field($resultt)) { //fetch table field name
$output .= $property->name."\t";
}
$output .= "\n";
fwrite($fp, $output);
foreach ($resultt as $row) { //fetch_table_data
$schema_insert = "";
foreach ($row as $field) {
if (!isset($field)) {
$schema_insert .= "NULL".$sep;
} elseif ($field != "") {
$schema_insert .= $field.$sep;
} else {
$schema_insert .= $sep;
}
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
$schema_insert .= "\t";
// append a new line to our file output
fwrite($fp, trim($schema_insert)."\n");
}
// close file pointer
fclose($fp);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.