Frage zu Files-Upload

  • Themenstarter Themenstarter starfoxfs
  • Beginndatum Beginndatum
S

starfoxfs

Hi,

Ich habe eine Frage zu $_FILES.

Und zwar möchte ich das in meinem Script eine Email mit Anhang oder eine Email ohne Anhang verschickt wird.

Mein Problem ist das wenn ich keine Datei anhänge trotzdem das Script mit Dateianhang gewählt wird.

PHP:
// Email mit Dateianhang starten
if (isset($_FILES["datei"]["tmp_name"])) {
.
.
.
}
// -->

// Email ohne Dateianhang starten
if (!isset($_FILES["datei"]["tmp_name"])) {
.
.
.
}

Das Formular sieht so aus :

PHP:
<form action="./test.php?submit=true" enctype="multipart/form-data" name="test" id="test" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $size; ?>" />

.
.
.
<input type="file" name="datei" id="datei" size="40" maxlength="100" />

.
.
.
</form>


:Edit:

Mit Empty geht das ganze aber warum nicht mit isset

PHP:
// Email mit Dateianhang starten
if (!empty($_FILES["datei"]["tmp_name"])) {
.
.
.
}
// -->

// Email ohne Dateianhang starten
if (empty($_FILES["datei"]["tmp_name"])) {
.
.
.
}

Ich habe aber gleich noch eine 2te Frage und zwar möchte ich eine Fehlerausgabe machen wenn die Datei die hochgeladen wird zu groß ist.

Problem hierbei ist
PHP:
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $size; ?>" />

Wenn die Dateigröße nun überschritten wird dann übermittelt er mir keine Dateigröße da ja die Datei nicht übermittelt wird. Folglicherweise kann ich auch keine Errorausgabe schreiben und das Formular wird ohne Dateianhang abgeschickt. Jemand ne Idee wie man trotzdem ne Errorausgabe schreiben kann ?
 
Zuletzt bearbeitet von einem Moderator:
Weil empty <> leer

PHP:
<?php
$a = array('a', 2, null, '', 0);

echo "__ : isset() | empty()<br />\n";
for ($i=0; $i<count($a); $i++){
    echo "{$i} ({$a[$i]}): ".(isset($a[$i]) ? 'true' : 'false')." | ".(empty($a[$i]) ? 'true' : 'false')."<br />\n";
}
echo "Index ausserhalb array: ".(isset($a[10]) ? 'true' : 'false')." | ".(empty($a[$i]) ? 'true' : 'false')."<br />\n";

?>
Ergibt
Code:
__ | isset() | empty()
0 (a): true | false
1 (2): true | false
2 (): false | true
3 (): true | true
4 (0): true | true
Index ausserhalb array: false | true
 
Zuletzt bearbeitet:
Ok, dann ist nurnoch meine 2te Frage siehe oben relevant das ist eigentlich auch mein größtes Problem derzeit.
 
Formular Dateigröße vor Upload prüfen

Hi zusammen,

Mein Formular ist fast fertig und ich habe noch ein großes Problem.

Und zwar möchte ich die Dateigröße vor dem Upload im Formular prüfen.

Jemand ne Idee wie ich das realisieren kann ?
 
Moin,

dies geht nicht ohne Hilfsmittel, browserseitig ist kein Zugriff auf die Datei vom Clientrechner möglich.

Mögliches Hilfsmittel, mit dem du vor dem Upload etwas über die Datei herausfinden kannst(mal vom lokalen Pfad abgesehen, der im Upload-Feld steht), wäre ein Flash-Uploader.
 
Ich habe nur bedenken da mein Formular ja öffentlich zugänglich ist und immer die Datei als erstes hochgeladen wird, zumindest Temporär.
Also könnte ja einer den Server zuspammen mit Dateien oder ?
 
Jo, man könnte ihn zuspammen, wenn du es so nennen willst.

Wenn du das ein wenig kontrollieren willst, könntest du versuchen, per .htaccess für das Skript die PHP-Einstellung upload_max_filesize auf den gewünschten Wert zu setzen(per ini_set() sollte es lt. PHP-Manual nicht gehen).
Ich kann dir jetzt aber nicht sagen, ob die Datei dann trotzdem erstmal temporär auf dem Server landet oder gleich abgewiesen wird.
 
Wird trotzdem gesendet wird aber dann vom Server abgewiesen aber das senden an sich funktioniert.

Ich hab jetzt in meinem Formular

<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxSize.'" />

rausgenommen

und überprüfe es per PHP dann kann ich auch eine Errorausgabe schreiben.
 
Zuletzt bearbeitet von einem Moderator:
Solange der Upload geht ist die HTTP Verbindung geöffnet und das PHP Skript läuft.
Erst wenn das Ende der Datei erreicht wird, das berühmte EOF, kann PHP die Größe bestimmen. Auch JavaScript kann das nicht tun.

Hier mal Vorschläge:
  • per Apache begrenzen:
Code:
LimitRequestBody 2097152
Das würde das Maximum auf 2MB setzen und zeigt sonst einen Fehler an (HTTP Fehler 413), den kann man umleiten auf eine schöne Fehlerseite
 
Zurück