Преобразование массива для вывода в виде файла CSV

Я хотел бы загрузить загружаемый CSV файл из таблицы данных, созданной в моем PHP-скрипте. Когда я запускаю скрипт, я получаю запрос на загрузку, однако, когда я его открываю, он просто сбрасывает весь код (включая теги и т.д.) В файл CSV. Все, что мне нужно, это результаты, содержащиеся в таблице. Я отрывал свои волосы от этого! Есть идеи? Heres часть PHP моего скрипта:

<!--?php
session_start();
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename='. 'file.csv');
header('Pragma: no-cache');
header("Expires: 0");

$serverName = "localhost\SQLEXPRESS";
$connectionInfo = array( "Database"=-->"AuServer", "ReturnDatesAsStrings"=>"true");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

$sql = "select top 100 AuEvent.time_stamp, AusDatabase.Title, AuEvent.user_name, AuEvent.rec_id, LogEventDescription.description
 FROM AuEvent
 INNER JOIN LogEventDescription
 ON AuEvent.event_id=LogEventDescription.event_id
 INNER JOIN AusDatabase
 ON AuEvent.db_id=AusDatabase.ID
 WHERE LogEventDescription.lcid='1033'
 ORDER BY time_stamp DESC";

 $stmt = sqlsrv_query( $conn, $sql );
 if( $stmt === false) {
 die( print_r( sqlsrv_errors(), true) );
}

//sort results into an array for the table
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ){
 echo "
 
 ". $row['time_stamp'] . "
 <a href="\" dbfilter.php?id="." $row['title']="" .="" "\"="" target="_blank">". $row['Title'] . "</a>
 <a href="\" userfilter.php?id="." $row['user_name']="" .="" "\"="" target="_blank">". $row['user_name'] . "</a>
 <a href="\" eventfilter.php?id="." $row['description']="" .="" "\"="" target="_blank">". $row['description'] . "</a>
 ". $row['rec_id'] . "
 ";



$fp = fopen('file.csv', 'w');

foreach ($row as $fields) {
fputcsv($fp, $row);
}

}
?>
1 ответ

Если вы хотите создать загружаемый файл, прекратите эхо-данные таблицы

<!--?php

session_start();
$serverName = "localhost\SQLEXPRESS";
$connectionInfo = array("Database" =--> "AuServer", "ReturnDatesAsStrings" => "true");
$conn = sqlsrv_connect($serverName, $connectionInfo);

$sql = "select top 100 AuEvent.time_stamp, AusDatabase.Title, AuEvent.user_name, AuEvent.rec_id, LogEventDescription.description
 FROM AuEvent
 INNER JOIN LogEventDescription
 ON AuEvent.event_id=LogEventDescription.event_id
 INNER JOIN AusDatabase
 ON AuEvent.db_id=AusDatabase.ID
 WHERE LogEventDescription.lcid='1033'
 ORDER BY time_stamp DESC";

$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
 die(print_r(sqlsrv_errors(), true));
}

$fp = fopen('file.csv', 'w');
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
 foreach ($row as $fields) {
 fputcsv($fp, $row);
 }
}

$path = path/to/file;
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: '.filesize($file));
readfile($file);

?>

и если вы хотите как распечатать, так и загрузить файл, тогда

<!--?php

session_start();
$serverName = "localhost\SQLEXPRESS";
$connectionInfo = array("Database" =--> "AuServer", "ReturnDatesAsStrings" => "true");
$conn = sqlsrv_connect($serverName, $connectionInfo);

$sql = "select top 100 AuEvent.time_stamp, AusDatabase.Title, AuEvent.user_name, AuEvent.rec_id, LogEventDescription.description
 FROM AuEvent
 INNER JOIN LogEventDescription
 ON AuEvent.event_id=LogEventDescription.event_id
 INNER JOIN AusDatabase
 ON AuEvent.db_id=AusDatabase.ID
 WHERE LogEventDescription.lcid='1033'
 ORDER BY time_stamp DESC";

$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
 die(print_r(sqlsrv_errors(), true));
}

$fp = fopen('file.csv', 'w');
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
 foreach ($row as $fields) {
 fputcsv($fp, $row);
 }
}

$path = path/to/file;
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: '.filesize($file));
readfile($file);

ob_end_clean();
ob_start();

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
 echo "echo all data here, tr and td etc";
}
ob_flush();
?>

licensed under cc by-sa 3.0 with attribution.