login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Info over image ophalen (Opgelost) | Pagina 2

36 antwoorden

Gesponsorde links
Offline Voldemort - 27/07/2007 20:08 (laatste wijziging 27/07/2007 20:09)
Avatar van Voldemort PHP ver gevorderde Ik heb nu PHP 5 ter beschikking en heb het geprobeerd door:

==> get_headers() over url
==> Bevat deze 200
==> Ok, doe de checks op valid image, etc
==> Upload met file_get_contents
==> Haal info op
==> Verwijderd image

Nu is deze zelfgeschreven functie ongeveer even snel (heel traag dus) als getimagesize.

----------------

Nu had ik dit idee:

Een image cache maken. Elke image uploaden en na 30 dagen verwijderen als deze in die tijd niet bekeken werd. Ik doe dit in samenwerking met MySQL:

tabel img_cache
url | filename | last_viewed | last_update

url is het url van de image
filename is de naam van het bestand in de map op mijn server
last_viewed is de tijd wanneer deze laatst opgevraagd werd
last_update is de tijd wanneer de image voor het laatst ververst werd in de map

Dmv een cronjob zullen de images ouder dan 24 uur (wordt gecontroleerd adhv last_update) automatisch ververst worden zodat er geen oude images in de cache blijven. Deze cronjob zal images ouder dan 30 dagen ook verwijderen (adhv last_viewed).

Zo zal enkel het vullen van de cache even duren, maar daarna zal alles goed gaan.

Is dit een goede methode? Of raden jullie een andere methode aan? Of hebben jullie opmerkingen over mijn methode?
Offline Stijn - 28/07/2007 23:48 (laatste wijziging 28/07/2007 23:50)
Avatar van Stijn PHP expert Waarom al die herrie Je download de file eenmalig en zet die op je server. Een voorbeeldje:

  1. <?php
  2.  
  3. $dir = './images/';
  4.  
  5. $file = 'http://www.sitemasters.be/web/avatars/2280.jpg';
  6.  
  7. $basename = basename( $file );
  8.  
  9. if( file_exists( $dir . $basename ) ) {
  10. die("<pre>" , var_dump( getimagesize( $dir . $basename ) ) , "</pre>");
  11. //die('Image bestaat al, downloaden hoef niet meer!');
  12. }
  13.  
  14. if( ! file_exists($file) ) {
  15. die('File bestaat niet meer!');
  16. }
  17.  
  18. if( filesize($file) < 3 ) {
  19. die('Filesize moet minimum 3 bytes zijn.');
  20. }
  21.  
  22. if( ! exif_imagetype($file) ) {
  23. die('File is geen image!');
  24. }
  25.  
  26. $image = file_get_contents( $file ) or die('Kon de image inhoud niet ophalen!');
  27.  
  28. if( ! file_put_contents( $dir . $basename , $image ) ) {
  29.  
  30. echo 'Kon de image niet schrijven.';
  31.  
  32. } else {
  33.  
  34. echo "<pre>" , var_dump( getimagesize( $dir . $basename ) ) , "</pre>";
  35.  
  36. }
  37.  
  38. ?>
Offline Voldemort - 29/07/2007 10:13 (laatste wijziging 29/07/2007 20:47)
Avatar van Voldemort PHP ver gevorderde @stijn1989: Dan gaat die map met die images na een tijd toch heel groot worden terwijl sommigen misschien niet eens meer nodig zijn? Is het dan niet beter om ergens een tijd te zetten zodat deze van tijd tot tijd verwijderd kunnen worden?

Edit:

Ik heb intussen een nieuw idee. Ik upload niks meer, ma sla in de database dit op:

tabel: img_cache
url | lengte | breedte | last_update | last_viewed

url ==> Oorspronkelijk url
lengte ==> De berekende lengte met getimagesize
breedte ==> De berekende breedte met getimagesize
last_update ==> Laatste keer dat er eventuele nieuwe informatie over deze afbeelding is opgehaald
last_viewed ==> Laatste keer dat deze afbeelding getoond is.

Zo zal ik adhv deze tabel de informatie over de images kunnen opzoeken en als deze er nog niet in staan, dan zet ik die erin zodat de volgende bezoeker die informatie slechts uit de database te halen heeft en niet moet laten berekenen met getimagesize.

Denken jullie dat dit een beter/goed idee is?
Offline Wim - 29/07/2007 23:54 (laatste wijziging 29/07/2007 23:55)
Avatar van Wim Crew algemeen evt met shell_exec:

  1. $file = 'http://www.sitemasters.be/images/iconen/bericht.gif';
  2. shell_exec('wget '.$file);
  3. $f = explode('/', $file);
  4. list($x, $y) = getimagesize($f[count($f)-1]);
  5. shell_exec($f[count($f)-1])
Offline Thomas - 30/07/2007 09:04
Avatar van Thomas Moderator Caching (of je nu dimensies opslaat of complete plaatjes) lijkt me altijd een goed idee. Maar mag je die plaatjes zomaar van andere sites afhalen (copyrights)?
Als je naar externe sites verwijst en jouw site heeft erg veel traffic, vindt men dat misschien ook niet zo jofel (hotlinking).

Het beste lijkt mij (op het eerste gezicht) om die plaatjes gewoon binnen te halen. Zul je wel een mechaniek moeten hebben die er voor zorgt dat dit niet uit de hand loopt. Je zou thumbnails kunnen maken van de orginele plaatjes, met een link naar het origineel. Dan sla je in feite twee vliegen in een klap:
- je hebt altijd plaatjes op je eigen site (geen foutmeldingen) als de remote variant weg is... pech voor diegene die het origineel wilt bekijken
- je hebt niet al teveel ruimte nodig voor de opslag van thumbs en je kunt ze een maximum breedte / hoogte geven

Zolang je geen serieuze problemen hebt met auteurschap / copyrights lijkt mij dat de beste oplossing.
Offline Voldemort - 31/07/2007 11:38
Avatar van Voldemort PHP ver gevorderde Ik heb dmv een cache gedaan (eerste keer gegevens ophalen en in tabel stoppen, achteraf daaruit halen). Dat werkt prima.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.202s