[PHP] file upload

Pagina: 1
Acties:

Onderwerpen


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
Ik ben bezig een upload class te schrijven, die een grote hoeveelheid files naar het filesystem moet kunnen schrijven.

De eigenschappen zijn:
- alleen bepaalde content-types
- alleen bepaalde extensies
- limiet op bestandsgrootte
- filename is een integer waarde die in een 3 niveau mappen systeem wordt opgeslagen. Bijv: 1234567.jpg -> /1/2/3/1234567.jpg

Het probleem is dat het hier om zo'n 1.5 miljoen plaatjes gaat verdeeld over 3x 3000 mappen. Door de indeling in mappen zou het zoeken naar het juiste plaatje sneller moeten zijn, maar ik ben eigenlijk opzoek naar indexing technieken waarmee dit nog sneller/efficienter kan.

Daarnaast wil ik eigenlijk de extensie van de upload niet opslaan en via een php script het bestand serveren aan de client. Ik zit hier echter met het probleem dat de uploads hierdoor volgens mij niet cacheble worden, waardoor er teveel bandbreedte verloren gaat.

Heeft iemand ervaring met deze problemen?

Ik blijf er iig vrij nuchter onder....


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Het juiste filesysteem kiezen. ReiserFS bijv. houdt een directory en file index bij om zo snel files te kunnen vinden nagenoeg onafhankelijk van het aantal files. En zou zijn er nog wel meer filesystems die dat doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Pin0
  • Registratie: November 2002
  • Niet online
Ik dacht gelijk aan een database (mysql oid) om te zoeken, dat gaat over het algemeen sneller dan zoeken in een bestandssysteem. Je moet dan wel een éénmalig script oid schrijven wat je hele collectie indexeert. Bijkomend voordeel is dat je ook nog META data zou kunnen toevoegen, ratings ect...

Mijn Lego Mocs - LEGO idea: The Motorcycle Garage


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
je bedoelt 1.5miljoen plaatjes in een database opslaan?

Dat lijkt me geen goed plan.

Ik blijf er iig vrij nuchter onder....


Verwijderd

maartenvdv schreef op donderdag 23 december 2004 @ 09:34:
je bedoelt 1.5miljoen plaatjes in een database opslaan?

Dat lijkt me geen goed plan.
Daar is op zich niets mis mee :)

Verwijderd

Je hoeft natuurlijk niet gelijk de plaatjes als blob in de database te zetten, je kunt ook alleen de paden opnemen met eventueel wat extra velden, dat zoekt wel een stukkie sneller.. :)

  • Rexomnium
  • Registratie: September 2000
  • Laatst online: 17-09 16:07

Rexomnium

Vincam aut moriar

Je kunt de plaatjes zelf via een filesystem op de webserver plaatsen, maar de namen, locaties en andere data in de database, toch? Dan kun je daarop zoeken, het script trekt de data uit de database en koppelt dat aan je filesystem.

//edit: wat rollator zegt dus :)

[ Voor 8% gewijzigd door Rexomnium op 23-12-2004 10:53 ]

We zijn allemaal vaandeldrager in een optocht van gekwetsten.


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

maartenvdv schreef op donderdag 23 december 2004 @ 08:50:
Daarnaast wil ik eigenlijk de extensie van de upload niet opslaan en via een php script het bestand serveren aan de client. Ik zit hier echter met het probleem dat de uploads hierdoor volgens mij niet cacheble worden, waardoor er teveel bandbreedte verloren gaat.
gewoon een kwestie van de juiste headers sturen :)

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Waarom zou je de extensie van een bestand niet opslaan? Het lijkt mij niet zo nuttig om 123456.jpg als 123456 op te slaan. Als je later gif en png support wil toevoegen moet je eerst weer gaan raden welke extensie het bestand had. Bovendien kan je de bestanden lokaal (of met ftp, of whatever) lastiger viewen. Als je niet wil dat de clients direct bij de bestanden kunnen zal je ze buiten de webroot of in een directory met een .htaccess moeten opslaan.

Het zoeken naar plaatjes zoals je vertelt in je ts, is dat zoeken op kenmerken? Zoals 'zoek alle plaatjes breder dan 500 pixels met een blauwe hemel'. Of gaat het om het zoeken dat het filesystem doet? Dus 'geef de clusters op de harde schijf waar plaatje 123456.jpg staat'.
Als het het laatste is dan lijkt mij een slim filesystem en eventueel opdelen in subdirectories zoals je al aangaf voldoende. In het eerste geval zal een database handig zijn om meta data op te slaan.
Met het opslaan van de blobs in de db vs. plaatje op fs en pad in de database heb ik te weinig ervaring om zinnige dingen over performance en onderhoudbaarheid te zeggen.

[ Voor 12% gewijzigd door Sjaaky op 23-12-2004 13:06 ]


  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
Er staat voor elke upload een row in de database met daarin, extensie, filesize enz.
De locatie van het bestand ligt vast in het ID van het bestand, en kan met een simpele php functie bepaald worden.

Ik wil de extensie niet opslaan omdat het geen toegevoegde waarde voor mij heeft. Mits het php script dat de plaatjes gaat serveren de caching goed ondersteund.

Buiten de documentroot zetten is een goed plan. Veiligheid is erg belangrijk.

Ik blijf er iig vrij nuchter onder....

Pagina: 1