#php #export-to-excel
#php #экспорт в excel
Вопрос:
У меня есть этот код, который работает хорошо, он создает файл 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("/rn|nr|n|r/", " ", $schema_insert);
$schema_insert .= "t";
print(trim($schema_insert));
print "n";
}
?>
Комментарии:
1.измените print на
file_put_contents()
Если сомневаетесь, прочитайте руководство по PHP или откройте файл и запишите в него Руководство должно быть вашим первым портом захода не ТАК
Ответ №1:
Удалите заголовки в верхней части файла и вместо печати каждой строки сохраните ее в файле.
Если файл довольно маленький, вы можете использовать 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("/rn|nr|n|r/", " ", $schema_insert);
$schema_insert .= "t";
// append a new line to our file output
$output .= trim($schema_insert)."n";
}
Если у вас большой файл, вам следует использовать fopen()
вместо этого. Вместо объединения всего вывода, вы можете сохранить каждую строку отдельно прямо в файл, используя 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("/rn|nr|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);