PDA

View Full Version : Creation d'un fichier de sortie en PHP


megaseb
24 janvier 2004, 11h20
Salut à tous.

Deja félicitation pour votre forum!!!

Bon voila moi je debute en PHP, j'ai besoin de creer un fichier de sortie (format csv) pour l'importer dans un logiciel propoietaire apres. Ce fichier est généré en PHP par résultat de requetes à une base de données.

Voici mon code:


<?
$file = 'export' . '_' . date('dmY') . '.csv';
$fp=fopen('/xxxxxxxxx/backups/' . $file ,"wb"); // Ouverture du fichier avec le mode écriture

//On se connecte à Mysql.
$connect=@mysql_connect(xxxxxxxxxxxxx) or die(mysql_error());
//On séléctionne la base de donnée.
$select_db=@mysql_select_db('xxxxxxxxxxx') or die(mysql_error());
$request = "SELECT orders_id, delivery_name, delivery_street_address, delivery_postcode, delivery_city, delivery_country, customers_telephone FROM orders WHERE orders_status=100003 "; //On déclare la requête mysql.
if ($result = mysql_query($request))
{
while($ligne = mysql_fetch_row($result))
{
$id = $ligne[0];
$name= $ligne[1];
$address = $ligne[2];
$postcode = $ligne[3];
$city = $ligne[4];
$country = $ligne[5];
$phone = $ligne[6];
$chaine ="$id;$name;$address;;;$postcode;$city;$country;;;$phone;\r";
fwrite($fp, $chaine);
}
}else
{
echo "Ereur";
}
echo ("<a href=\"http://xxxxxxxxxxxx/backups/" . 'export' . '_' . date('dmY') . '.csv' . "\">Telecharger le fichier</a>");

mysql_close($connect); // On se déconnecte de Mysql
?>




1) Le probleme viens du caractere de retour à la ligne le "\r" qui je pense est mal interprete par le serveur qui est sous Unix.

2) De plus j'aimerais bien que le fichier se télécharge automatiquement sans avoir besoin de cliquer sur le lien.

Merci d'avance pour votre aide.

Seb

Benjy
24 janvier 2004, 12h01
Comment faire un retour à la ligne en PHP :

En général sous Unix un \n suffit. Il est toutefois préférable d'utiliser \r\n (dans les versions les plus récentes de PHP et, par exemple, lors de l'envoi de mails sans sendmail).
Je précise au passage que la "norme" voudrait qu'un \r\n\r\n soit utilisé. IIS 6, par exemple, s'en sert ; donc si vous devez communiquer avec un script hébergé sur un tel serveur, n'oubliez pas ce petit détail ;)


Comment envoyer un fichier en PHP :

Dans ton cas j'essaierais un truc du genre :
header('Content-Type: text/x-csv');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: inline; filename="toto.csv"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
echo $fichier;
Où $fichier contient les données de ton fichier CSV.

megaseb
24 janvier 2004, 15h25
Super Merci Benji

Bon avec \n\r ca marchait pas j'vait un "carré" comme caractere de fin de ligne et non pas un saut de ligne

Mais avec le double "\n\r\n\r" ca marche sauf que ya une ligne vide entre. Enfin bon mon logiciel arrive quand mêm à importer le fichier, ce qui était pas le cas avant.

Pour la deuxieme partie de ma question, je vais tester ta solution.

Je te remercie.

Longue vie à ce forum.

Benjy
24 janvier 2004, 17h17
De rien :)
Et c'est \r\n, pas \n\r ;)

megaseb
25 janvier 2004, 13h43
Oui c'est ca j'avais bien utilisé \r\n dans mon code.
Je me suis juste planté dans mon poste.

Bon le telechargement automatique fonctionne :cool:

Par contre est ce qu'il est possible de passer en parametre le repertoire sur le disque dur où stocker le fichier de maniere automatique.

Je m'explique:
- Je voudrais que le fichier se telecharge sur mon disque dur dans le repertoire "C:\EXPINET\IMPORT", sans avoir à chaque fois à selectionner le repertoire de telechargement.

- Et enfin le top ca serait de pouvoir le telecharger sans avoir besoin de cliquer sur le bouton enregistrer.

Le but de tout ca est de pouvoir automatiser l'importation dans un logiciel proprietaire d'informations recupérées dans une base et ce sans intervention humaine.

Benjy
25 janvier 2004, 18h52
Ce genre de manipulation est impossible, car nécessiterait de "taper" directement dans l'API de ton navigateur Internet... Et ci c'était possible, j'aurais tendance à considérer ça comme une faille ;)