Powiedzmy, że mam bazę danych ... czy istnieje sposób, w jaki mogę wyeksportować to, co mam z bazy danych do pliku CSV (i pliku tekstowego [jeśli to możliwe]) przez PHP?
na lokalnym serwerze działa, ale na odległym wyświetla nową stronę z zawartością i bez okna pobierania (przepraszam za mój angielski)
khaled_webdev
2
Przyczyn błędów może być kilka, najprostszym sposobem ich znalezienia jest przejrzenie pliku apache error.log.
Alain Tiemblo
7
Musisz die();zadzwonić zaraz potem echo array2csv();, edytuje moją odpowiedź. Pamiętaj, aby wygenerować plik csv przed wyprowadzeniem czegoś na swoją stronę.
Tak dla przypomnienia, konkatenacja jest waaaaaay szybsza (mam na myśli to) niż fputcsvlub nawet implode; A rozmiar pliku jest mniejszy:
// The data from Eternal Oblivion is an object, always
$values =(array) fetchDataFromEternalOblivion($userId, $limit =1000);// ----- fputcsv (slow)// The code of @Alain Tiemblo is the best implementation
ob_start();
$csv = fopen("php://output",'w');
fputcsv($csv, array_keys(reset($values)));foreach($values as $row){
fputcsv($csv, $row);}
fclose($csv);return ob_get_clean();// ----- implode (slow, but file size is smaller)
$csv = implode(",", array_keys(reset($values))). PHP_EOL;foreach($values as $row){
$csv .='"'. implode('","', $row).'"'. PHP_EOL;}return $csv;// ----- concatenation (fast, file size is smaller)// We can use one implode for the headers =D
$csv = implode(",", array_keys(reset($values))). PHP_EOL;
$i =1;// This is less flexible, but we have more control over the formattingforeach($values as $row){
$csv .='"'. $row['id'].'",';
$csv .='"'. $row['name'].'",';
$csv .='"'. date('d-m-Y', strtotime($row['date'])).'",';
$csv .='"'.($row['pet_name']?:'-').'",';
$csv .= PHP_EOL;}return $csv;
To wniosek z optymalizacji kilku raportów, od dziesięciu do tysięcy wierszy. Trzy przykłady działały dobrze poniżej 1000 wierszy, ale zawodzą, gdy dane były większe.
Odpowiedzi:
Osobiście używam tej funkcji do tworzenia treści CSV z dowolnej tablicy.
Następnie możesz zmusić użytkownika do pobrania tego pliku za pomocą czegoś takiego:
Przykład użycia:
źródło
die();
zadzwonić zaraz potemecho array2csv();
, edytuje moją odpowiedź. Pamiętaj, aby wygenerować plik csv przed wyprowadzeniem czegoś na swoją stronę.Możesz wyeksportować datę za pomocą tego polecenia.
Najpierw musisz załadować dane z serwera mysql do tablicy
źródło
Tak dla przypomnienia, konkatenacja jest waaaaaay szybsza (mam na myśli to) niż
fputcsv
lub nawetimplode
; A rozmiar pliku jest mniejszy:To wniosek z optymalizacji kilku raportów, od dziesięciu do tysięcy wierszy. Trzy przykłady działały dobrze poniżej 1000 wierszy, ale zawodzą, gdy dane były większe.
źródło
Polecam parsecsv-for-php, aby ominąć szereg problemów z zagnieżdżonymi znakami nowej linii i cudzysłowami.
źródło
Działa z ponad 100 liniami, jeśli określisz rozmiar pliku w nagłówkach po prostu wywołaj metodę get () w swojej własnej klasie
źródło
wstępnie przygotowany kod załączony tutaj. możesz go użyć, po prostu kopiując i wklejając w swoim kodzie:
https://gist.github.com/umairidrees/8952054#file-php-save-db-table-as-csv
źródło
Tak jak powiedział @ Dampes8N:
Mam nadzieję że to pomoże.
źródło