par
jojaba » 16 juin 2009, 10:35
Merci pour cette réponse Nagol
il te faut comprendre ce qu'est un symlink
Je me doutais que j'avais mal compris la chose, j'avais tenté de trouver des explications "simples" à propos de cette fonction, mais n'avais rien trouvé...
un symlink c'est une fonctionalité d'un os unix/linux déja, et plus particulierement du filesystem, le but étant de créer une référence à un fichier, à partir d'un autre fichier, sur le même filesystem, donc fatalement ca n'existera pas sous windows avant php 5.3 et uniquement sous vista/2008 ou supérieur et il n'est pas possible de le faire de façon distante.
Merci pour ces explications qui confirment que je dois utiliser un autre stratagème pour arriver à mes fins. Je m'oriente vers "
tmpfile" ou "
tempnam" alors, c'est ça ?
[edit]
Je viens de voir quelque chose dans le manuel php qui pourrait m'intéresser : http://www.manuelphp.com/php/function.header.php
En fin de page on dit ceci :
Si vous voulez que vos utilisateur recoivent une alerte pour sauver les fichiers générés, comme si vous génériez un fichier PDF, vous pouvez utiliser l'en-tête Content-Disposition pour fournir un nom de fichier par défaut, à afficher dans le dialogue de sauvegarde.
Le code qui accompagne ce commentaire :
<?php
// Vous voulez afficher un pdf
header('Content-type: application/pdf');
// Il sera nommé downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// Le source du PDF original.pdf
readfile('original.pdf');
?>
Seulement, je ne vois pas trop comment je mets ça en place... Le type mime pour csv est le suivant : text/csv. Mais ensuite, je ne sais pas trop ce qu'il faut que je mette... Je vais voir si j'arrive à m'en sortir seul (je pense qu'l faut que je lance un fichier php pour que ces en-têtes soient prises en compte...), sinon, je reviens ici
[/edit]
[edit2]
Eh bien, j'ai testé, j'ai vu ce que ça donnait, j'ai été bluffé
Voici comment j'ai procédé.
Code sur la page à partir de laquelle on lance le téléchargement :
<?php
$date_telechargement = date('d-m-y_H¤i¤s');
$fichier = 'bdd/liste.admin';
$nom_fichier_telechargement = 'liste-admins-'.$date_telechargement.'.csv';
?>
<p><a href="telecharger.php?fichier=<?php echo $fichier ?>&nom_telechargement=<?php echo $nom_fichier_telechargement ?>">Télécharger la liste des administrateurs</a></p>
Code du fichier "telecharger.php" :
<?php
//Récupération des données transmises par la méthode GET
$fichier = $_GET["fichier"];
$nom_pour_telechargement = $_GET["nom_telechargement"];
//Envoi des en-têtes pour téléchargement
header('Content-type: txt/csv');
header('Content-Disposition: attachment; filename="'.$nom_pour_telechargement.'"');
//Fichier source
readfile($fichier);
?>
Je ne sais pas si les en-têtes que j'ai mises suffisent, j'ai vu ici qu'il y en avait bien plus. Faut-il que j'ajoute quelque chose ?
En local ça marche, je verrai si à distance ça fonctionne aussi...
[/edit2]
Merci pour cette réponse Nagol :)
[quote="Nagol"]il te faut comprendre ce qu'est un symlink[/quote]
Je me doutais que j'avais mal compris la chose, j'avais tenté de trouver des explications "simples" à propos de cette fonction, mais n'avais rien trouvé...
[quote]
un symlink c'est une fonctionalité d'un os unix/linux déja, et plus particulierement du filesystem, le but étant de créer une référence à un fichier, à partir d'un autre fichier, sur le même filesystem, donc fatalement ca n'existera pas sous windows avant php 5.3 et uniquement sous vista/2008 ou supérieur et il n'est pas possible de le faire de façon distante.[/quote]
Merci pour ces explications qui confirment que je dois utiliser un autre stratagème pour arriver à mes fins. Je m'oriente vers "[url=http://www.manuelphp.com/php/function.tmpfile.php]tmpfile[/url]" ou "[url=http://www.manuelphp.com/php/function.tempnam.php]tempnam[/url]" alors, c'est ça ?
[b][edit][/b]
[color=blue]Je viens de voir quelque chose dans le manuel php qui pourrait m'intéresser : http://www.manuelphp.com/php/function.header.php
En fin de page on dit ceci :[/color]
[quote]Si vous voulez que vos utilisateur recoivent une alerte pour sauver les fichiers générés, comme si vous génériez un fichier PDF, vous pouvez utiliser l'en-tête Content-Disposition pour fournir un nom de fichier par défaut, à afficher dans le dialogue de sauvegarde. [/quote]
[color=blue]Le code qui accompagne ce commentaire :[/color]
[php]<?php
// Vous voulez afficher un pdf
header('Content-type: application/pdf');
// Il sera nommé downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// Le source du PDF original.pdf
readfile('original.pdf');
?>[/php]
[color=blue]Seulement, je ne vois pas trop comment je mets ça en place... Le type mime pour csv est le suivant : [i]text/csv[/i]. Mais ensuite, je ne sais pas trop ce qu'il faut que je mette... Je vais voir si j'arrive à m'en sortir seul (je pense qu'l faut que je lance un fichier php pour que ces en-têtes soient prises en compte...), sinon, je reviens ici :wink:[/color]
[b][/edit][/b]
[b][edit2][/b]
[color=green]Eh bien, j'ai testé, j'ai vu ce que ça donnait, j'ai été bluffé :lol:
Voici comment j'ai procédé.
Code sur la page à partir de laquelle on lance le téléchargement :[/color]
[php]<?php
$date_telechargement = date('d-m-y_H¤i¤s');
$fichier = 'bdd/liste.admin';
$nom_fichier_telechargement = 'liste-admins-'.$date_telechargement.'.csv';
?>
<p><a href="telecharger.php?fichier=<?php echo $fichier ?>&nom_telechargement=<?php echo $nom_fichier_telechargement ?>">Télécharger la liste des administrateurs</a></p>[/php]
[color=green]Code du fichier "[i]telecharger.php[/i]" :[/color]
[php]<?php
//Récupération des données transmises par la méthode GET
$fichier = $_GET["fichier"];
$nom_pour_telechargement = $_GET["nom_telechargement"];
//Envoi des en-têtes pour téléchargement
header('Content-type: txt/csv');
header('Content-Disposition: attachment; filename="'.$nom_pour_telechargement.'"');
//Fichier source
readfile($fichier);
?>[/php]
[color=green]Je ne sais pas si les en-têtes que j'ai mises suffisent, j'ai vu [url=http://www.destrucsaweb.com/ressources/phpmyannu/goto_45.php]ici[/url] qu'il y en avait bien plus. Faut-il que j'ajoute quelque chose ?
En local ça marche, je verrai si à distance ça fonctionne aussi...[/color]
[b][/edit2][/b]