![]() |
Dateifunktionen in PHP
hi @all,
mein problem, bei dem ich hoffe, das man mir hier helfen kann: mit php habe ich eine routine geschrieben, mit der ich über eine html-form eine datei auf den webserver übertragen will. soweit funktioniert mein code auch ganz gut, bis auf eine kleinigkeit: ich möchte nur dateien mit einer bestimmten dateiendung übertragen, beispielsweise nur .gif-dateien. im input-tag habe ich sehr wohl den parameter accept="image/gif" angegeben, jedoch lässt sich mein browser (ie6) damit nicht dazu hinreißen, tatsächlich nur .gif-dateien zu übertragen. und über mein php-script lässt sich hier auch nichts machen, da ich ja lediglich das temporäre file am webserver mitgeteilt bekomme - und dieses hat immer die dateiendung .tmp, ist also nicht unterscheidbar. welche 'tricks' kennt ihr für dieses problem....? achja, nochwas: mitunter würde ich die übertragene datei auch wieder löschen wollen. nur habe ich in php keine funktion gefunden, die das macht. alle meine dokumentationen diesbezüglich offenbaren mir nicht, wie's geht. ideen dazu....? thanks! |
ad löschen:
http://www.selfphp.info/funktionsref...nen/unlink.php für sonstiges würd ich auch mal selfphp durchblättern: http://www.selfphp.info/funktionsref...em_funktionen/ mfg Thomas |
danke für die links - aber dieses selfphp habe ich eh zu hause.
dass das löschen einer datei mittels unlink() gemacht wird, ist für mich ziemlich erstaunlich. wer lässt sich so einen namen für's löschen einer datei einfallen....? kein wunder, dass ich nicht fündig geworden bin. :confused: bezüglich dem anderen problem bin ich samt selfphp nicht weiter gekommen. es gibt zwar die funktion filetype, die liefert aber immer nur '.tmp' zurück - weil ja das der filename am server ist. für mich schaut es fast so aus, als ob ich diese prüfung auf die gewünschte dateiendung VOR dem versenden in javascript lösen müsste. nur bin ich dort auch noch nicht so firm, dass ich das aus dem ärmel schütteln könnte.... :( |
http://de.php.net/manual/de/features.file-upload.php
$_FILES['userfile']['type'] Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif". |
du kannst ja mit:
$_FILES['file']['name'] (wobei 'file' bei mir der name des dateiuploadfeldes ist) Den Dateinamen auslesen. Dann kannst du ja von hinten beginnend den String bis zum letzten Punkt auslesen -> Dateierweiterung. Hab hier momentan keine php Testumgebung, werd zuhause mal schaun, ob es noch andere Varianten gibt. mfg Thomas |
Zitat:
interessant finde ich ja auch, dass der parameter 'accept' im input-tag lediglich informellen charakter zu haben scheint. übertragen kann ich trotzdem alles, was ich will. naja, werde heute abend eure tipps probieren.... |
ne, in $_FILES['file']['tmp_name']; steht der Temporäre Name drin, in $_FILES['file']['name'] der wirkliche.
vielleicht gibts auch ein $_FILES['file']['extension'] - keine Ahnung mfg Thomas [edit] google hilft: $_FILES['userfile']['name'] The original name of the file on the client machine. $_FILES['userfile']['type'] The mime type of the file, if the browser provided this information. An example would be "image/gif". $_FILES['userfile']['size'] The size, in bytes, of the uploaded file. $_FILES['userfile']['tmp_name'] The temporary filename of the file in which the uploaded file was stored on the server. $_FILES['userfile']['error'] The error code associated with this file upload. ['error'] was added in PHP 4.2.0. bzw. http://p2p.wrox.com/topic.asp?TOPIC_ID=2629 [/edit] |
Zitat:
<Sinnloses Wissen fuer mind. 500 Euro> Das Unix-Dateisystem unterscheidet zwischen Daten, die durch eine Inode beschrieben werden und Pfadnamen, die innerhalb von Verzeichnissen auf die Inodes verweisen. Eine Inode kann dabei mehrere Pfadnamen haben, was in der Unix-Terminologie Link genannt wird. Unter Unix ruft "rm" intern den Systemruf unlink auf, der einen solchen Link und den zugehörigen Pfadnamen entfernt. Die Inode und die Datenblöcke werden aber erst freigegeben wenn 1. der letzte Link auf eine Inode entfernt wird und 2. kein Prozess mehr auf die Daten zugreift. http://de.wikipedia.org/wiki/Rm_(Unix) Aus der manpage von unlink: Zitat:
Wobei ich die englische Manpage fuer aussagekraeftiger halte: http://www.opengroup.org/onlinepubs/...ns/unlink.html </Sinnloses Wissen fuer mind. 500 Euro> Und Erfunden haben das in diesem Fall nicht die Schweizer, sondern vermutlich Dennis Ritchie und Ken Thompson, die Vaeter von C und UNIX. UNIX is simple and coherent, but it takes a genius (or at any rate a programmer) to understand and appreciate the simplicity. Dennis Ritchie |
Also mich hat dieses Wissen keine 500€ gekostet, nur ein paar Jahre HTL ;);)
mfg Thomas |
Zitat:
wohl auch ein grund, warum ich mich bislang erfolgreich gegen jede art von linux auf meinem rechner gewehrt habe. ich will effizient arbeiten und mir keine gedanken über etwaige internas des betriebssystems machen müssen. :cool: @T.dot: hab's gestern getestet - und es funktioniert tatsächlich! :o thanks für die infos.... |
Zitat:
Zitat:
mfg Thomas |
Weder C, noch PHP sind IMHO "hoehere" Programmiersprachen.
Smalltalk anyone? ;) |
Zitat:
aber ist sicher definitionssache..... :D |
Zitat:
im ernst: der befehl für das löschen einer datei nennt sich allgemein delete, oder meinetwegen auch purge oder erase oder remove..... aber unlink??? aber ich habe sowieso das gefühl, dass viele pc-geschädigte nur darauf aus sind, sich in irgend einer form ein denkmal zu setzen. und da reicht vielen offenbar auch konfuse benennungen. nur so zum nachdenken: in den erwähnten 22 jahren habe ich es mit etlichen sprach-systemen zu tun gehabt. da fallen mir auf anhieb zumindest 8 unterschiedliche varianten ein, wie man ein simples if-statement abschließt. beispielsweise mit einem einfachen end oder auch mit einem end-if oder mit einem endif (ohne bindestrich) oder mit if-end oder mit ifend (wieder ohne bindestrich) oder mit } (geschweifte klammer zu) oder mit einem punkt (in cobol-74) oder - ganz doof - mit fi (if rückwärts geschrieben, ganz nach unix-feeling) usw. ist das nicht total trottelhaft....? :confused: wem oder was soll das dienlich sein? |
Also wenn ich mir diesen Thread so durchlese kommt mir das kotzen, lieber Herr OP.
~ |
Den Check, ob Dateien lt. Endung raufgeladen werden dürfen, hab ich bei einem Projekt mal so gelöst. Es ist wahrscheinlich net das gelbe vom Ei, aber es hat funktioniert ;)
PHP-Code:
|
Zitat:
|
Zitat:
|
@Käptn: was ist den so schlimm an dem Thread?
[eh scho komplettes OT] Inwiefern die Namensgebung von irgendwelchen Funktionen logisch ist, seih mal dahingestellt. Kocht doch eh jeder sein eigenes Süppchen. Irgendwann lernt man halt zwischen Programmiersprachen umzustellen. Ich programmier mal vb.net, mal c#, mal vb6, mal c, mal php, mal asp. Das ganze wenns lustig ist innerhalb von einem Tag und ärger mich auch oft genug herum, warum denn nicht die Befehle überall gleich heißen können. Aber wie das halt so ist bei Entwicklungen (mal ein wenig extrem ausgedrückt): Da findet man ein Entwickler eine Programmiersprache, arbeitet damit, befindet einige Dinge als schlecht, schreibt sich seine eigene. Und da nimmt er natürlich überall die Befehle die am ehsten einfallen/liegen und nicht die, die schon 100 andere vor ihm verwendet haben. Weil eine neue Sprache muss ja besser und toller und vor allem: anders sein. Da hilft dann wohl nur noch selber seine eigene Sprache schreiben ;) [./OT] however, stay clever :cool: mfg Thomas |
Zitat:
genau das meine ich: was ist denn besser, wenn ich statt delete beispielsweise unlink schreiben muss? das musst du mir jetzt erklären.... :D ich habe schon vor vielen, vielen jahren mit enthusiastischen C-programmierern geredet, die sich darauf was eingebildet haben, weil sie statt add 1 to var (beispiel von cobol) die variante var++ schreiben konnten. also, wenn das der vorteil der programmiersprache C sein soll, dann weiß ich nimmer. besser ist eine sprache meiner meinung nach dann, wenn sie effizienteren code produziert - aber das hat doch absolut nichts damit zu tun, wie die schnittstelle compiler<->mensch aussieht.... |
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag