[PHP] Générer un fichier csv dans un dossier

mourad.hamama Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   - 19 déc. 2011 à 04:09
Bonjour,

Dans mon application web j'ai créer un fichier PHP qui me génère un fichier csv à partir d'une table de ma base de donnée, à l'exécution tout marche très bien, le fichier se génère et le navigateur me donne la possibilité de télécharger ... sauf que moi j'aimerai bien l'enregistrer dans un répertoire précis sans le télécharger :s que faire et merci d'avance pour vos réponse

Voici le code de mon fichier :


<?php  
require_once('includs/config.php');  
$host = '127.0.0.1'; // <--  db address  
$ = 'root'; // <-- db  name  
$ = ''; // <--   
$db = 'easychange_db';  
$link = mysql_connect($host, $, $) or die("pas de connexion." . mysql_error());  
mysql_select_db($db) or die("Can not connect.");  
     
 $mois=$_POST["date"];  
 if($mois==1){  
  $mois2="JANVIER";}  
 elseif($mois==2){  
  $mois2="FEVRIER";}  
 elseif($mois==3){  
  $mois2="MARS";}  
 elseif($mois==4){  
  $mois2="AVRIL";}  
 elseif($mois==5){  
  $mois2="MAI";}  
 elseif($mois==6){  
  $mois2="JUIN";}  
 elseif($mois==7){  
  $mois2="JUILLET";}  
 elseif($mois==8){  
  $mois2="AOUT";}  
 elseif($mois==9){  
  $mois2="SEPTEMBRE";}  
 elseif($mois==10){  
  $mois2="OCTOBRE";}  
 elseif($mois==11){  
  $mois2="NOVEMBRE";}  
 elseif($mois==12){  
  $mois2="DECEMBRE";}  

//////////////////// Entete:  
$csv_output .= "BUREAU DE CHANGE:";  
$csv_output .= ";";   
$csv_output .= "SICIETE D4INTERMEDIATION EN MATIERE DE TRANSFERT DE FOND:";   
$csv_output .= "\n";   
$csv_output .= "N DE L'AUTORISATION DE L'OFFICE DES CHANGES::";   
$csv_output .= ";";  
$csv_output .= "Adr";  
$csv_output .= "\n";   
$csv_output .= "ADRESSE:";   
$csv_output .= ";";  
$csv_output .= "N";  
$csv_output .= "\n";  
$csv_output .= "MOIS:";  
$csv_output .= ";";  
$csv_output .= $mois2;  
$csv_output .= ";";  
$csv_output .= "ANNEE:";  
$csv_output .= ";";  
$csv_output .= date(Y);  
$csv_output .= "\n";  
$csv_output .= "\n";  

/////////// Titres:  
$csv_output .= "ETABLISSEMENT DE CREDIT  
ET BANQUE AL-MAGHRIB";  
$csv_output .= ";";  
$csv_output .= "DEVISE";  
$csv_output .= ";";   
$csv_output .= "MONTANT EN DEVISES";  
$csv_output .= ";";   
$csv_output .= "CONTREVALEUR EN DIRHAMS";  
$csv_output .= ";";  
$csv_output .= "\n";  


$req=mysql_query("select banque, denomination, SUM(montant) as mont, SUM(cv_dh) as eurodh from cession where MONTH(date)=".$mois." GROUP BY denomination");  

   while($row = mysql_fetch_array($req)){  
    $banque=$row['0'];  
   $denomination=$row['1'];  
   $montant=(DOUBLE)$row['2'];  
   $cv=(DOUBLE)$row['3'];  

$csv_output .= $banque;  
$csv_output .= ";";  
$csv_output .= $denomination;  
$csv_output .= ";";   
$csv_output .= $montant;  
$csv_output .= ";";   
$csv_output .= $cv;  
$csv_output .= ";";  
$csv_output .= "\n";  
}  

//<------ csv  
$filename ="Cession-".$mois.date("-Y-");  
$filename .= NUMAUT;  
   
header("Content-type: application/vnd.ms-excel");  
header("Content-disposition: csv" . date("Y-m-d") . ".csv");  
header( "Content-disposition: filename=".$filename.".csv");  
print $csv_output;  
exit;  
?>  




A voir également:

2 réponses

Giorgiolino Messages postés 253 Date d'inscription   Statut Contributeur Dernière intervention   52
 
Salut,

a priori il s'agit simplement d'écrire les données dans un fichier. Cela n'a rien d'insurmontable.

Un petit tour par la documentation t'apprendra ce que tu as besoin de savoir pour y arriver :
https://www.php.net/manual/fr/function.file-put-contents.php
2
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Tu réinventes la roue en utilisant un code long, difficile à maintenir et à améliorer.

Au lieu d'utiliser une tétrachiée de tests, utilise une table de hashage:
johand@osiris: ~/src/CCM/php $ cat hash-test.php    
<?php   
$mois=1;   
$months = array ("JANVIER", "FEVRIER");   
$mois2= $months[$mois -1];   
print $mois2;   
?>   
johand@osiris: ~/src/CCM/php $ php hash-test.php    
JANVIER
Réorganise ton code de manière à utiliser fputscsv par exemple https://www.php.net/manual/fr/function.fputcsv.php
Si ton code est bien écrit, il n'y a pas de nécessité de placer les intitulés de champ dans le CSV (mets les sur la première ligne)
Pourquoi cette tétrachiée de concaténations? Utilise sprintf.
En bref ton code (hors appel à la BDD peut se résumer en 10 lignes ;Ð
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
1