phpMailer pièce jointe
Je vais l'utiliser pour joindre des fichiers à un mail après le téléchargement sur mon serveur:
for ($i = 0; $i <= 2; $i++)
{
$mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['name'], $_FILES['uploaded'.$i]['name']);
}
Ajout de pièces jointes est facultatif, mais quand sont pas les fichiers téléchargés, il donne une erreur: Peut pas accéder au fichier
Comment puis-je éviter cette erreur de montrer?
Ce n'
@hakre $locatie = 'uploads/';
Ne vous déplacez les fichiers téléchargés dans il ou sont-ils encore dans le dossier de téléchargement temporaire?
$locatie
?@hakre $locatie = 'uploads/';
Ne vous déplacez les fichiers téléchargés dans il ou sont-ils encore dans le dossier de téléchargement temporaire?
OriginalL'auteur Muiter | 2011-06-12
Vous devez vous connecter pour publier un commentaire.
Voir ici comment gérer les uploads de fichier abord:
Gérer les uploads de fichier
Vous devez vous référer à la nom de fichier temporaire. Qui est nécessaire pour obtenir le nom de fichier réel, non seulement le nom du fichier.
De sorte que l'accès
$_FILES['userfile']['name']
pour l'écrit le nom de fichier de la pièce jointe et$_FILES['userfile']['tmp_name']
pour spécifier le fichier réel (données) de l'upload.À peu près à mettre dans votre code, incl. une validation vous devriez faire ainsi pour vérifier qu'il est en fait un fichier de téléchargement:
Un mot de prudence
Votre code mélange les deux emplois les uns avec les autres. Qui rend difficile pour vous de débogage et d'améliorer et de prendre soin des choses comme fichier/système de questions et de sécurité.
Je vous suggère un peu différente de l'approche: Faire un pas après l'autre. Dans votre cas, à savoir, 1.) processus de l'upload de fichiers et de recueillir les données dont vous avez besoin, 2.) ajouter ces pièces jointes.
Vous pouvez améliorer la première partie en prenant un coup d'oeil dans le Manuel PHP. Si vous voulez soutenir le téléchargement de plusieurs fichiers, je vous conseille de vous orienter sur les suggestions données dans la page Le téléchargement de plusieurs fichiers. Ensuite, le processus de téléchargement de fichiers et la forme d'un tableau qui contient le nom de fichier sur l'ordinateur client et le chemin d'accès sur le serveur par entrée.
Si il y a une erreur déjà dans cette partie, vous savez que c'est lié à la procédure de téléchargement de fichiers. C'est du code non testé, donc, juste l'illustration d'un sens.
Dans la deuxième étape, vous pouvez ensuite vous suffit de parcourir le tableau et ajouter les pièces jointes:
Vous pouvez ensuite vérifier les erreurs dans les différentes parties sans mélanger un problème avec les autres.
Muiter, faire de cette façon: d'Abord réécrire votre script pour l'upload de fichier. PHP supporte de multiples téléchargements de fichiers de construire, veuillez consulter le manuel comment le faire mieux que vous. Ensuite après vous avez acquis une liste des fichiers (et que vous avez vérifié le déroulement du programme), vous pouvez facilement ajouter des pièces jointes.
J'ai ajouté un peu plus de code d'exemple pour mieux illustrer mon dernier commentaire. J'espère que c'est de l'utiliser, je sais que c'est parfois dur quand soi-même est coincé dans des problèmes.
Bon travail @hakre, c'est un nouveau défi pour moi!
OriginalL'auteur hakre
Avant d'ajouter une pièce jointe, vous devriez vérifier si le fichier existe, par exemple, avec
fopen
.OriginalL'auteur patapizza
Solution
Mise à jour
Vous avez été en utilisant
$locatie.$_FILES['uploaded'.$i]['name']
au lieu de$locatie.$_FILES['uploaded'.$i]['tmp_name']
que le fichier à charger. Lorsqu'un fichier est téléchargé, il est renommé avec un nom temporaire et placé dans le dossier temporaire. C'est là que vous l'obtiendrez, et c'est pourquoi vous avez besoin de faire référence à elle avec$locatie.$_FILES['uploaded'.$i]['tmp_name']
mise à jour de ma réponse, une solution.
OriginalL'auteur Shef
J'ai été en mesure de résoudre ce problème avec l'aide d'un compteur:
Boucle pour la pièce jointe:
OriginalL'auteur Muiter
D'accord avec @patapizza, mais avant de vous enregistrer sur le système de fichiers (que vous devriez faire de toute façon), vous pouvez également vérifier pour la variable $_FILES comme
alors le résultat de
count($_FILES)
sera de 1, voir php.net/countOui, et la boucle sera exécuté 3 fois. Je vais donc faire 2 erreurs.
Je suis désolé, je n'ai pas été plus précis, mais votre pour boucle s'agit évidemment que d'une itération sur l'élément que vous avez. Je vais mettre à jour la réponse en conséquence.
Thx pour les aider, mais toujours les mêmes erreurs.
OriginalL'auteur konsolenfreddy
Vous avez besoin de vérifier si un fichier a été réellement envoyé/existe avant l'ajout de la pièce jointe. Quelque chose comme
Regardez les hakre réponse -- essayez de
$locatie.$_FILES['uploaded'.$i]['tmp_name']
. J'ai mis à jour la réponse-s'il vous plaît vérifier.En tout cas, jetez un oeil à ceci si vous ne l'avez pas déjà fait.
Désolé, fait un gâchis par l'édition de votre réponse de façon non intentionnelle. :/
pas de soucis, au-dessous de 2000 réputation et vos modifications aller dans un a suggéré des modifications file d'attente. Même si elle a été commise, il y a toujours la possibilité de revoir un post à une version antérieure. 🙂
OriginalL'auteur LazyOne
Ne sais pas si c'est exactement ce que vous voulez, mais c'est de cette façon que j'ai joint plusieurs fichiers téléchargés et gardé les noms des fichiers d'origine à partir d'un formulaire en ligne. Erreur de manipulation/de messagerie pour les utilisateurs ne donnera pas d'erreur pour UPLOAD_ERR_NO_FILE parce que les uploads de fichier ont été les champs facultatifs, mais toujours le même processus pour chaque champ de saisie dans la boucle foreach.
OriginalL'auteur Supamic