Bonjour,
Je cherche mon erreur depuis un moment et comme je n'arrive pas à trouver, je viens chercher de l'aide ici (je n'arrive plus à envoyer une piece jointe au mail).
Mon script à marché, mais lorsque j'ai voulu le securiser en refusant les fichiers dont l'extension est diffrente de word et pdf et dont la taille dépasse le taille maxi, cela n'a plus marché. Je suis donc revenu à la version précédente mais ca ne marche pas non plus.
Voici le code :
Pour info, voici le code que je voulai ajouter pour refuser l'envoi si maivaise extension de fichier ou taille de fichier trop grosse
Merci pour votre coup de main.
Valérie
Je cherche mon erreur depuis un moment et comme je n'arrive pas à trouver, je viens chercher de l'aide ici (je n'arrive plus à envoyer une piece jointe au mail).
Mon script à marché, mais lorsque j'ai voulu le securiser en refusant les fichiers dont l'extension est diffrente de word et pdf et dont la taille dépasse le taille maxi, cela n'a plus marché. Je suis donc revenu à la version précédente mais ca ne marche pas non plus.
Voici le code :
<h2>Candidature en ligne</h2>
<?php
if (isset($_POST['action']))
{
//le formulaire a été soumis
if($_POST['action'] == 'submitted')
{
$expediteur = $_POST['eMail']; //adresse mail saisie ds la formulaire
$destinataire = "v.bachelot@voila.fr"; //adresse ccm destinataire du message
$objet = "Formulaire candidature site CCM";
$entete = "From: $expediteur\n";
$entete .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$entete .= "X-Sender: $expediteur\n";
$entete .= "X-Priority: 3\n";
$entete .= "Return-Path: $expediteur\n";
$boundary = "__==" . md5(uniqid("")) . "==__";
$entete .= "Mime-version: 1.0\n";
$entete .= "Content-type: multipart/mixed; boundary=\"$boundary\"\n";
$message = "--$boundary\n"; //début de l'objet (le délimitateur est la valeur $boundary)
$message .= "Content-type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-transfer-encoding: 8bit\n\n";
$message .= "Dépôt d'une candidature sur le site de CCM : \n\n";
$message .= $_POST['prenom']." ".$_POST['nom']." a laissé le message suivant :\n\n";
$message .= $_POST['message']." \n";
$message .= "-- \n";
echo "name=".$_FILES['fic_cv']['name'];
echo "tmp_name=".$_FILES['fic_cv']['tmp_name'];
echo "type=".$_FILES['fic_cv']['type'];
if (is_file($_FILES['fic_cv']['tmp_name']) && ($fp = fopen($_FILES['fic_cv']['tmp_name'], "rb")))
//présence d'une piece jointe
{
echo "test envoi avec fichier";
$extension = substr($_FILES['fic_cv']['name'],-3); //extension du fichier uploadé
//lecture du fichier uploadé sur le serveur dans un répertoire temporaire et avec un nom temporaire
//ce fichier ne sera pas conservé sur le serveur (pas besoin, car envoi via mail)
$data = fread($fp, filesize($_FILES['fic_cv']['tmp_name']));
fclose($fp);
//pour la transmission du fichier par courrier electronique, il doit etre scindé en lignes qui ne doivent pas dépasser 76 caracteres.
//Pour cela php possède 2 fonctions :
//(1)chunk_split permet de decouper les lignes en 76 caracteres
//(2)base64_encode pour encoder base64
$contents = chunk_split(base64_encode($data));
$message .= "\n\n\n";
$message .= "--$boundary\n";
//on envoi le fichier sous un autre nom, du type "fic_cv_nom.extension"
$nomFicEnvoi = "fic_cv_".$_POST['nom'].".".$extension;
$message .= "Content-type:".$_FILES['fic_cv']['type'].";name=".$nomFicEnvoi." \n";
$message .= "Content-transfer-encoding: base64\n";
$message .= "Content-disposition: attachement; filename=".$nomFicEnvoi."\n\n";
$message .= $contents; //ajout du contenu du fichier
}
$message .= "\n\n\n";
$message .= "--$boundary--\n"; //fin du message
if (mail($destinataire, $objet, $message, $entete))
{
echo "</br>";
echo "<p>Merci de nous avoir contacté, vous recevrez bientôt une réponse ...</p>";
}
else
{
echo "</br>";
echo "<p>Un problème est survenu lors de l’envoi de votre message,\n</p>";
echo "<p>L'adresse mail que vous avez indiqué est peut être erronée ...\n</p>";
}
}
}
else
{
//saisie du formulaire
.....
Pour info, voici le code que je voulai ajouter pour refuser l'envoi si maivaise extension de fichier ou taille de fichier trop grosse
//si présence d'une piece jointe
if (isset($_FILES['fic_cv']['tmp_name']) && is_uploaded_file($_FILES['fic_cv']['tmp_name']))
{
echo "test ok";
//Vérifications de l'extension du fichier uploadé et de sa taille
$extensions_ok = array('doc', 'pdf');
$taille_max = 100;
$format= substr(strrchr($_FILES['fic_cv']['name'], '.'), 1);
$erreur="";
//in_array() Indique si une valeur appartient à un tableau
//strrchr retourne le segment du nom du fichier qui commence avec la dernière occurrence de "." , jusqu'à la fin du nom (donc l'extension).
if( !in_array( substr(strrchr($_FILES['fic_cv']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = "<br/><p>Votre fichier a le format ".$format."<br/><span class='texteRouge'>Attention : Les seuls formats de fichiers autorisés sont 'doc', et 'pdf' !</span></p>";
echo $erreur;
}
$taille=$_FILES['fic_cv']['size'];
//On va vérifier la taille du fichier en ne passant pas par $_FILES['fic_cv']['size'] pour éviter les failles de sécurité
$taille=filesize($_FILES['fic_cv']['tmp_name']);
echo "taillefic=".$taille."___";
if ($taille > $taille_max)
{
$erreur = "<p><span class='texteRouge'>Votre fichier doit faire moins de ".$taille_max." !</span></p>";
echo $erreur;
}
if ($erreur!="")
{
echo "<p>Pour recommencer<a href=".$_SERVER['PHP_SELF']."?lang=".$lang."> Cliquez ici </a></p>";
exit; //arrêt de l'execution
}
//Fin des vérifications sur le fichier
}
Merci pour votre coup de main.
Valérie