pièce jointe vide

Petit nouveau ! | 3 Messages

06 déc. 2010, 16:11

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]

Petit nouveau ! | 3 Messages

06 déc. 2010, 16:20

excusez moi, je vais déplacer mon post en Php débutant

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2010, 01:06

salut,

manque du code la faut la validation du formulaire mais en gros tu ne fournis pas une ressource retourné par fopen. Ceci est dû au fiat que fopen se votre surement à cause d'une nom de fichier pas bon ou inaccessible (pb de droit)

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

07 déc. 2010, 11:28

Bonjour,

Si 'userfile' est le nom du fichier en HTML :

$_FILES['userfile']['error'] permet de vérifier que l'upload s'est bien passer

$_FILES['userfile']['name'] est le nom du fichier SUR LE POSTE du client

$_FILES['userfile']['type'] permet de savoir qu'elle est le type du fichier (et ne pas tester ".doc", ."pdf"...) et pour les images penser à utiliser la fonction qui va bien (get_image_size ?) pour avoir le type exact entre jpg, png...

$_FILES['userfile']['tmp_name'] est le nom du fichier sue le serveur et non pas $_FILES['userfile']['name']

la fonction move_uploaded_file permet de rapatrier le fichier du répertoire d'upload et changeant son nom.