Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

php Upload-Skript

6 views
Skip to first unread message

Detlef Paschke

unread,
Nov 16, 2019, 9:33:37 AM11/16/19
to
Hallo an alle,

bitte nicht gleich schlagen und brüllen, ich sammle meine php-Sachen in
der Tat nur zusammen und Frage mich durch bis ich am Ziel bin.
Ich begreife den Syntax einfach nicht und das ist das Große Problem.

Ich habe mir hier ein Upload-Skript zusammengesammelt, dass seit Jahren
zufriedenstellend arbeitet und da es sehr klein und übersichtlich ist,
verstehe ich es sogar annähernd. Bei der Umstellung von php5 auf php7
musste ich eine Kleinigkeit ändern, nun ist aber alles wieder in Ordnung.

Bis jetzt wird im Skript überprüft ob keine Datei ausgewählt wurde, ob
die Datei zu groß ist und ob die Datei leer ist.

Nun wollte ich gern noch auf die Dateiendung überprüfen und habe mir
diese Zeilen gesucht.
Im Header steht:
# Geben Sie hier die erlaubten Dateitypen an ('zip', 'gzip').
$extension = strtolower(pathinfo($_FILES['datei']['name'],
PATHINFO_EXTENSION));
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif', 'pdf');

Und dann unten im Formular:
if(!in_array($extension, $allowed_extensions)) {
echo "Ungültige Dateiendung";
exit;

Das funktioniert, nur wenn ich die Upload-Seite betrete, sprich keine
Datei ausgewählt habe erscheint diese Meldung wenn ich in php
eingestellt habe, dass Fehlermeldungen angezeigt werden sollen:

Notice: Undefined index: datei in
/var/www/htdocs/schabau.goip.de/upload/upload.php on line 13.
Zeile 13 ist dabei die Zeile die mit "$extension = strtolower" beginnt.

Tja und die zweite Sache wird sicher auch nur ein Syntaxproblem sein.
Auf der Webseite wird derzeit automatisch angezeigt, wie groß eine Datei
sein darf.

$int_max_filesize = 524288000;

im Header und

<p align="center"><u>Maximale Dateigröße <?php echo round
($int_max_filesize/1024/1024, 2)?></u></p>

dann im html-Bereich.

Nun hätte ich gern noch eine Zeile direkt darunter, in der die Erlaubten
Dateiendungen aus

$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif', 'pdf');

aufgeführt werden. Ein schlichtes echo ($allowed_extensions) geht
zumindest nicht aber sicher ist es auch nur wieder ein Syntax-Problem.


Ich bin für jeden Tipp dankbar
Detlef Paschke

--
registered Fli4l-User #00000209
Das "Zitat des Augenblicks" gibt es nur auf
http://www.schabau.goip.de

Karl Pflästerer

unread,
Nov 16, 2019, 10:36:16 AM11/16/19
to
Detlef Paschke <sch...@t-online.de> writes:

> Hallo an alle,

[...]

> Nun wollte ich gern noch auf die Dateiendung überprüfen und habe mir
> diese Zeilen gesucht.
> Im Header steht:
> # Geben Sie hier die erlaubten Dateitypen an ('zip', 'gzip').
> $extension = strtolower(pathinfo($_FILES['datei']['name'],
> PATHINFO_EXTENSION));
> $allowed_extensions = array('png', 'jpg', 'jpeg', 'gif', 'pdf');
>
> Und dann unten im Formular:
> if(!in_array($extension, $allowed_extensions)) {
> echo "Ungültige Dateiendung";
> exit;
>
> Das funktioniert, nur wenn ich die Upload-Seite betrete, sprich keine
> Datei ausgewählt habe erscheint diese Meldung wenn ich in php
> eingestellt habe, dass Fehlermeldungen angezeigt werden sollen:
>
> Notice: Undefined index: datei in
> /var/www/htdocs/schabau.goip.de/upload/upload.php on line 13.
> Zeile 13 ist dabei die Zeile die mit "$extension = strtolower" beginnt.

Da du noch nichts hocgealden hast, ist $_FILES leer. Daher die Notice

Lasse den ganzen Block nur ausführen, wenn etwas hochgeladen wurde.

Also zB

if (!empty($_FILES['datei'])) {
... dein Code
}


>
> Tja und die zweite Sache wird sicher auch nur ein Syntaxproblem sein.
> Auf der Webseite wird derzeit automatisch angezeigt, wie groß eine Datei
> sein darf.
>
> $int_max_filesize = 524288000;
>
> im Header und
>
> <p align="center"><u>Maximale Dateigröße <?php echo round
> ($int_max_filesize/1024/1024, 2)?></u></p>
>
> dann im html-Bereich.
>
> Nun hätte ich gern noch eine Zeile direkt darunter, in der die Erlaubten
> Dateiendungen aus
>
> $allowed_extensions = Array('png', 'jpg', 'jpeg', 'gif', 'pdf');
>
> aufgeführt werden. Ein schlichtes echo ($allowed_extensions) geht
> zumindest nicht aber sicher ist es auch nur wieder ein Syntax-Problem.


Da $allowed_extensions ein Array ist, musst du daraus eine Zeichenkette
machen, wenn du es ausgeben willst.

Zum Beispiel

echo htmlspecialchars(implode(',', $allowed_extensions));


Wenn du nicht weisst, was alles in $allowed_extensions stehen kann,
sichert htmlspecialchars, dass du gültiges html hast

KP

Detlef Paschke

unread,
Nov 17, 2019, 5:30:45 AM11/17/19
to
Am 16.11.2019 um 16:36 schrieb Karl Pflästerer:
> Detlef Paschke <sch...@t-online.de> writes:
>


>> Notice: Undefined index: datei in
>> /var/www/htdocs/schabau.goip.de/upload/upload.php on line 13.
>> Zeile 13 ist dabei die Zeile die mit "$extension = strtolower" beginnt.
>
> Da du noch nichts hocgealden hast, ist $_FILES leer. Daher die Notice
>
> Lasse den ganzen Block nur ausführen, wenn etwas hochgeladen wurde.
>
> Also zB
>
> if (!empty($_FILES['datei'])) {
> ... dein Code
> }

das wird hier wie ich es verstehe bereits getan, aber so:

if(array_key_exists('datei', $_FILES)) {

Die Infomeldung erscheint aber mit beiden Varianten.

>> Nun hätte ich gern noch eine Zeile direkt darunter, in der die Erlaubten
>> Dateiendungen aus
>>
>> $allowed_extensions = Array('png', 'jpg', 'jpeg', 'gif', 'pdf');
>>
>> aufgeführt werden. Ein schlichtes echo ($allowed_extensions) geht
>> zumindest nicht aber sicher ist es auch nur wieder ein Syntax-Problem.
>
>
> Da $allowed_extensions ein Array ist, musst du daraus eine Zeichenkette
> machen, wenn du es ausgeben willst.
>
> Zum Beispiel
>
> echo htmlspecialchars(implode(',', $allowed_extensions));

Das habe ich jetzt nach einigem suchen so lösen können:

Erlaubte Dateitypen <?php print_r(array_values($allowed_extensions))?>

Was mir daran nur nicht so ganz gefällt ist, dass die Auflistung mit
"Array" beginnt und danach in Klammern und Nummeriert die Dateitypen
aufgelistet werden.

Erlaubte Dateitypen Array ( [0] => jpeg [1] => pdf [2] => zip )

> KP
>

Viele Grüße

Detlef Paschke

unread,
Nov 17, 2019, 5:45:09 AM11/17/19
to
Da habe ich jetzt auch was gefunden:

Erlaubte Dateitypen <?php echo (implode(", ", $allowed_extensions))?>

gibt diese Zeile aus:

Erlaubte Dateitypen jpeg, pdf, zip

Detlef Paschke

unread,
Nov 17, 2019, 7:31:21 AM11/17/19
to
Am 17.11.2019 um 11:30 schrieb Detlef Paschke:
> Am 16.11.2019 um 16:36 schrieb Karl Pflästerer:
>> Detlef Paschke <sch...@t-online.de> writes:
>>
>
>>> Notice: Undefined index: datei in
>>> /var/www/htdocs/schabau.goip.de/upload/upload.php on line 13.
>>> Zeile 13 ist dabei die Zeile die mit "$extension = strtolower" beginnt.
>> Da du noch nichts hocgealden hast, ist $_FILES leer. Daher die Notice
>>
>> Lasse den ganzen Block nur ausführen, wenn etwas hochgeladen wurde.
>>
>> Also zB
>>
>> if (!empty($_FILES['datei'])) {
>> ... dein Code
>> }
> das wird hier wie ich es verstehe bereits getan, aber so:
>
> if(array_key_exists('datei', $_FILES)) {
>
> Die Infomeldung erscheint aber mit beiden Varianten.
>

Problem gelöst, die Zeile 13:

$extension = strtolower(pathinfo($_FILES['datei']['name'],
PATHINFO_EXTENSION));

stand nur an der falschen Stelle und zwar oben im ersten Abschnitt wo
die ganzen Config-Zeilen stehen.
Jetzt steht sie unten vor:

if(!in_array($extension, $allowed_extensions)) {

im eigentlichen Code und wird somit natürlich nur ausgeführt wenn eine
Datei da ist.

Danke für den "Schubs" in die richtige Richtung Karl.

Jan Novak

unread,
Nov 18, 2019, 9:58:11 AM11/18/19
to
Am 17.11.19 um 11:30 schrieb Detlef Paschke:
>>> $allowed_extensions = Array('png', 'jpg', 'jpeg', 'gif', 'pdf');

> Erlaubte Dateitypen <?php print_r(array_values($allowed_extensions))?>
>
> Was mir daran nur nicht so ganz gefällt ist, dass die Auflistung mit
> "Array" beginnt und danach in Klammern und Nummeriert die Dateitypen
> aufgelistet werden.
>
> Erlaubte Dateitypen Array ( [0] => jpeg [1] => pdf [2] => zip )

Das liegt an "print_r", der sagt dir halt, "woraus" die Variable
$allowed_extensions besteht...

Jan

Detlef Paschke

unread,
Nov 19, 2019, 8:54:27 AM11/19/19
to
Am 18.11.2019 um 15:58 schrieb Jan Novak:
> Am 17.11.19 um 11:30 schrieb Detlef Paschke:

>> Erlaubte Dateitypen <?php print_r(array_values($allowed_extensions))?>
>>
>> Was mir daran nur nicht so ganz gefällt ist, dass die Auflistung mit
>> "Array" beginnt und danach in Klammern und Nummeriert die Dateitypen
>> aufgelistet werden.
>>
>> Erlaubte Dateitypen Array ( [0] => jpeg [1] => pdf [2] => zip )
>
> Das liegt an "print_r", der sagt dir halt, "woraus" die Variable
> $allowed_extensions besteht...

Habe ich mit echo (implode(", ", $allowed_extensions)) lösen können wie
schon weiter oben geschrieben.

> Jan
>

vg
0 new messages