8791 sujets

Développement web côté serveur, CMS

Bonjour à tous !

Bon, j'espère que je poste dans le bon forum, car je ne suis vraiment pas sur Smiley sweatdrop

Voilà mon probleme : j'ai une application en PHP qui permet d'exporter un tableau en CSV. Tou marche tres bien, l'es header sont envoyé comme il faut, le fichier est lisible et tout et tout. Un seul probleme : l'utilisateur se retrouve avec le fichier export.php, qu'il doit bien évidemment rennomer en .csv avant de l'enregistrer pour ne pas avoir de probleme...

J'aimerais que l'utilisateur puisse directement télécharger un .csv...

La solution à laquelle j'ai pensé (si quelqu'un en connais d'autre, ça m'éinteresse aussi) serait de demander à apache de faire comme si ce fichier .csv était un .php. Mais uniquement pour ce fichier là, pas pour tout les .csv, par sécurité...

Mais je n'arrive pas bien à m'en dépatouillé, alor je vous remerci d'avance pour votre aide ^^
Salut,

J'ai pas tout compris je crois. Le fichier que tu génères il est en php ou csv ?( en php si j'ai compris) Et apres je suis perdu. Car pour moi tu as un fichier en php que l'utilisateur doit enregistre lui même en .csv .

Mais là je suis dans le flou. Car si tu veux que la personne puisse accède toujours a ton fichier crée deux fichier un en csv et l'autre en php non ?
J'ai un fichier PHP, qui plutot que d'envoyer un fichier HTML comme PHP le fait par défaut (au moin au niveau du myme type, apres ça dépend un peut du codeur XD) envoi un fichier CSV.

Cependant, quelque soit le fichier que retourne PHP, que ce soit du HTML du CSV ou meme une image, le fichier aurra toujour le nom et l'extention du script PHP d'origine.

C'est pour celà que je voudrais faire en sorte que mon script php s'appel export.csv pour que l'utilisateur puisse l'enregistrer directement avec la bonne extention.

Cepandant, les fichier CSV ne sont pas parsé comme des fichier PHP et c'est bien normal, car il n'en ont pas l'extention, mais je sais que c'est possible de déroger à la regle, par exemple, avec un .htacces, mais je ne me souvien plus comment... j'avais utilisé ça il y a (tres) longtemp pour pourvoir mettre des script php dans des fichier .html, et que celà marche quand meme, mais je ne retrouve pas mes sources...
Tu peux crée toi même le fichier que tu veux avec l'extension .csv si tu veux et après tu as juste un lien a faire pour télécharger le fichier. Cela ne serai pas plus simple ?

Suffit juste de le crée avec ton code dedans. regarde avec la fonction fopen de php elle permet de crée des fichier avec l'extension que tu veux. J'utilise cela pour mon site afin de crée mon flux rss et des pages articles.
Salut,

Cherches du côté de force download, et dans l'un des header tu aurais la propriétés filename=....

Ici tu peux ajouter le nom avec l'extension .csv que tu veux veux et la personne verra un csv même si la page est un PHP Smiley smile

A+
Halindel a écrit :
Tu peux crée toi même le fichier que tu veux avec l'extension .csv si tu veux et après tu as juste un lien a faire pour télécharger le fichier. Cela ne serai pas plus simple ?

Ce serait largement plus compliqué : imagine que j'ai facilement plus d'une dixaine d'utilisateur qui peuvent demander des export quasiment en meme temps : résultat, il faudrait que je génère des nom de fichier aléatoire, que je nétoi le répertoire... je te raconte pas le mic mac XD


Hacken a écrit :
Salut,

Cherches du côté de force download, et dans l'un des header tu aurais la propriétés filename=....

Ici tu peux ajouter le nom avec l'extension .csv que tu veux veux et la personne verra un csv même si la page est un PHP Smiley smile
A+

Oui, c'est une solution interressante, mais je n'ais pas besoin de faire un force download, si l'utilisateur veux ouvrire le fichier dans un plugin activ-X MS office de son IE, c'est son probleme, moi, c'est juste pour le nom du fichier.
Le header filname, je n'y avait pas pensé, je le met de coté pour plus tard celui là, mais dans ce cas, je préfèrerais que le lien pointe sur le fichier avec son nom, et non sur un script qui envera le fichier avec le bon nom (ne me demandez par pourquoi c'est toute une histoire)

J'ai aussi pensé à l'URL rewriting, mais ça, je ne sais pas vraiment faire, j'ai bien essayé ce truc :


Options +FollowSymlinks
RewriteEngine On
RewriteRule ^export\.csv$ /export.php [L]


que j'ai fait à partire d'un tuto, mais quand j'appel export.csv, j'ai un beau 404...

et de toute façon, j'aimerais bien retrouver cette technique ancestrale que j'avais utilisé dans ma jeunesse XD

Mais plus serieusement, je peut aussi me contenter d'un url rewriting, ce qui compte, c'est qu'on ai un lien vers le fichier avec son nom de téléchargement, et qu'il ai une extention CSV
Modifié par Assimil (19 Sep 2007 - 16:04)
Au pire je pense que tes utilisateur on un compte à eux donc tu nomme le fichier suivant leur compte.

ensuite pour l'url rewritting


RewriteRule ^export.csv  export.php [L]


Cela suffit j'ai teste j'ai bien une redirection vers la page export.php mais comme je l'avais pas crée erreur 404. Verifie que ton fichier .php se trouve bien la ou tu appel ton csv.
Hello,
Halindel a écrit :
Au pire je pense que tes utilisateur on un compte à eux donc tu nomme le fichier suivant leur compte.

Aller écrire les fichiers sur le filesystem du serveur est une solution très peu adaptée au Web, ça pose plein de problèmes (espace disque, durée de vie du fichier, ...) que l'on ne devrait pas avoir à gérer dans ce cas-là.

La solution simple, qui marche à ma connaissance avec Apache, est d'appeler le fichier "export.csv.php" et de lier vers "export.csv". Si "export.csv" n'existe pas, Apache devrait servir "export.csv.php".
Halindel a écrit :
Au pire je pense que tes utilisateur on un compte à eux donc tu nomme le fichier suivant leur compte.

Oui, enfin, c'est quand même bien trash comme méthode, et beaucoup plus compliqué à gérer... et puis de toute façon, il faudrait metre des droit en écriture pour que PHP puisse créer ses fichier, ce que je n'ais pas du tout l'intention de faire, par sécurité.

Halindel a écrit :

ensuite pour l'url rewritting


RewriteRule ^export.csv  export.php [L]


Cela suffit j'ai teste j'ai bien une redirection vers la page export.php mais comme je l'avais pas crée erreur 404. Verifie que ton fichier .php se trouve bien la ou tu appel ton csv.


Pour moi ça ne marche pas plus que la première solution, pourant, export.php se trouve bien dans le meme repertoire que celui ou l'on appelle export.csv et le module re rewriting est bien chargé dans apache.
ton .htaccess se trouve bien à la racine la ou tu essai de faire appel a tes fichiers.

Sinon regarde s'il n'y a pas une régle avant qui bloquer celui la.
Halindel a écrit :
ton .htaccess se trouve bien à la racine la ou tu essai de faire appel a tes fichiers.

Sinon regarde s'il n'y a pas une régle avant qui bloquer celui la.

Oui, et aucune regle ne vien le bloquer
Salut Smiley cligne ,

j'ai lu un peu en diagonale mais à tout hasard tu pourrais essayer de rajouter dans ton htaccess :
RewriteBase /


sinon pour ton csv j'ai justement un script export.php qui commence tout simplement par :
<?php
$filecsv = 'nomdufichier.csv';
header("Content-Type: application/csv-tab-delimited-table");
header("Content-Disposition: filename=\"".$filecsv."\";");
...
?>
et qui permet soit de l'ouvrir tel quel, soit de l'enregistrer (IE / FF / Opera / ???)...

A+ Smiley smile
Julien Royer a écrit :
Il y a des jours où j'ai l'impression de parler dans le vide. Smiley lol
Arf ! Désolé ! Smiley biggol

J'avais effectivement pas lu la deuxième partie de ton post !
Modifié par Heyoan (19 Sep 2007 - 17:59)
Merci à tous pour votre aide, ayé, ça marche ^^

par contre, j'ai aussi fait un test avec

header('Content-Disposition: attachment; filename="'.$nom_fichier.'"');


et là, ça marche tres bien sour firefox, par contre, sous ie, 6 et 7, il me fait cet erreur
a écrit :

Internet Explorer ne peut télécharger export.php de mon.domain.com

Internet Explorer n'a pas pu ouvrir ce site Internet. Le site requis n'est pas disponible ou n'a pas pu être trouvé. Réessayez ultérieurement.


C'est à n'y rien comprendre car toutes les autres page du site marche tres bien !!

Quelqu'un sais d'ou celà peut provenir ?
Euh... tu as essayé ce que je te proposais ?
<?php
$filecsv = 'export.csv';
header("Content-Type: application/csv-tab-delimited-table");
header("Content-Disposition: filename=\"".$filecsv."\";");
...
?>
Heyoan a écrit :
Euh... tu as essayé ce que je te proposais ?
<?php
$filecsv = 'export.csv';
header("Content-Type: application/csv-tab-delimited-table");
header("Content-Disposition: filename=\"".$filecsv."\";");
...
?>

Oui, mais j'ai juste fait quelque ajustement :
- déjà ce n'est pas un csv délimité par tabulation, mais par virgule et encadré de double guillement
- ensuite, j'ai juste préféré la syntaxe donné sur php.net, pour le content disposition, mais dans le doute, j'ai testé avec ta syntaxe : meme tarif...

Je désèspère vraiment !
Modifié par Assimil (20 Sep 2007 - 10:31)
Bon, d'apres cet article MS que j'ai trouvé il semblerais que ce soit du à un probleme de cache, j'ai donc tenté avec ça en plus :
header('Cache-Control: cache');

Mais ça ne donne rien de mieux...