php экспортирует таблицу mysql в Excel и создает локальный файл, а не загружает

#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);