Ontwerp Fotosite
Voor een persfotograaf wil hij foto's op een site plaatsen.
Alle foto's zijn ongeveer 1 MB groot, en de foto's worden upgeloaded via ftp.
Dit zou mijn database zijn:
Een database met:
- Unieke ID
- De gegevens van foto (metadata (naam, plaats, ...)
- Datum: tijd wanneer de foto is upgeloaded
- locatie
Dan gaat de fotograaf afbeeldingen gaan uploaden.
Na het uploaden logt hij in, en klikt hij op een knop om de nieuwe foto's in de database te stoppen(*) en een foto aan te maken met een watermerk.
(*) = Hiermee bedoel ik een nieuw record in de tabel met de locatie, ...
Als men op de knop drukt, dan zouden alleen de afbeeldingen die nog niet in de database zijn opgeslaan, geïnserted mogen worden in de database.
Dus dan dacht ik om alle foto's uit de map te halen, waarvan de upload tijd groter is dan de grootste tijd van de database (van het laatste record).
Daarna moet ik telkens de foto openen, de metadata eruit halen met exif(), een thumbnail maken met een watermerk en die dan in een andere map opslaan.
Is deze manier goed, of kan het veel makkelijker?
Alternatieven?
Stel dat er 300 foto's die upgeload zijn, is dit dan nog haalbaar?
Alvast bedankt,
Diov
Als je 300 foto's upload en je moet die nadien nog in de databank steken is het toch gemakkelijker dit tijdens het uploaden te doen. Ook een aantal gegevens ingeven kan bij 300 foto's best in bulk, dat bespaart al wel wat tijd voor de uploader dan.
En ook belangenrijk is het controleren of de foto wel een foto is.... met
Deze functie
Succes
Gewijzigd op 03/01/2014 20:47:53 door Bart Smulders
Quote:
Is FTP nodig? kan het niet via een uploader op de site?
Ja, dat is nodig.
We hebben het over 300 foto's a 1 MB, dus we praten over 300 MB aan data per keer.
Daar is een upload via $_FILES niet voor gemaakt.
Zoals mijn naamgenoot Bart het dus voorsteld. ;)
Een betere optie is om de foto's te uploaden en een script te maken die de directory's scant en deze in de database zet als er een nieuwe foto is geplaatst. Misschien dat dit nog automagisch zou kunnen via een cronjob zodat de gebruiker er geen last van heeft, maar dat is een keuze aan jou.
Ik zou een zip uploaden via FTP wat sneller gaat, en dan via een CMS een script laten runnen die de zip uitpakt, de foto's naar de goede map schrijft en de bestanden in de database zet.
Desnoods zou ik een excel bestand in de zip zetten die door het zelfde script laten uitlezen. In het excel bestand staat dan bv de gegevens (metadata) van de afbeelding die ook in de database gezet word.
Waar ik nog wel naar zou kijken is, is het echt noodzakelijk om foto's van 1 MB online te zetten? Highresolutie foto's zijn meer voor drukken, voor op het web zou ik toch voor lagere kwaliteit foto's gaan (vooral als het gaat om een foto albumpje). En als je een watermerk via PHP wilt toevoegen gaat de kwaliteit sws erg achteruit, wat zonde zou zijn als je foto's van 1 MB hebt.
dat heb ik ook overweegd, maar de fotograaf werkt met een gebruiksvriendelijk programma waarbij hij zeer makelijk foto's kan uploaden, mailen..
Ook is het een tamelijke grote hoeveelheid, en wat als de browser vastloopt..
Als het programma vastloopt, en start je het opnieuw op, moet je alleen maar klikken op: Verder Uploaden..
@Bart Smulders,
Om de foto's in een andere map te steken, vind ik een goed idee en zal ik zeker gaan toepassen.
@Bart VB,
Misschien kan ik een cronjob om de 5 minuten instellen, maar het ook mogelijk maken via een knop.
@Metal,
In een ZIP Bestand steken is denk ik niet haalbaar.
Men moet de foto's selecteren, en gewoon verslepen naar die map. Men kan niet zomaar een ZIP aanmaken in het programma met de geselecteerde foto's.
De echte originele foto's zijn 5MB groot.
Daarna worden de foto's opgescherpt en verkleint naar ongeveer 1MB.
5MB is geschikt voor op een voorpagina, als de kwaliteit zeer top moet zijn. (En die kunnen op aanvraag worden verstuurd)
1MB zijn de gewone foto's in de krant :)
De kranten kunnen automatisch foto's afhalen via de site via een login.
Daarom zou ik ook per foto een thumbnail aanmaken met een copyright die ik toon aan de gewone bezoekers.
En eventueel ook een thumbnail zonder copyright, voor de kranten.
Bedankt alvast voor het meedenken, en indien je nog wat ideeën hebt, laat maar weten.
Diov
Quote:
Misschien kan ik een cronjob om de 5 minuten instellen, maar het ook mogelijk maken via een knop.
dan wel een controle inbouwen dat je niet2 of meer keer hetzelfde script laat draaien: met 300 foto's ben je wel even bezig met je watermerken en dat kan zo maar meer dan 5 minuten gaan duren.
Sowieso wel een taak om op de achtergrond te doen, en niet via de browser, want je zit zo aan de timeout van 30 of 60 seconden. Danwel, als je de timeout hoog genoeg zet, dan kan de browser het na een tijdje ook wel voor gezien houden.
Ik maak nu 4 thumbs in totaal
Een grote
Een grote met copyright
Een kleine
Een kleine met copyright
In totaal zijn die 4 thumbs 225KB groot. Dus 1/4 van een MB. (Zonder originele foto)
De namen van de thumbs zijn 64 karakters groot, en uniek.
De codes worden eerst in de database gestoken in 4 velden. (code_groot, code_klein, code_groot_copy, code_klein_copy)
Deze 4 kollommen staan trouwens ook op uniek. Dus als men toch toevallig dezelfde code tegenkomt krijg mysql een error, en zal hij de volgende foto doen.
Op het laatste zal hij dan nog eens proberen de foto up te loaden. (door de cronjob van om de 5 minuten)
Met 1TB aan opslagruimte kan ik ongeveer 650.000 foto's uploaden.
Dit is een schatting die ik ongeveer berekend heb
(1TB = 1 024 000 MB, en 1.5 MB met de foto en thumbmails)..
En daar nog wat afgetrokken voor de layout, en webschop etc.
Ik zal nu nog wat test doen om de RAM van me server te verminderen. Denk om imagedestroy() te gaan gebruiken. Maar misschien zijn er ook nog andere functies?
En daarna ook nog ff te recorden hoelang het duurt om 1 afbeelding te verwerken.
Tips zijn nog altijd welkom!
Toevoeging op 05/01/2014 12:50:23:
8.88 seconden voor 13 foto's.
De foto's zijn nu ook nog 5MB (moet nog andere testfoto's krijgen)
Even over die cronjob. Als ik een cronjob start dan wordt er eerst gekeken of een bepaald temperary bestandje bestaat. Zo ja, dan stopt de uitvoering direct. Zo nee, dan maakt ie dat temporary bestandje aan en gaat ie aan de slag met wat ie allemaal moet doen. Is ie klaar dan wordt dat temporary bestandje gedeleted. Op die manier zullen er nooit twee cronjobs aan hetzelfde bezig zijn.
Maar is het toch niet beter om daar sowieso geen check op te doen?
Ik wil niet dat er 2 keer dezelfde foto's in de databank worden gestopt en thumbs worden aangemaakt.
Gewijzigd op 05/01/2014 13:19:40 door - SanThe -
Ik dacht dat de cronjob dat automatisch al deed.
Verkeerd opgevat.
Dus gewoon een bestand aanmaken, en daarna weer verwijderen?
En voordat je het script wel uitvoeren, even nog een controle uitvoeren of het bestand werkelijk bestaat?
Toevoeging op 05/01/2014 14:17:44:
Even simpel;
* Bestaat het bestandje?
* Ja => exit.
* Nee
* Maak dat bestandje aan.
* Doe de dingen die gedaan moeten worden.
* Klaar?
* Verwijder het bestandje.
Toevoeging op 05/01/2014 14:20:13:
In sommige gevallen hou ik zelfs bij hoe vaak ie naar exit moet gaan en als dat te vaak gebeurt stuurt ie mij een mailtje.
Ik denk dat je er wel iets in moet zetten. Alleen openen weet ik niet of ie dan al aangemaakt wordt. Kan je natuurlijk ook even testen.
Hij maakt het bestand aan.
Code (php)
1
'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
Nu nog een andere vraag:
Zou ik een maximum opleggen:
Voorbeeld dat men 100 foto's maximum in 1 keer bewerkt. En daarna wachten op de cronjob?
Zodat de server even rust heeft? Of maakt dit niets uit?
Zoveel tijd zal het niet in beslag nemen. Gewoon doen.
Zal nu beginnen aan de gewone site.
En daarna moet ik nog een server zoeken met 1TB aan opslagruimte die niet te veel kost :)
- Diov - op 05/01/2014 16:58:50:
Oke bedankt :)
Zal nu beginnen aan de gewone site.
En daarna moet ik nog een server zoeken met 1TB aan opslagruimte die niet te veel kost :)
Zal nu beginnen aan de gewone site.
En daarna moet ik nog een server zoeken met 1TB aan opslagruimte die niet te veel kost :)
deze hosthost bv