[英]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.