Dateiart abfragen

Begonnen von Kartoffelbrei, 27 September 2003, 22:47:15

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Kartoffelbrei

So, schonwieder der  :)


hab schonwieder ein prob !
und zwar will ich abfragen was für eine endung meine file hat die ich raufladen will. und auch nur diese zulassen.

mein codeversuch sieht wie folgt aus :


 


$extension = $userfile_type[0];
    if (strstr($extension,"jpeg"))
    {
    $extension=".jpg";
    }
    else
    {
    echo "Falscher Dateityp";
    }





funktioniert aber irgendwie nicht.
bringt wenn ich den gelesenen dateityp auslese einen ganz komischen wert.....
wie macht man das denn richtig ?

will wie gesagt nur dass wenn die file eine jpg ist das ganze weiterläuft und wenns keien jpg datei ist das ganze stoppt und ne fehlermeldung kommt.


gruß
brei

JensWagenknecht

Das war schon mal nichts.
So wie Du es machst kann ich einer PHP datei die Endung jpg geben, hochladen und ausführen lassen.

Php hat zur Prüfung, ob es eine Datei ist eine eigene Funktion. Die erkennt und kennt halt nicht alle Typen. Ist aber etwas sicherer.
Die Funktion ennt sich "getimagesize".
Von dem Rückgabewert nimmst Du den Wert 2 aus dem Array, ist der Wert 0, so ist eskeine Grafik.


@$dateiinfo=getimagesize($datei);
         $grafiktyp="$dateiinfo[2]";

------------------------------------------------------------------------
Das hier verstehe ich nicht:
$extension = $userfile_type[0];

            i f (strstr($extension,"jpeg"))

man könnte meinen $userfile_type sind die erlaubten Dateienungen drin.
Und anschließend vergelichst Du was gleich sein muss?
Oder was ist sonst userfile_type?
Wen Du das Vorkommen des Wertes jpg in einer Datei als Endung so prüfen willst, so geht es in diesem fall nicht "jpg.php".
Du musst schn den Namen am Punkt teilen.
So etwa:

@$testname=explode(".",$dateiname);
                @end($testname);
                @$testname=current($testname);

Also Namen nehmen an allen (können mehrere sein) Punkten teilen und das beim entsandenen Arry zum letzten Wert gehen. Diesen kannst Du anschließend vergleichen.
Übrigens das hier: @ habe ich davor gesetzt um einen eventuellen Fehler (keine Vorkommen eines Pumktes) unterdrücken zu können. In diesem Fall entseht das Array nicht und Du musst mit empty prüfen ob der Wert überhaupt existiert.


Übrigens brauchst Du das Rad nicht neu zu erfinden. Nimm ein Upload Script und passe es an.

Kartoffelbrei

hi jens,

also ich glaub ich stoße da auf probleme wenn ich das mit getimagesize mache, denn meine 2. file ist unter anderem eine BK9 datei (blabla.bk9).
diese datei ist koordinaten datei für ein programm. also kein bild !
da kann ich das dann mit getimagesize vergessen denk ich mal......

wenn ich userfile_type mit echo auslese dann bekomm ich werte wie z.b.

$extension = $userfile_type[0];
echo "<br> $extension Dateien erlaubt";

($extension) hat da den wert  application/octet-stream bei meiner BK9 datei

und bei einer jpg file z.b.  : image/pjpeg
bei einer php oder html file kommt :  text/html

also das ist doch garnicht mal so schlecht für die überprüfung.
ich versuch jetzt mal den endwert direkt abzufragen indem ich sage if blabla = application/octet-stream then........
mal sehen ob das klappt.

PS: will ja nicht einfach ein uploadscript aus der kiste nehmen und dann wars das. wenn dann mach ich das selber auch wenns mir noch etwas schwer fällt und ich eure hilfe hin und iweder in beanspruchung ziehen muss !  kopieren kann jeder  :)


gruß, gähn, augenreib
und erstmal guten morgen
brei

JensWagenknecht

Da wäre ich was vorsichtig. Der Type muss nicht stimmen und von den Typen gibt es x verschiedene.

Hier hast Du eine Auflistung der MimeTypen:

 http://selfhtml.teamone.de/diverses/mimetypen.htm

BowlingX

 ..stimmt, aber leider geht es NICHT anders!
Wobei du doppelt prüfen könntest...erst ob der mime bsp. ein Bild ist und dann nochmal getimagesize drüber jagen! Das würde nocheinmal absichern!
Kein Support über Mail, (ungefragter) PN oder ICQ, ausschließlich direkt im Forum!

Kartoffelbrei

also erstmal :
seit da das neue vkp auf dieser seite ist bekomm ich öfters keine benachrichtigungsemail wenn jemand auf einen post antwortet !!!
komisch ! (ja ich habe das häkchen gesetzt)

jetzt z dem problem :
das mit dem imagesize etc geht ja nicht. denn es ist unter anderem eine datei die sehr selten ist eine BK9 datei.
die ist programmspezifisch.
und da kann ich mit dem prüfen ob es ein bild ist nicht viel anfangen....
evtl den inhalt irgendwie prüfen.
aber mir ist da jetzt noch was viel besseres eingefallen !!!

und zwar möchte ich nachdem die file auf dem server oben ist diese automatisch als zip file packen und die originaldatei löschen !
dann ist auch das sicherheitsloch mit der evtl php file weg !  :)

nur stehe ich jetzt vor einem neuen problem :
nämlich ich weiß nciht wie das mit dem zip gehen soll.
hab mir schon einiges zusammengesucht mit gzip etc.
blick das aber voll nicht !
wie gesagt !
ich lade die file hoch und dann wenn sie oben ist soll die file als zip oder sowas gepackt werden und die eigentliche datei dann gelöscht werden.

hat mir jemand einen tipp ? oder beispiel ?
mit gzip soll das ja anscheinend einfach gehen.

gruß brei

JensWagenknecht

Die eigentliche Datei brauchst Du nicht zu löschen. Nach abarbeiten des Scriptes löscht php automatisch die datei aus dem temporären Ordner.

gzip -c datei > datei.gz (ohne Kompremierung)

-9´oder --best ist die höchste Kompremierung.

gzip -n9 dateiname_aus_upload
(ergibt dateiname_aus_upload.gz)



Kartoffelbrei

Hi Jens,

das will nicht funzen,

Fehler :
Parse error: parse error in localhost/test.php on line 2


Mein Code :

<?php   
   gzip -n9 "/localhost/bild.jpg";
?>

was mach ich falsch ?
muss man das irgendwie anders schreiben ?

gruß
brei

JensWagenknecht

<?php
exec("gzip -n9 /localhost/bild.jpg");
?>

Kannst aber so nicht machen Gzip würde in dem Ordner wo Du gerade bist die GZIP Datei erstellen.

Wegen den Systemnahen Befehlen schaue mal bitte hier:
 http://www.dynamic-webpages.de/php/function.exec.php

Du kannst auch mit GZIP unkompremiert die datei in eine GZIP datei umleiten:

gzip /localhost/bild.jpg > /hier/und/dort/datei.gz

tar ist flexibler und überall dabei (Linux)

Du brauchst auch nur die Datei wohin kopieren wo es keiner weis und anschließend frei geben. Zum ausführen muss man wenigstens wissen wo das Teil ist.
Oder benennst die datei nur um.

BowlingX

@Kartoffelbrei..
wenn du noch einige Tage warten kannst, ist es möglich die neue Upload Klasse im VKPMX2 zu verwenden. Mit dieser Kannst du Bilder UND auch alle a andere vorher festgelegten mime typen hochladen!
Kein Support über Mail, (ungefragter) PN oder ICQ, ausschließlich direkt im Forum!

Kartoffelbrei

@ jens !
das ist genau das was ich gebraucht habe !  :-)
es soll ja im gleichen ordner sein :)


@bowlingX
ne du ich hab da jetzt schon ein mehr als sicheres upload dingens geschrieben. das passt soweit schon alles.
muss auch speziell angepast sein. also kein allgemeines upload teil.


trotzdem danke

gruß brei