[PHP] Thumbscript veroorzaakt teveel dataverkeer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Scyth
  • Registratie: Juli 2001
  • Laatst online: 16-03-2024

Scyth

Fat finger, three beer

Topicstarter
Ik gebruik onderstaand thumbscript op dit moment voor het maken van thumbnails en andere -op maat gemaakte- afbeeldingen op een site. Het script werkt goed. Misschien niet de snelste, netste en/of slimste manier, maar het werkt. Op 1 klein dingetje na.

Aangezien het een site betreft die voor 70% bestaat uit het weergeven van thumbnails die bij artikelen horen, worden er gemiddeld per pagina-aanroep 6 thumbnails gegenereerd uit grote JPG bestanden van soms wel over de 1mb. Toen ik vandaag in mijn website statistieken keek, zag ik dat met 11 unieke bezoekers vandaag (site staat nog niet in zoekmachines ed.) voor 2,79 gig aan dataverkeer had gezorgd. Met vandaag 6965 scriptaanroepen kom ik op een halve MB per aanroep, terwijl de uitgepoepte JPG's toch maar iets van 8kb MAX zijn.

Heeft iemand een idee waardoor deze enorme overhead veroorzaakt wordt?

Misschien ter overvloede: de source JPGs staan op dezelfde server, maar worden wel met een volledig pad aangesproken, dus
PHP:
1
$file = "www.server.com/data/artImages/001.jpg"; //bijvoorbeeld

edit: syntaxfoutje

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  $get = $HTTP_GET_VARS;

  $file = $get['file'];
  $width = $get['width'];
  $maxWidth = $get['maxWidth'];
  $height = $get['height'];
  $maxHeight = $get['maxHeight'];
  $quality = $get['quality'];
  
  $fileName = basename($file);

  header("Content-type: image/jpeg");
  
  list($width_orig, $height_orig) = getimagesize($file);

  if (!$width && !$height) {
    $width = $width_orig;
    $height = $height_orig;
  } else {
    if ($width && !$height) {
      $height = ($width / $width_orig) * $height_orig;
      if ($maxHeight > $height) {
        $height = $maxHeight;
        $width = ($height / $height_orig) * $width_orig;
      }
    } elseif ($height && !$width) {
      $width = ($height / $height_orig) * $width_orig;
      if ($maxWidth > $width) {
        $width = $maxWidth;
        $height = ($width / $width_orig) * $height_orig;
      }
    }
  }

  $image_p = imagecreatetruecolor($width, $height);
  $image = imagecreatefromjpeg($file);

  imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  imagejpeg($image_p, '', $quality);

[ Voor 5% gewijzigd door Scyth op 06-03-2006 23:33 ]

Dell Studio XPS 16
Project: BavBierSub 1.0 BavBierSub 2.0


Acties:
  • 0 Henk 'm!

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 18:49
is het niet zo dat bij een volledig pad, dat meegeteld word in apache logs oid?
zo ja, dan kan daar de traffic vandaan komen. Het is dan geen "echte" traffic, maar gewoon uit de logs gehaald en meegeteld.

In dat geval relatieve pads gebruiken.

[ Voor 77% gewijzigd door messi op 06-03-2006 23:34 ]

Onze excuses voor het ontbreken van de ondertiteling.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 17:04

crisp

Devver

Pixelated

En caching headers sturen, en bij vervolg-requests een 304 terugsturen ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Scyth
  • Registratie: Juli 2001
  • Laatst online: 16-03-2024

Scyth

Fat finger, three beer

Topicstarter
Ik heb relative paths nu ingevoerd, kijken of dit het dataverkeer wat terugbrengt. Omdat imagecreatefromjpeg($file) wel een volledig pad wil, heb ik gebruik gemaakt van $_SERVER['DOCUMENT_ROOT'] om het pad aan te vullen. (nu begint het pad met /svr)
crisp schreef op maandag 06 maart 2006 @ 23:38:
En caching headers sturen, en bij vervolg-requests een 304 terugsturen ;)
Mijn hosting provider heeft geen nieuwe versie van PHP geinstalleerd jammergenoeg, dus ik kan niet de headers opvragen met apache_request_headers(), en getallheaders() werkt ook niet. Undifined function krijg ik dan. Maar een overhead van 8KB per plaatje extra vind ik al beter dan 500KB :X

Dell Studio XPS 16
Project: BavBierSub 1.0 BavBierSub 2.0


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Het gaat niet om een absoluut of relatief path, maar of je het via het bestandssysteem of via http binnenhaalt. Het kan goed zijn dat php transparant via de fopen wrappers een http request doet naar het plaatje, en dan wordt dat inderdaad meetegeld in de je verbruiksstatistieken.

Je moet dus het ínterne pad gebruiken, dus inderdaad iets dat begint met een /, dan moet het goed gaan.

Acties:
  • 0 Henk 'm!

  • DRAFTER86
  • Registratie: April 2002
  • Nu online
Is het niet gebruikelijk om thumbnails op te slaan? Ik deed het eerst ook zo maar de load-stats vlogen omhoog... Lijkt mij een veel betere oplossing.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

- Lokale paden gebruiken
- thumbnails cachen....

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 03-06 00:24
Als je geen caching headers kan gebruiken dan moet je dat maar door Apache af laten handelen. Je hebt iig twee opties in dat geval. Eerste optie is de thumbnails maken bij het uploaden van een plaatje, je genereert de thumbs dan 1x, schrijft ze op disk weg en daarna zorg je dat de gebruiker gewoon de opgeslagen thumbnails ophaalt. Apache zorgt er vervolgens voor dat deze thumbs maar 1x per gebruiker op worden gehaald.

Andere optie is misbruik maken van een 404 script. Je zet dus iets als:
http://www.example.com/product/1234/thumb-60.jpg op je product pagina's. Als de gebruiker dat ding opvraagt en die jpg bestaat nog niet dan zorg je dat jouw php script aangeroepen wordt, stuur je caching headers mee, stuur je het plaatje naar de gebruiker en sla je vervolgens die .jpg op waarna Apache de boel weer overneemt.

3e optie is trouwens het overstappen naar een betere provider :)

[ Voor 5% gewijzigd door bartvb op 07-03-2006 10:50 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

bartvb schreef op dinsdag 07 maart 2006 @ 10:49:

3e optie is trouwens het overstappen naar een betere provider :)
Als je in een auto rijdt die 1 op 1 doet en je de benzine niet kan betalen verhuis jij zeker ook naar een land waar de benzine goedkoper is? :P

Met een onzinnig script dat continue extern JPG's inlaadt en on-the-fly verkleint lijkt de provider me niet echt het probleem ^^

Acties:
  • 0 Henk 'm!

  • George
  • Registratie: Maart 2006
  • Laatst online: 02-03 19:22
Niet gewoon even tijdens product invoer ervoor zorgen dat bijgevoegde afbeelding gelijk "gethumbd" wordt. En ervoor zorgen dat bij een wijziging van afbeelding je thumb scriptje gelijk de boel update.
Heb je dus 1. gecachte thumbs en 2. minder server load. 3. je probleem is ook gelijk opgelost.

EDIT: Ah, Bart schrijft dus al hetzelfde. Zijn optie 1 dus.

-GIsmaël

[ Voor 12% gewijzigd door George op 07-03-2006 16:30 ]

-George.

Pagina: 1