upload filename ist falsch

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
richi111
Mitglied
Beiträge: 16
Registriert: 06.03.2008 09:11

upload filename ist falsch

Beitrag von richi111 »

Hallo, hoffe das mir jemand kurz helfen kann , ich sehe einfach meinen Fehler nicht.
Ich lade eine Datei auf meinen Server hoch und der Filneame ist dann mit dem Laufwerksbuchstaben und dem Folder verbunden:
z.B. C:/myfolder/daswäredername.rar
Ich möchte aber nur das der Filename ohne den path gezeigt wird - also nur daswäredername.rar
und genau das habe ich irgendwo einen Fehler den ich nicht finde.
Hier mein sript:

Code: Alles auswählen

# prepare files vars
    if(!defined('PHPUPLOADMODULE')||PHPUPLOADMODULE==0)
    {
        $_FILES=array();
        if($_POST[file])
        foreach($_POST[file][name] as $index => $name)
        {
            $_FILES[$index]= array(
            'name' => strrpos($name,'/')===false ? $name : substr($name,strrpos($name,'/')),
             'size' => $_POST[file][size][$index],
            'tmp_name' => $uploader->temp_dir . '/' . basename($_POST[file][tmp_name][$index]),//$_POST[file][tmp_name][$index],
            );
        } 
wäre dankbar wenn jemand dies anschaut Danke im Voraus
Zuletzt geändert von gn#36 am 04.10.2011 18:55, insgesamt 1-mal geändert.
Grund: Code Tags eingefügt, bitte in Zukunft selbstständig verwenden!
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: upload filename ist falsch

Beitrag von gn#36 »

Gibt es einen speziellen Grund, warum du nicht $_FILES verwendest bzw. es explizit leerst?

Normalerweise solltest du per [php:basename] den Pfad wegschneiden können, d.h. z.B. per

Code: Alles auswählen

$name = basename($_FILES['formularfeld']['name']);
Ansonsten fällt mir an deinem Skript auf, dass das Trennzeichen, das im Pfad drin ist nicht zwingend ein / ist, evtl. ist es auch ein \ und dann klappt dein Code sicherlich nicht (wobei es dann mit basename unter Linux auch nicht klappen würde).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
richi111
Mitglied
Beiträge: 16
Registriert: 06.03.2008 09:11

Re: upload filename ist falsch

Beitrag von richi111 »

Hallo gn#36 , vielen Dank für deine Antwort.
Nun warum ich $_FILES expilzit leere ist damit vom Eingabefeld nicht mehr übrig bleibt falls der User zweimal auf Browser klickt und damit die Filnenamen ändert. Das mit dem Backslash weiss ich darum mache ich ja vorher die Korrektur mit:
'name' => strrpos($name,'/')===false ? $name : substr($name,strrpos($name,'/'))
Habe ich da einen Denkfehler ?
Wenn ich nun deines einfügen würde $name = basename($_FILES['formularfeld']['name']);
was müsste ich als formularfeld nehmen oder muss ich dies auch extra festlegen.
Danke
richi111
Mitglied
Beiträge: 16
Registriert: 06.03.2008 09:11

Re: upload filename ist falsch

Beitrag von richi111 »

Nochmals ich, habe meinen Fehler schon gefunden. Danke vielmals.
Hier der Code als Info.
$_FILES=array();
foreach($_POST[file][name] as $index => $name)
{
$_FILES[$index]= array(
'name' => basename(str_replace(base64_decode('XA=='),'/',$name)),
'size' => $_POST[file][size][$index],
'tmp_name' => $uploader->temp_dir . '/' .basename($_POST[file][tmp_name][$index]),
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: upload filename ist falsch

Beitrag von gn#36 »

Es wäre sehr nett, wenn du in Zukunft [code] Tags benutzen würdest, dann kann man deinen Code auch lesen.

statt base64_decode kannst du auch einfach direkt den Backslash einsetzen:

Code: Alles auswählen

basename(str_replace('\\', '/', $name))
XA== ist ja nichts anderes als ein Backslash.

Deine Begründung habe ich nicht ganz verstanden.

Ansonsten noch als Hinweis: Setz' Anführungszeichen beim Arrayzugriff, es sei denn du hast wirklich Konstanten mit diesen Bezeichnungen definiert. Ohne Anführungszeichen funktioniert nur, weil PHP dann automatisch die undefinierten Konstanten so definiert, dass sie sich selbst entsprechen, aber wenn du jemals irgendwo vorher eine Konstante mit der Bezeichnung "file" (oder "size" oder "name"...) anders definieren solltest wird dieser Code so nicht mehr funktionieren. Daneben schlägt das spätestens bei Indizes namens 'temp-filename' oder so fehl, weil das als Differenz zweier Konstanten interpretiert wird.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
richi111
Mitglied
Beiträge: 16
Registriert: 06.03.2008 09:11

Re: upload filename ist falsch

Beitrag von richi111 »

@gn#36
Oh sorry wegen dem code tag, klar mache ich. Danke für den Hinweiss mit dem Backslash und dem Anführungszeichen das wusste ich gar nicht.
Antworten

Zurück zu „Coding & Technik“