[RESOLU] Forcer le téléchargement dans php mail() ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Forcer le téléchargement dans php mail() ?

Re: [RESOLU] Forcer le téléchargement dans php mail() ?

par Couin » 17 mai 2019, 15:03

Ca m'arrive aussi lol

Re: [RESOLU] Forcer le téléchargement dans php mail() ?

par saveus » 17 mai 2019, 14:36

oui , j'ai lu un peu (trop) vite le dernier post... il était tard... ;-)

Re: [RESOLU] Forcer le téléchargement dans php mail() ?

par Couin » 17 mai 2019, 14:09

Hello

C'est le cas, dans le mail, un lien vers une page du site qui va lancer le téléchargement :)

Bon OuiK

Re: [RESOLU] Forcer le téléchargement dans php mail() ?

par saveus » 17 mai 2019, 00:17

sinon , essaye peu être , de mettre un lien qui ouvre une nouvelle fenetre vers un fichier php (pour sortir du webmail) , et qui ensuite fait un redirect au chargement de la page et qui force le téléchargement du fichier.mp3

Re: Forcer le téléchargement dans php mail() ?

par Couin » 16 mai 2019, 15:45

Plop !

Alors je suis donc parti sur une page de download (script qui pourra me resservir pour plus tard).

Dans un premier temps , j’ai ajouté une fonction glanée sur le net pour convertir le nom de fichier en hexa (et donc éviter les problèmes d'espaces et autres dans le lien généré) :

Code : Tout sélectionner

function String2Hex($string){ $hex=''; for ($i=0; $i < strlen($string); $i++){ $hex .= dechex(ord($string[$i])); } return $hex; } $track = String2Hex($_POST['track']); $url = "http://nom_de_domaine/discotheque/submit/uploads/download.php?file=$track";
Puis une page download.php :

Code : Tout sélectionner

function Hex2String($hex){ $string=''; for ($i=0; $i < strlen($hex)-1; $i+=2){ $string .= chr(hexdec($hex[$i].$hex[$i+1])); } return $string; } $file = Hex2String($_GET['file']); if (!file_exists($file) ) { header('Content-type: text/html; charset=utf-8'); echo $file; echo "<br>Le fichier n'existe pas"; exit; } header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file).'"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize(basename($file))); ob_clean(); flush(); readfile(basename($file));
Hormis le fait qu'un nom de fichier ayant " dedans, fasse des étrangetés (mais pas un problème, je rajouterais un substr dans le form d'envoi de titre pour remplacer le double quote par 2 simples quotes), cela fonctionne comme il faut depuis le webmail.

Merkouin à vous :)

Re: Forcer le téléchargement dans php mail() ?

par Couin » 15 mai 2019, 20:43

Re,

Oui pour le moment il y a la mention Clic droit enregistrer sous à coté du lien dans le mail. Je vais voir pour une page de redir, pas bête.

En effet, bonne idée pour les logs, j’irais voir ca aussi (bon ce soir c’est un peu cuitos car préparage pour aller bouloter lol )

Re: Forcer le téléchargement dans php mail() ?

par @rthur » 15 mai 2019, 18:11

Erreur 500 => regarde dans les logs du serveur pour en savoir davantage sur ce qui l'a provoqué

Re: Forcer le téléchargement dans php mail() ?

par Spols » 15 mai 2019, 16:18

et simplement demander de faire un clique droit "enregistrer la cible sous " dans le mail ?

sinon je chercherai vers une page php qui prendrait en paramètre le nom du fichier et qui pourrait transmettre les headers necessaire au forcement de téléchargement. mais c'est sans certitude.

Re: Forcer le téléchargement dans php mail() ?

par Couin » 15 mai 2019, 15:17

Hello,

Merci pour ta réponse.

Malheureusement cela me provoque une erreur 500 lorsque directive mise en place.

J'ai fouillé dans ce sens un peu partout, je retombe soit sur les mèmes syntaxes, soit d'autres syntaxes qui ne plantent pas le serveur mais qui ne provoquent pas le téléchargement forcé.

Aussi, je pense que ça risque de poser souci car les fichiers audio de ce même répertoire doivent pouvoir être lus depuis le site (c'est vrai que j'ai pas pensé à préciser car je pensais pas qu'il était possible de forcer un téléchargement via un htaccess dans un répertoire).

M'ciiii :)

Re: Forcer le téléchargement dans php mail() ?

par @rthur » 15 mai 2019, 08:33

Normalement tu peux demander à Apache (le serveur web) d'indiquer en entête au navigateur que les fichiers mp3 doivent être téléchargés.

Voici ce qu'il faut mettre dans un fichier .htaccess :

Code : Tout sélectionner

<FilesMatch "\.mp3$"> ForceType application/octet-stream Header set Content-Disposition attachment </FilesMatch>

Forcer le téléchargement dans php mail() ?

par Couin » 15 mai 2019, 05:04

COUIN !!!!

Je suis confronté à un petit souci sans gravité masi un peu gênant.

En effet, j’ai un formulaire pour qu'un visiteur du site puisse soumettre une musique pour une webradio.
A ce jour, dans le panneau d'admin du site, sont listées toutes les musiques déjà soumises, ainsi que le lien pour télécharger le fichier envoyé par l'auditeur.
Le propriétaire de la webradio pensant rarement à aller voir cette partie de l'admin, l'idée étant de lui notifier par email, qu'une musique a été soumise, avec possibilité de télécharger directement le fichier audio.

Le souci est au niveau du lien de téléchargement, la musique est lue dans le navigateur (webmail) au lieu d'être téléchargée.

J'ai donc rajouté l'option download (que j'ai déjà utilisé sur d'aurtes pages php pour télécharger des fichiers depuis le site) dans le lien :

Code : Tout sélectionner

<a href="http://site.fr/musique.mp3" download="http://site.fr/musique.mp3" style="color:blue"><u>Télécharger le fichier</u></a>
Malheureusement, cela ne fonctionne pas dans le cas d'une consultation du mail sur le webmail. La musique est toujours jouée au lieu d'être téléchargée.
D'ailleurs, sur le code source du message dans le webmail, l'option download a disparu (et target=_blank est apparu).

Si quelqu'un a une petite idée, je serais volontiers preneur :)

Merkouin :)