Mailformular mit Anhang
heinzi
- php
0 Edgar Ehritt0 dedlfix
Hi zusammen,
ich habe ein Mailformular erweiter um eine Upload-Möglichkeit.
Die datei steht mir durch $_FILES zur Verfügung.
Kann ich nach aktuellstem Stand die Datei mit den bisherigen Infos
name, text, email etc. an eine E-mail senden oder MUSS ich die datei speichern und dann verarbeiten.
wenn ja, wie kann ich das am schnellsten anpassen??
<i>
if ($_POST[sent]==1) {
$vorname = trim($_REQUEST[vorname]);
$nachname = trim($_REQUEST[nachname]);
$email = trim($_REQUEST[email]);
$adress = trim($_REQUEST[adress]);
$ganzername = $_REQUEST[vorname]." ".$_REQUEST[nachname];
$nachricht = trim($_REQUEST[nachricht]);
$tempname = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];
$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];
if (!$vorname && $_POST[sent]==1)
{echo "Trage bitte Deinen Vornamen ein!<br>";}
if (!$nachname)
{echo "Trage bitte Deinen Nachnamen ein!<br>";}
if (!$email)
{echo "Trage bitte Deine E-mail-Adresse ein!<br>";}
unset ($_POST[sent]);
}
if ($_POST[sent]==1) {
echo "<br>Dein Name lautet <i>$ganzername </i><br>";
echo "Deine E-Mail-Adresse ist <i>$email</i> <br>";
echo "Deine Adresse lautet:<br> <i>$adress </i><br>";
echo "Deine Nachricht lautet:<br> <i>$nachricht </i><br>";
if(empty($err)) {
copy("$tempname", "$name");
if (isset($name))
{
echo "Die Datei $name wurde erfolgreich hochgeladen!";
}
}
else {
foreach($err as $error)
echo "$error<br>";
}
}
if($type != "image/gif" && $type != "image/pjpeg") {
$err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.";
}
if($size > "153600") {
$err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 150 KB!";
}
unset ($_POST[sent]);
if(!empty($vorname) AND !empty($nachname) AND !empty($email))
{
$message="Über die Schulze Website kam folgende Nachricht:\n\n";
$message.="Vorname:\n";
$message.=$vorname;
$message.="\n\n Nachname:\n ";
$message.=$nachname;
$message.="\n\n E-Mail:\n ";
$message.=$email;
$message.="\n\n Adresse:\n";
$message.=$adress ;
$message.="\n\n Text:\n";
$message.=$nachricht ;
$message.="\n\n Dateianhang:\n";
$message.=$name;
$message.=$type;
$message.=$size;
$header="\n Content-Type: text/html";
mail("....")
</i>
danke im voraus
Hallo,
Kann ich nach aktuellstem Stand die Datei mit den bisherigen Infos
name, text, email etc. an eine E-mail senden oder MUSS ich die datei speichern und dann verarbeiten.
Das ist ja gerade das Problem mit PHP. Man hat keine Möglichkeiten, in einen upload einzugreifen. Hochgeladene Dateien werden vor dem Parsen eines Scripts immer ins Filesystem abgelegt; also die Dateien im Verzeichnis, welches durch upload_tmp_dir mit konfiguriert wurde, gespeichert. Es gab mal vor Jahren eine Bestrebung, dies mit einer PHP-Erweiterung zu ändern http://pecl.php.net/package/postparser. Jedoch ist dieses Paket nicht mehr auffindbar. ;(
if($type != "image/gif" && $type != "image/pjpeg") {
$err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.";
}
Eine Anmerkung noch nebenbei: $_FILES['file']['type']
wird durch die Request-Header gesetzt und ist auf keinen Fall eine geeignete Überprüfung, um sicherzustellen, dass Bilder hochgeladen wurden! Stattdessen stellt IMHO die Funktion getimagesize() eine indirekte aber zuverlässige Prüfung dar.
Gruß aus Berlin!
eddi
echo $begrüßung;
Das ist ja gerade das Problem mit PHP. Man hat keine Möglichkeiten, in einen upload einzugreifen. Hochgeladene Dateien werden vor dem Parsen eines Scripts immer ins Filesystem abgelegt; also die Dateien im Verzeichnis, welches durch upload_tmp_dir mit konfiguriert wurde, gespeichert. Es gab mal vor Jahren eine Bestrebung, dies mit einer PHP-Erweiterung zu ändern http://pecl.php.net/package/postparser. Jedoch ist dieses Paket nicht mehr auffindbar. ;(
Seit PHP 5.2 ist zumindest im Inneren PHPs eine Möglichkeit geschaffen worden, Informationen zu einem laufenden Upload zu bekommen. Wenn ich das richtig sehe, macht wohl die PECL-Erweiterung uploadprogress davon Gebrauch.
echo "$verabschiedung $name";
Hallo,
Seit PHP 5.2 ist zumindest im Inneren PHPs eine Möglichkeit geschaffen worden, Informationen zu einem laufenden Upload zu bekommen. Wenn ich das richtig sehe, macht wohl die PECL-Erweiterung uploadprogress davon Gebrauch.
die Erweiterung hatte ich mir in diesem Zusammenhang auch angesehen. Wenn ich den Quellcode richtig verstehe, geht es dabei aber leider auch nur um eine Fortschrittsanzeige. Schöner wäre es in Meinen Vorstellungen aber, wenn z. B. ein mit auto_append_file benanntes Script den uploade -entgegennehmen- würde, also für die Verarbeitung sorgt. Gerade das vom OP gelieferte Beispiel zeigt sehr deutlich, welche unnötig doppelte Arbeit durch PHP gemacht wird, statt den stream umzuformatieren und ohne Umweg übers FS gleich an sendmail durchzureichen.
Das sollte aber, wenn man ein CLI- statt eines CGI-Binärs einsetzt, machbar sein. Ich werde den Gedankengang mal bei Gelegenheit aufgreifen und zu berichten wissen.
Gruß aus Berlin!
eddi