Valider 16576fe0 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

exporter_csv() : l'option envoyer stream maintenant directement sur output ce...

exporter_csv() : l'option envoyer stream maintenant directement sur output ce qui permet d'envoyer un gros lot de donnees sans timeout ni out of memory
l'option envoyer=attachment permet de retrouver le comportement anterieur, qui passe par un fichier, mais ne presente normalement jamais aucun avantage
parent 69222037
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+25 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -152,9 +152,27 @@ function inc_exporter_csv_dist($titre, $resource, $options = []) {
	// les donnees commencent toujours a la ligne 1, qu'il y ait ou non des entetes
	$nb++;

	// on passe par un fichier temporaire qui permet de ne pas saturer la memoire
	// avec les gros exports
	if ($options['envoyer']) {
		$disposition = ($options['envoyer'] === 'attachment' ? 'attachment' : 'inline');
		header("Content-Type: text/comma-separated-values; charset=$charset");
		header("Content-Disposition: $disposition; filename=$filename");

		// Vider tous les tampons
		$level = @ob_get_level();
		while ($level--) {
			@ob_end_flush();
		}
	}

	// si envoyer=='attachment' on passe par un fichier temporaire
	// sinon on ecrit directement sur stdout
	if ($options['envoyer'] and $options['envoyer'] !== 'attachment') {
		$fichier = "php://output";
	}
	else {
		$fichier = sous_repertoire(_DIR_CACHE, 'export') . $filename;
	}

	$fp = fopen($fichier, 'w');
	$length = fwrite($fp, $output);

@@ -166,19 +184,11 @@ function inc_exporter_csv_dist($titre, $resource, $options = []) {
	fclose($fp);

	if ($options['envoyer']) {
		header("Content-Type: text/comma-separated-values; charset=$charset");
		header("Content-Disposition: attachment; filename=$filename");
		//non supporte
		//header("Content-Type: text/plain; charset=$charset");
		if ($options['envoyer'] === 'attachment') {
			header("Content-Length: $length");

		// Vider tous les tampons
		$level = @ob_get_level();
		while ($level--) {
			@ob_end_flush();
		}

			readfile($fichier);
		}
		// si on a envoye inline, c'est deja tout bon
		exit;
	}