PHP upload: .DOC & .DOCX?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleem met het uploaden van het nieuwe en oude formaat office bestanden. De bedoeling is dat beide formaten geaccepteerd worden. Daar had ik het volgende voor bedacht:

code:
1
2
3
if (($_FILES["file"]["type"] == "application/msword") 
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.template")


Helaas worden bestanden die zijn opgeslagen als .doc (word 97-2003) hiermee niet opgepikt. Docx dus wel!

Is er een betere manier om dit te doen of vergeet ik wellicht iets?

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

En als je geen check doet, een Word 2003 bestand upload en vervolgens deze properties opvraagt?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 19:39
wat voor type heeft die doc dan ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Eerst uploaden en dan pas checken? Ik zal het eens proberen maar is dat niet heel onveilig?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
418O2 schreef op dinsdag 21 oktober 2008 @ 16:21:
wat voor type heeft die doc dan ?
Wat bedoel je precies? MIME?

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 19:39
Je stelt dat een doc file niet voldoet aan die mime-types waarop je checked, wat is zijn mimetype dan wel ?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Verwijderd schreef op dinsdag 21 oktober 2008 @ 16:23:
Eerst uploaden en dan pas checken? Ik zal het eens proberen maar is dat niet heel onveilig?
Dat heet debuggen. Kijk eerst waar het fout gaat, zoek dan uit waarom. Zolang dit niet op een live omgeving doet, zal je geen problemen hebben met security, want er komt toch niemand bij.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ catch22: voor msword .doc staat mime type application/msword voor zover ik weet. Als hier iets anders voor bestaat hoor ik het graag want dat zou het antwoord op mijn vraag zijn!

Acties:
  • 0 Henk 'm!

  • pat42
  • Registratie: Maart 2006
  • Niet online

pat42

» lurkt

Verwijderd schreef op dinsdag 21 oktober 2008 @ 16:31:
@ catch22: voor msword .doc staat mime type application/msword voor zover ik weet. Als hier iets anders voor bestaat hoor ik het graag want dat zou het antwoord op mijn vraag zijn!
Daarom kun je proberen het bestand gewoon te uploaden, en dan het MIME type op te vragen. Als dat anders is dan application/msword is dat je probleem ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mensen dank voor het meedenken! Ik heb de checks verwijderd en het bestand geupload om vervolgens het type uit te lezen. Wat blijkt: het betreft "application/x-forcedownload".

Daar ga ik maar even over lezen. Het bewuste bestand is op mijn bureaublad te zien als ms office word97 - 2003 doc...

Ik zal dit ook eens op een andere server testen want bovenstaande deed ik binnen xampp.

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 19:39
heb je dat bestand ook gedownload ? Want dat is de mimetype die met een geforceerde download meegeeft

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Dit is gewoon de mimetype waarop de web browser van de client machine staat ingesteld. Je hebt kennelijk op jouw eigen machine in de web browser de .doc bestanden geassocieerd met application/x-forcedownload.

Dit gezegd hebbende, met beetje logisch nadenken zou je al tot de conclusie zijn gekomen dat de mime type van een geupload bestand door de client beinvloedbaar is. Kortom: nooit hierop rekenen. Gewoon de upload binnenhalen en dan de mimetype gokken adhv de bestandsheaders of een of ander worddoc-parser.

[ Voor 4% gewijzigd door BalusC op 21-10-2008 17:06 ]


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 20-09 17:02
Verwijderd schreef op dinsdag 21 oktober 2008 @ 16:52:
Mensen dank voor het meedenken! Ik heb de checks verwijderd en het bestand geupload om vervolgens het type uit te lezen. Wat blijkt: het betreft "application/x-forcedownload".
Maar niets garandeert jou dat andere browsers niet een compleet ander mime type meesturen. Betere opties lijken me:
- Controle aan de hand van de extensie. De meeste browsers gaan ook echt niet kijken naar de inhoud, maar bepalen de meegezonden mime type aan de hand van de extensie
- Het file na uploaden op mime type controleren met behulp van de php functionaliteit daarvoor:
http://nl3.php.net/manual/en/ref.fileinfo.php
- Als je het nog zekerder wilt weten, probeer dan of je het bestand kunt parsen en of het een valide word-bestand is. (Ook al door iemand anders gesuggereerd geloof ik) Zowel doc als docx maken gebruik van een zip-archief als container. Met andere woorden, je kunt ze met behulp van php openen door middel van de zip functionaliteit.
http://nl3.php.net/zip

Er bestaan ook complete parsers die het zipje automatisch voor je openen en kijken of het word-bestand valide is.

Acties:
  • 0 Henk 'm!

Verwijderd

Mocht je het document na het uploaden ook weer ter download aan willen bieden, let dan hier even op:
Om het nieuwe open xml format van Office 2007 te kunnen downloaden vanuit Internet Explorer 6 en 7 bleek ik mijn webserver configuratie aan te moeten passen (anders was de standaard associatie inderdaad zip). Anders browsers hadden dit probleem niet, en konden het document gewoon downloaden.

Voor apache was dit opgelost met de volgende regel in httpd.conf

AddType application/vnd.openxmlformats .docx .pptx .xlsx

[ Voor 10% gewijzigd door Verwijderd op 23-10-2008 21:01 ]


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

IE kijkt idd eerst naar de meegegeven mimetype, terwijl de andere browsers eerst naar de file extensie kijken en daarvoor het daarmee lokaal geassocieerde programma gebruiken. Je biedt de bestanden kennelijk direct vanuit public domain aan waardoor de applicatieserver zelf de geconfigureerde mimetype moet meezenden. Als deze niet beschikbaar is dan stuurt een beetje applicatieserver application/octet-stream als mimetype mee. Dat deze wordt geassocieerd met zip is gewoon een (m.i. foute) mimetype instelling in je eigen machine :)

[ Voor 6% gewijzigd door BalusC op 24-10-2008 02:23 ]

Pagina: 1