phpMailer Anhang
Ich bin mit diesem zum Anhängen von Dateien an eine E-mail nach dem Upload auf meinen server:
for ($i = 0; $i <= 2; $i++)
{
$mail->AddAttachment($locatie.$_FILES['uploaded'.$i]['name'], $_FILES['uploaded'.$i]['name']);
}
Hinzufügen von Anlagen ist optional, aber wenn die keine hochgeladenen Dateien gibt es einen Fehler: Konnte nicht auf Datei
Wie kann ich verhindern, dass diese Fehler zeigen?
Was bedeutet
@hakre $locatie = 'uploads/';
Bewegen Sie die hochgeladenen Dateien in es oder sind Sie noch in den temporären upload-Ordner?
$locatie
stehen?@hakre $locatie = 'uploads/';
Bewegen Sie die hochgeladenen Dateien in es oder sind Sie noch in den temporären upload-Ordner?
InformationsquelleAutor Muiter | 2011-06-12
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen Sie hier, wie Sie sich mit Datei-uploads zuerst:
Die Behandlung von Datei-uploads
Finden Sie den temporären Dateinamen. Das ist nötig, um die tatsächlichen Dateinamen, nicht nur den Namen der Datei.
Werden, sodass der Zugriff
$_FILES['userfile']['name']
für die schriftliche mit dem Namen der Anlage und die$_FILES['userfile']['tmp_name']
angeben, die eigentliche Datei (die Daten) hochladen.Etwa in Ihrem code, inkl. eine Validierung Sie tun sollten, als auch zu überprüfen, ob dies tatsächlich ein Datei-upload:
Ein Wort der Vorsicht
Ihren code mischt zwei jobs miteinander. Das macht es schwer für Sie zu Debuggen und zu verbessern - und um die kümmern sich um Dinge wie Datei/system und Sicherheit.
Ich schlage vor, Sie ein wenig anders Vorgehen: Mach einen Schritt nach dem anderen. In Ihrem Fall nämlich, 1.) Prozess die Datei-uploads und sammeln die Daten, die Sie benötigen, 2.) fügen Sie diese Anlagen.
Können Sie verbessern den ersten Teil, indem Sie einen Blick in das PHP-Handbuch. Wenn Sie möchten, unterstützt das hochladen von mehreren Dateien, schlage ich vor, Sie orientieren sich an den Anregungen, die in die Seite Hochladen von mehreren Dateien. Dann verarbeiten Sie die Datei-uploads und-Formular ein array mit den Dateinamen auf dem client-computer und der Pfad auf dem server system pro Eintrag.
Wenn es ist ein Fehler, der schon in dem Teil, wissen Sie, dass es im Zusammenhang mit der Datei-upload-Verfahren. Dieser code ist ungetestet, deshalb nur zur Veranschaulichung einer Richtung.
Im zweiten Schritt kann man dann einfach Durchlaufen wie ein array und fügen Sie die Anhänge:
Kann man dann besser überprüfen, auf Fehler in den verschiedenen teilen, ohne zu mischen, ein problem mit den anderen.
Muiter, tun Sie es auf diese Weise: Zuerst schreiben Sie Ihre Skript für die Datei-upload-Teil. PHP unterstützt mehrere Datei-uploads erstellen, überprüfen Sie die Anleitung, wie das zu tun, besser als Sie es tun. Dann wird nachdem, die Sie erworben haben, eine Liste aller gültigen Dateien (und haben Sie überprüft den Programm-Ablauf), dann können Sie einfach fügen Sie die Anhänge.
Ich habe ein paar mehr Beispiel-code zur besseren Veranschaulichung meiner letzten Bemerkung. Hoffentlich ist dies von nutzen, ich weiß, es ist manchmal schwer, wenn man selbst stecken geblieben ist, in Probleme.
Gute Arbeit @hakre, das ist eine neue Herausforderung für mich!
InformationsquelleAutor hakre
Bevor Sie Anlagen hinzufügen, sollten Sie überprüfen, ob die hochgeladene Datei existiert, z.B. mit
fopen
.InformationsquelleAutor patapizza
Lösung
Update
Waren Sie mit
$locatie.$_FILES['uploaded'.$i]['name']
statt$locatie.$_FILES['uploaded'.$i]['tmp_name']
als die Datei zu laden. Wenn eine Datei hochgeladen wird, wird Sie umbenannt, mit einem temporären Namen, und legte auf den temporären Ordner. Das ist, wo Sie es bekommen, und das ist, warum Sie benötigen, verweisen Sie mit$locatie.$_FILES['uploaded'.$i]['tmp_name']
aktualisiert meine Antwort mit einer Lösung.
InformationsquelleAutor Shef
War ich in der Lage, dieses problem zu lösen mit mit einem Zähler:
Schleife für die Befestigung:
InformationsquelleAutor Muiter
Einverstanden mit @patapizza, aber überprüfen, bevor Sie auf dem Dateisystem (das sollten Sie sowieso tun), können Sie auch einfach Scheck für $_FILES wie
dann das Ergebnis
count($_FILES)
1, siehe php.net/countJa, und die Schleife wird ausgeführt 3 mal. So bekomme ich 2 Fehler.
Tut mir Leid, ich war nicht mehr präzise, aber deine for-Schleife sollte natürlich nur Durchlaufen Element Sie haben. Ich werde aktualisieren, die Antwort entsprechend.
Thx für die Hilfe aber immer noch der gleiche Fehler.
InformationsquelleAutor konsolenfreddy
Müssen Sie prüfen, ob die Datei wurde tatsächlich hochgeladen/vorhanden ist, bevor Sie die Anlage. So etwas wie
Blick auf die hakre Antwort-versuchen
$locatie.$_FILES['uploaded'.$i]['tmp_name']
. Ich habe aktualisiert die Antwort -- überprüfen Sie bitte.In jedem Fall-haben Sie einen Blick auf dieser, wenn Sie nicht haben es bereits getan.
Sorry, ein Chaos, indem Sie mit der Bearbeitung Ihrer Antwort versehentlich. :/
keine Sorge, unter 2000 Ruf und Ihre Bearbeitungen gehen in einen vorgeschlagenen änderungen Warteschlange. Auch wenn es begangen wurde, es gibt immer die Möglichkeit, rollback für einen Beitrag zu einer früheren version. 🙂
InformationsquelleAutor LazyOne
Nicht sicher, ob dies genau das tut, was Sie wollen, aber dies ist, wie befestigte ich mehrere Dateien hochgeladen und immer original-Dateinamen aus einem Webformular. Fehler-handling/messaging für Benutzer wird es nicht geben Fehler für UPLOAD_ERR_NO_FILE, weil Datei-uploads wurden in optionale Felder, aber immer noch verarbeitet jedes Eingabefeld in der foreach-Schleife.
InformationsquelleAutor Supamic