pièce joint vide

Petit nouveau ! | 3 Messages

06 déc. 2010, 16:21

Bonjour à tous.
Nouveau sur le forum et novice en Php, je m'adresse à vous pour un script d'envoi de mail avec pièce jointe qui fonctionne mal;
Description du problème (je précise que je teste tout cela en ligne et non en local, que mon hébergeur est Online:

-Une fois mon formulaire rempli et un fichier sélectionné pour l'upload, appel du script php;
-Le message reçu me renvoi correctement les champs ( nom, prénom, mail ,téléphone et message )
-La variable $fichier correspond au nom de mon champ <Input type: file>
-Un fichier est bien joint au mail mais il est vide et est systématiquement nommé "Partie 1.2"
-Le dysfonctionnement semble commencé à la section "//lecture du fichier présent sur le serveur" car j'ai bien le echo " File failed to open" (placé là temporairement pour essayer de solutionner le pb)

Ce n'est pas moi qui ai crée ce code mais j'essaye d'apprendre en étudiant le fonctionnement de code existant.
Ci-dessous, les 2 messages d'erreur renvoyés ainsi que le script Php
Merci de vos précieux conseils et remarques.

MESSAGES RENVOYEES :
File failed to open
Warning: fread(): supplied argument is not a valid stream resource in contact3.php on line 52
Warning: fclose(): supplied argument is not a valid stream resource in contact3.php on line 53
Demande envoyé

SCRIPT PHP
// règlage destinataire
$to = "[email protected]";

//séparateur des différentes parties du mail
$limite = "----=_Part_" . md5( uniqid ( rand() ) );

//headers du mail
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;boundary=\"".$limite."\"\r\n";
$headers .= "From : $nom \r\n";

//corps du mail
$texte .= "--".$limite."\n";
$texte .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$texte .= "Content-Transfer-Encoding: quoted-printable\n ";
$texte .= "Content-Disposition: inline \n\n ";
$texte .= "Candidature Métropole\r\n";
$texte .=" $nom\r\n";
$texte .= "$prenom\r\n";
$texte .= "$email\r\n";
$texte .= "$telephone\r\n";
$texte .= "\n\n";
$texte .= "\n\n";

//les fichiers joints a attacher
$attachement = '';


//permet de récupérer l'extension du fichier afin de définir le type mime
$longeur = strlen ($fichier);
$longeur -=3;

//vérification de l'extension
if(substr($fichier,$longeur) == "doc")
{
$type = "application/msword";
}
else
$type = "application/pdf";

//attachement des pièces jointes
$attachement .= "--".$limite."\n";
$attachement .= "Content-Type: ".$type." name=".$fichier."\n";
$attachement .= "Content-Transfer-Encoding: base64\n";
$attachement .= "Content-Disposition: attachment; filename=".$fichier."\n\n";

//lecture du fichier présent sur le serveur
//"rb" permet de lire des fichiers en mode binaire (utile sous windows)
if(!($fd = fopen($fichier, "rb"))) echo "File failed to open";
//$fd = fopen( $fichier, "rb" );
$contenu = fread( $fd, filesize( $fichier ) );
fclose($fd);

//encodage en base64 pour que le fichier soit lisible
$attachement .= chunk_split(base64_encode($contenu));





//envoi du mail
$attachement .= "\n\n--".$limite."--\n\n";

if ( mail($to,$sujet,$texte.$attachement,$headers) )
{
//on affiche un message indiquant l'envoi du message
echo '<p align="left"><font color="green"face="Arial, Helvetica, sans-serif">Demande envoyée </font></p>';
}
else
{
//on affiche un message indiquant l'echec de l'envoi du message
echo '<p align="left"><font color="red" face="Arial, Helvetica, sans-serif"> Echec de l\'envoi de la demande</font></p>';
}

[/code]

devlop78
Invité n'ayant pas de compte PHPfrance

06 déc. 2010, 20:44

Oui, la pièce jointe ne se trouve pas dans $fichier, mais dans $_FILES