[php] Welke image headers ?

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Als ik bijv:

[img]"index.php?id=3"[/img]

aanroep, wil ik dat er een bestaand plaatje getoond wordt die bijv 1.gif heet.

Weet iemand wat ik in index.php moet zetten? Heb al van alles doorgezocht, maar ik kom het maar niet tegen.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23-04 02:19
PHP:
1
2
3
4
5
<?php
header("Content-type: image/gif");
/* .. code om palette-based image te genereren .. */
imagegif($im);
?>

[ Voor 9% gewijzigd door Soultaker op 27-10-2005 21:07 ]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik bedoel dat het plaatje al bestaat... dus hij moet gewoon een bestaand gifje laten zien.

Normaal doe je [img]"1.gif">[/img]

Het resultaat moet hetzelfde zijn. Er komen geen bewerkingen op het plaatje te staan.

Volgens mij is het heel simpel, maar ik wete niet wat ik moet doen nadat de header gestuurd is om het bestaande plaatje te includen.

[ Voor 70% gewijzigd door RSD op 27-10-2005 21:11 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23-04 02:19
In dat geval nog steeds dezelfde header, en dan gewoon de inhoud van het bestaande bestand uitvoeren met readfile ofzo. Pas er trouwens wel op dat je niet zomaar lukraak readfile($_REQUEST['Id'].'gif'); of iets dergelijks neerzet, want dan kan een handige hacker een heleboel meer bestanden uitlezen dan de bedoeling is.

[ Voor 41% gewijzigd door Soultaker op 27-10-2005 21:12 ]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
En de load op de server moet minimaal zijn.

Ik vroeg me af of ik niet nog een header kan sturen waarin ik het plaatje gewoon laad.

  • simon
  • Registratie: Maart 2002
  • Laatst online: 26-04 20:43
RSD schreef op donderdag 27 oktober 2005 @ 21:12:
En de load op de server moet minimaal zijn.

Ik vroeg me af of ik niet nog een header kan sturen waarin ik het plaatje gewoon laad.
PHP:
1
2
3
<?php
header("Location: plaatje.gif");
?>

|>


  • qwertyuiop
  • Registratie: Juni 2002
  • Laatst online: 24-04 11:55
overbodig

[ Voor 94% gewijzigd door qwertyuiop op 27-10-2005 21:18 ]


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 24-04 11:26
@Simon
Dan redirect je de server naar het orginele plaatje. Dat kost je dus een extra request.
Ik neem ook aan dat hij de plaatjes via een PHP script wilt tonen om authenticatie oid toe te kunnen passen voordat het plaatje getoont wordt. Met jouw voorbeeld wordt de browser linea reacte doorgestuurd naar de afbeelding, en is dus ook de URL bekend

PHP:
1
2
3
4
<?php
header("Content-type: image/gif");
readfile("3.gif");
?>


is de juiste methode.

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
En dat is met minste server load?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
RSD schreef op donderdag 27 oktober 2005 @ 21:26:
En dat is met minste server load?
Bedenk eens wat er gebeurd. :)
Of het plaatje wordt direct aangesproken, server bedenkt een MIME en zet die in de header en poept vervolgens de inhoud van het bestandje uit.
Of je zegt hier dat je een header met die MIME stuurt en poept de inhoud van het bestandje uit.

Dat scheelt dus niets. Dit in tegenstelling tot de 'Location: '-header omdat je dan dus een nieuwe request laat maken.

{signature}


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Zit er ook nog verschil in als ik:

readfile("http://www.blabla.nl/1.gif") doe of

readfile("/var/www/html/1.gif")

Ok thanks het werkt....

Nog een klein ander vraagje, hier zit ik al geruime tijd mee.

Hoe kan ik het beste in mysql testen of een row al bestaat en als deze wel bestaan dat er dan actie moet ondernomen worden en als deze niet bestaat dan moet een andere actie ondernomen worden.

Ik doe het nu met mysql_num_rows , maar ik vroeg me af of het anders/beter kan.

Het script wat ik aan het maken ben is als het meezit bedoeld voor sites met veel traffic.

Elke optimalisatie is dus welkom.

[ Voor 70% gewijzigd door RSD op 27-10-2005 21:50 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
RSD schreef op donderdag 27 oktober 2005 @ 21:40:
Zit er ook nog verschil in als ik:

readfile("http://www.blabla.nl/1.gif") doe of

readfile("/var/www/html/1.gif")
Via het filesystem is dus goedkoper. De 1e opie is met http, dus wederom met een extra request. ;)

{signature}


  • mocean
  • Registratie: November 2000
  • Laatst online: 30-03 18:32
RSD schreef op donderdag 27 oktober 2005 @ 21:40:
Zit er ook nog verschil in als ik:

readfile("http://www.blabla.nl/1.gif") doe of

readfile("/var/www/html/1.gif")

[...]
Bij de eerste versie krijg je dus ook een 2e request via de webserver. Methode 2 is beter want dan leest PHP de file zelf uit.

[ Voor 4% gewijzigd door mocean op 27-10-2005 21:58 . Reden: Net te laat :-) ]

Koop of verkoop je webshop: ecquisition.com


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Als je sites optimaal wil houden voor veel traffic, dan genereer je je content niet on the fly, maar wanneer het gewijzigd wordt, en dan maken dit soort minieme optimalisaties niet zo gek veel meer uit. mysql_num_rows is 9 van de 10 keer efficiënt genoeg.

Verder: ik mis in dit topic een heel stuk eigen inzet. Je begint met een topicstart van niks, en een titel die je vraag niet dekt. Verder lees ik dit soort replies in je topic:
RSD schreef op donderdag 27 oktober 2005 @ 21:26:
En dat is met minste server load?
Dingen die je prima zelf kunt uitvinden door even in de manual te kijken. Vooral ook deze:
RSD schreef op donderdag 27 oktober 2005 @ 21:40:
Zit er ook nog verschil in als ik:

readfile("http://www.blabla.nl/1.gif") doe of

readfile("/var/www/html/1.gif")
Dit staat letterlijk in de manual:
Tip: Je kunt een URL als bestandsnaam gebruiken met deze functie als de "fopen wrappers" aan staan. Zie fopen() voor meer informatie.
fopen() bindt een genaamde resource, aangegeven met filename, aan een stream. Als filename van het formaat "schema://..." is, dan wordt aangenomen dat het een URL is en PHP zal dan zoeken naar een protocol handler (ook bekend als een wrapper) voor dat schema. Als er geen wrapper voor dat protocol geregistreerd is, zal PHP een notice weergeven om je te helpen mogelijke problemen in je script te achterhalen en zal dan doorgaan alsof filename verwijst naar een normaal bestand.

Als PHP heeft besloten dat filename verwijst naar een lokaal bestand, dan zal het proberen om een stream te openen naar dat bestand. Het bestand moet toegankelijk zijn voor PHP, dus je moet er voor zorgen dat de bestands rechten dit toestaan. Als je safe mode of open_basedir aan hebt staan, kunnen er andere restricties gelden.

Als PHP heeft besloten dat filename verwijst naar een geregistreerde protcol en dat dat protocol is geregistreerd als een netwerk URL, dan zal PHP controleren of allow_url_fopen aan staat. Als het uit staat, dan zal PHP een waarschuwing weergeven en fopen zal dan falen.
Lijkt me allemaal duidelijk zat. Iets meer moeite doen voor je post kan dus geen kwaad.

Op slot dus. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.