/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
MAX_FILE_SIZE på e-mail virker ikke
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 18:19

Jeg har denne mailform, men problemet er at jeg kun vil tillade filer på 1
MB og det virker ikke. Umiddelbart ville jeg mener at hvis man forsøgte med
større filer, så skulle echo "Der skete en fejl - prøv igen!"; tages i brug,
men det gør den ikke.

<?php
if (isset($_POST['mailform'])) {
if (isset($_POST['mailform']) && empty($_POST['inputname'])) {
echo "Du mangler at udfylde navn!";
}
elseif (isset($_POST['mailform']) && empty($_POST['inputemail'])) {
echo "Du mangler at udfylde e-post!";
}
elseif (isset($_POST['mailform']) && empty($_POST['inputmessage'])) {
echo "Du mangler at udfylde besked!";
}
elseif (!empty($_POST['inputname']) && !empty($_POST['inputemail']) &&
!empty($_POST['inputmessage'])) {
if (empty($_FILES['inputfile']['tmp_name'])) {
$message = "$_POST[inputmessage]\r\n\r\n";
$headers = "Content-type: text/plain; charset=iso-8859-1\r\n";
}
else {
$boundary = uniqid('');
$mimeType = ($_FILES['inputfile']['type'] ?
$_FILES['inputfile']['type'] : 'application/unknown');
$file = fread(fopen($_FILES['inputfile']['tmp_name'], 'r'),
filesize($_FILES['inputfile']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$message = "\r\n--$boundary\r\n";
$message .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$message .= "Content-transfer-encoding: 8bit\r\n\r\n";
$message .= "$_POST[inputmessage]\r\n\r\n";
$message .= "--$boundary\r\n";
$message .= "Content-type: $mimeType;
name=".$_FILES['inputfile']['name']."\r\n";
$message .= "Content-disposition: attachment;
filename=".$_FILES['inputfile']['name']."\r\n";
$message .= "Content-transfer-encoding: base64\r\n\r\n";
$message .= $file."\r\n\r\n";
$message .= "--$boundary--";
$headers = "Content-type: multipart/mixed;
boundary=\"$boundary\"\r\n";
}
$recipient = "jimmy@remove.e-frederiksen.dk";
$subject = "$_POST[inputsubject]";
$message .= "$_POST[inputname]\r\n";
$message .= "$_POST[inputaddress]\r\n";
$message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n";
$headers .= "From: \"$_POST[inputname]\" <$_POST[inputemail]>\r\n";
$headers .= "Bcc: webmaster@remove.e-frederiksen.dk";
mail ($recipient, $subject, stripslashes($message), $headers);
echo "Beskeden er sendt!";
unset ($_POST['inputname'], $_POST['inputemail'],
$_POST['inputmessage']);
}
else {
echo "Der skete en fejl - prøv igen!";
}
}
else {
echo "Felter med * skal udfyldes!";
}
?>

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];
?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Navn* <input type="text" value="<?php if (isset($_POST['inputname'])) { echo
$_POST['inputname']; } ?>" name="inputname"><br>
E-post* <input type="text" value="<?php if (isset($_POST['inputemail'])) {
echo $_POST['inputemail']; } ?>" name="inputemail"><br>
Adresse <input type="text" name="inputaddress"><br>
Postnummer <input type="text" name="inputpostcode" size="3"> By <input
type="text" name="inputcity"><br>
Emne <select name="inputsubject">
<option value="Forespørgsel">Forespørgsel
<option value="Medlemskab">Medlemskab
<option value="Bidrag">Bidrag
</select><br>
Besked* <textarea rows="5" cols="0" name="inputmessage"><?php if
(isset($_POST['inputmessage'])) { echo $_POST['inputmessage']; }
?></textarea><br>
Vedhæft fil: <input type="file" name="inputfile"><br>
<input type="submit" name="mailform" value="Send">
</form>

Jimmy



 
 
Kasper Garnæs (04-04-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 04-04-04 19:10

Jimmy E. Frederiksen <jimmy@remove.e-frederiksen.dk> wrote:
> Jeg har denne mailform, men problemet er at jeg kun vil tillade filer
> på 1 MB og det virker ikke. Umiddelbart ville jeg mener at hvis man
> forsøgte med større filer, så skulle echo "Der skete en fejl - prøv
> igen!"; tages i brug, men det gør den ikke.

Så vidt jeg forstår på
http://dk2.php.net/manual/en/features.file-upload.php#features.file-upload.post-method,
så er MAX_FILE_SIZE noget, som browseren *måske* håndterer - ikke noget som
påvirker din PHP kode.

Hvis du vil være sikker på at filer over 1MB ikke bliver håndteret, skal du
sørge for selv at lave et check i din PHP kode.

if ($_FILES['inputfile']['size'] < 1000000) {
//send en mail
}

--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Jimmy E. Frederiksen (04-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 20:36

> Hvis du vil være sikker på at filer over 1MB ikke bliver håndteret, skal
du
> sørge for selv at lave et check i din PHP kode.
>
> if ($_FILES['inputfile']['size'] < 1000000) {
> //send en mail
> }

Tak, men jeg kan se hvad du mener og jeg tror også det virker - sådan da. Nu
vil den kun sende filer som er under 1MB, men sender alligevel mailen selvom
filen er større (dog uden filen). Er det ikke muligt at gøre sådan at man
fik at vide hvis filen var for stor (det jeg prøver at gøre med den
efterfølgende 'else')?

<?php
if (isset($_POST['mailform'])) {
if (isset($_POST['mailform']) && empty($_POST['inputname'])) {
echo "Du mangler at udfylde navn!";
}
elseif (isset($_POST['mailform']) && empty($_POST['inputemail'])) {
echo "Du mangler at udfylde e-post!";
}
elseif (isset($_POST['mailform']) && empty($_POST['inputmessage'])) {
echo "Du mangler at udfylde besked!";
}
elseif (isset($_POST['inputname']) && isset($_POST['inputemail']) &&
isset($_POST['inputmessage'])) {
if (empty($_FILES['inputfile']['tmp_name'])) {
$message = "$_POST[inputmessage]\r\n\r\n";
$headers = "Content-type: text/plain; charset=iso-8859-1\r\n";
}
elseif ($_FILES['inputfile']['size'] < "1000000") {
$boundary = uniqid('');
$mimeType = ($_FILES['inputfile']['type'] ?
$_FILES['inputfile']['type'] : 'application/unknown');
$file = fread(fopen($_FILES['inputfile']['tmp_name'], 'r'),
filesize($_FILES['inputfile']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$message = "\r\n--$boundary\r\n";
$message .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$message .= "Content-transfer-encoding: 8bit\r\n\r\n";
$message .= "$_POST[inputmessage]\r\n\r\n";
$message .= "--$boundary\r\n";
$message .= "Content-type: $mimeType;
name=".$_FILES['inputfile']['name']."\r\n";
$message .= "Content-disposition: attachment;
filename=".$_FILES['inputfile']['name']."\r\n";
$message .= "Content-transfer-encoding: base64\r\n\r\n";
$message .= $file."\r\n\r\n";
$message .= "--$boundary--";
$headers = "Content-type: multipart/mixed;
boundary=\"$boundary\"\r\n";
}
else {
echo "Der skete en fejl - prøv igen!";
}
$recipient = "jimmy@remove.e-frederiksen.dk";
$subject = "$_POST[inputsubject]";
$message .= "$_POST[inputname]\r\n";
$message .= "$_POST[inputaddress]\r\n";
$message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n";
$headers .= "From: \"$_POST[inputname]\" <$_POST[inputemail]>\r\n";
$headers .= "Bcc: webmaster@remove.e-frederiksen.dk";
mail ($recipient, $subject, stripslashes($message), $headers);
echo "Beskeden er sendt!";
unset ($_POST['inputname'], $_POST['inputemail'],
$_POST['inputaddress'], $_POST['inputpostcode'], $_POST['inputcity'],
$_POST['inputmessage']);
}

}
else {
echo "Felter med * skal udfyldes!";
}
?>

<form enctype="multipart/form-data" action="?id=kontakt" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
Navn* <input type="text" value="<?php if (isset($_POST['inputname'])) { echo
$_POST['inputname']; } ?>" name="inputname"><br>
E-post* <input type="text" value="<?php if (isset($_POST['inputemail'])) {
echo $_POST['inputemail']; } ?>" name="inputemail"><br>
Adresse <input type="text" value="<?php if (isset($_POST['inputaddress']))
{ echo $_POST['inputaddress']; } ?>" name="inputaddress"><br>
Postnummer <input type="text" value="<?php if
(isset($_POST['inputpostcode'])) { echo $_POST['inputpostcode']; } ?>"
name="inputpostcode" size="3"> By <input type="text" name="inputcity"><br>
Emne <select name="inputsubject">
<option value="Forespørgsel">Forespørgsel
<option value="Medlemskab">Medlemskab
<option value="Bidrag">Bidrag
</select><br>
Besked* <textarea rows="5" cols="0" name="inputmessage"><?php if
(isset($_POST['inputmessage'])) { echo $_POST['inputmessage']; }
?></textarea><br>
Vedhæft fil: <input type="file" name="inputfile"><br>
<input type="submit" name="mailform" value="Send">
</form>



Jimmy E. Frederiksen (04-04-2004)
Kommentar
Fra : Jimmy E. Frederiksen


Dato : 04-04-04 22:00

Afprøvet lidt mere, men nu forstår jeg snart ikke en lyd. Nedenstående vil
ikke sende en .zip på 1.8MB, men godt én på 2.9MB?!

Hvis jeg prøver med den på 1.8MB melder den "Du kan kun vedhæfte en fil som
er mindre end 1MB!" som, iflg. min overbevisning er OK, men jeg fatter så
ikke hvorfor den vil sende den anden.

<?php
if (isset($_POST['mailform'])) {
if (isset($_POST['mailform']) && empty($_POST['inputname'])) {
echo "Du mangler at udfylde navn!";
}
elseif (isset($_POST['mailform']) && empty($_POST['inputemail'])) {
echo "Du mangler at udfylde e-post!";
}
elseif (isset($_POST['mailform']) && empty($_POST['inputmessage'])) {
echo "Du mangler at udfylde besked!";
}
elseif (isset($_POST['mailform']) && ($_FILES['inputfile']['size'] >=
1000000)) {
echo "Du kan kun vedhæfte en fil som er mindre end 1MB!";
}
elseif (isset($_POST['inputname']) && isset($_POST['inputemail']) &&
isset($_POST['inputmessage'])) {
if (empty($_FILES['inputfile']['tmp_name'])) {
$message = "$_POST[inputmessage]\r\n\r\n";
$headers = "Content-type: text/plain; charset=iso-8859-1\r\n";
}
elseif (isset($_FILES['inputfile']['tmp_name'])) {
$boundary = uniqid('');
$mimeType = ($_FILES['inputfile']['type'] ?
$_FILES['inputfile']['type'] : 'application/unknown');
$file = fread(fopen($_FILES['inputfile']['tmp_name'], 'r'),
filesize($_FILES['inputfile']['tmp_name']));
$file = base64_encode($file);
$file = chunk_split($file);

$message = "\r\n--$boundary\r\n";
$message .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$message .= "Content-transfer-encoding: 8bit\r\n\r\n";
$message .= "$_POST[inputmessage]\r\n\r\n";
$message .= "--$boundary\r\n";
$message .= "Content-type: $mimeType;
name=".$_FILES['inputfile']['name']."\r\n";
$message .= "Content-disposition: attachment;
filename=".$_FILES['inputfile']['name']."\r\n";
$message .= "Content-transfer-encoding: base64\r\n\r\n";
$message .= $file."\r\n\r\n";
$message .= "--$boundary--";
$headers = "Content-type: multipart/mixed;
boundary=\"$boundary\"\r\n";
}
else {
echo "Der skete en fejl - prøv igen!";
}
$recipient = "jimmy@remove.e-frederiksen.dk";
$subject = "$_POST[inputsubject]";
$message .= "$_POST[inputname]\r\n";
$message .= "$_POST[inputaddress]\r\n";
$message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n";
$headers .= "From: \"$_POST[inputname]\" <$_POST[inputemail]>\r\n";
$headers .= "Bcc: webmaster@remove.e-frederiksen.dk";
mail ($recipient, $subject, stripslashes($message), $headers);
echo "Beskeden er sendt!";
unset ($_POST['inputname'], $_POST['inputemail'],
$_POST['inputaddress'], $_POST['inputpostcode'], $_POST['inputcity'],
$_POST['inputmessage']);
}

}
else {
echo "Felter med * skal udfyldes!";
}
?>

<form enctype="multipart/form-data" action="?id=kontakt" method="post">
<!-- <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> -->
Navn* <input type="text" value="<?php if (isset($_POST['inputname'])) { echo
$_POST['inputname']; } ?>" name="inputname"><br>
E-post* <input type="text" value="<?php if (isset($_POST['inputemail'])) {
echo $_POST['inputemail']; } ?>" name="inputemail"><br>
Adresse <input type="text" value="<?php if (isset($_POST['inputaddress']))
{ echo $_POST['inputaddress']; } ?>" name="inputaddress"><br>
Postnummer <input type="text" value="<?php if
(isset($_POST['inputpostcode'])) { echo $_POST['inputpostcode']; } ?>"
name="inputpostcode" size="3"> By <input type="text" name="inputcity"><br>
Emne <select name="inputsubject">
<option value="Forespørgsel">Forespørgsel
<option value="Medlemskab">Medlemskab
<option value="Bidrag">Bidrag
</select><br>
Besked* <textarea rows="5" cols="0" name="inputmessage"><?php if
(isset($_POST['inputmessage'])) { echo $_POST['inputmessage']; }
?></textarea><br>
Vedhæft fil: <input type="file" name="inputfile"><br>
<input type="submit" name="mailform" value="Send">
</form>



Kasper Garnæs (05-04-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 05-04-04 12:56

Jimmy E. Frederiksen <jimmy@remove.e-frederiksen.dk> wrote:
> Afprøvet lidt mere, men nu forstår jeg snart ikke en lyd.
> Nedenstående vil ikke sende en .zip på 1.8MB, men godt én på 2.9MB?!
>
> Hvis jeg prøver med den på 1.8MB melder den "Du kan kun vedhæfte en
> fil som er mindre end 1MB!" som, iflg. min overbevisning er OK, men
> jeg fatter så ikke hvorfor den vil sende den anden.


Det lyder umiddelbart ret mystisk.

Prøv evt. at var_dump'e dine $_POST og $_FILES arrays, så du kan se, hvilke
værdier du får med fra form'en. Du kunne også prøve at tjecke filstørrelsen
vha. filesize($_FILES['inputfile']['tmp_name']) i stedet for at bruge
$_FILES['inputfile']['size'].

--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste