[PHP] Opera && rand()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
Ik heb een vaag probleem, ik probeer als verificatie voor de input van een gastenboek een plaatje met random letters te maken. Op zich niet al te moeilijk. En werkt perfect in IE.
Echter wanneer ik met Opera dit plaatje laad, laat hij de eerste keer nieuwe letters zien, maar na een refresh letters die al eens eerder geweest zijn.
Nu zul je denken, er staat ergens caching aan. Om dit uit te sluiten heb ik een timestamp toegevoegd in het plaatje, en die verandert wél elke keer... :S :+
Afbeeldingslocatie: http://holland-sport.nl/pagepics/0123456789.php
Het zou dus aan de rand() functie moeten liggen, alleen heb ik nog niemand gevonden met hetzelfde probleem... Ik draai PHP versie 4.3.4 en Apache 2.0.48 op een systeem met windows XP.
Ik heb nóg een pagina met een rand() functie erin, en geeft dezelfde kuren.

Dit werkt om te testen...
code:
1
http://holland-sport.nl/pagepics/[insert 10 digits].php
(zodat je zeker geen last hebt van caching)

Wie o wie heeft hier een oplossing voor?

M'n Oma is een site aan het haken.


Acties:
  • 0 Henk 'm!

Verwijderd

Werkt prima hier, moet alleen niet te snel refreshen :P

Opera 9.02

[edit]
Soms lijkt hij idd niet te refreshen zowel in FF als Opera. Welke headers gebruik je ?

Btw een timestamp (verandering) in het plaatje heeft natuurlijk niets met caching te maken.

[ Voor 74% gewijzigd door Verwijderd op 29-10-2006 01:42 ]


Acties:
  • 0 Henk 'm!

  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Als ik hier met curl naar de headers kijk, krijg ik een 404 als status:
persephone:~ martin$ curl -D - http://holland-sport.nl/pagepics/0123436789.php
HTTP/1.1 404 Not Found
Date: Sat, 28 Oct 2006 23:37:29 GMT
Server: Apache/2.0.48 (Win32)
X-Powered-By: PHP/4.3.4
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=0b7641f5b30d5dd19cafe31c1155c378; path=/
Last-Modified: Sat, 28 Oct 2006 23:37:29 GMT
Content-Length: 265
Content-Type: image/png

?PNG

IHDRd(2??PLTE???UK/???IDATx?c??>040 ?o?{c??lr@???$g??3?~??HK??m?Kl?4`?10??`?3?1H??#??l?188??1Y???<??m?!?cl??ml?`?d?1?g?@6???????;I?1??????C?F?3F??????"?pX????p????u|DJ

Misschien dat het daarom niet helemaal lekker werkt?

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
Ik heb hier Opera 9.00, en had hier in Opera 7 && 8 ook al last van.
Bij jou veranderen de letter wel gewoon? Vaag...
Hoe ziet de aanvraag van Opera die naar Apache wordt gestuurd eruit, en verschilt die van IE??
(Er is hier vást wel iemand die dat weet...)
Ik ga nog even proberen met mt_rand() && srand();

[over caching]
Je hebt gelijk, maar zo kun je wel prima zien of het plaatje uit je cache komt, of "brand new" is...
Die headers hebben volgens mij geen invloed op de stuff die PHP.exe doet.

[404]
Dat heeft waarschijnlijk te maken met .htaccess, het plaatje staat nml niet echt op die plek (daarom kun je ook 10 random digits invoeren...)

Er wordt dus niet gechached, op het rand() cijfer na, nogal vaag. Wie wil het ook een proberen op z'n server? Desnoods geef ik je code voor het plaatje, maar met plain text gaat ie ook de mist in.

[ Voor 49% gewijzigd door NielsNL op 29-10-2006 01:51 ]

M'n Oma is een site aan het haken.


Acties:
  • 0 Henk 'm!

Verwijderd

Zolang je elke keer een andere cijfer combi hebt zul je een vers plaatje krijgen. Welke rand functie je gebruikt zou niet moeten uitmaken. Die 404 zou ik me meer zorgen over maken.

Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
Ik heb 'm (tijdelijk) op http://nielsnl.nl/letters.php gezet. En daar gaat het wél goed.
Daar wordt ie zonder include() en .htaccess RewriteEngine On opgehaald.
Toch blijft het vaag dat de rand() functie daar niet tegen kan...
[edit]
Ik heb van PHP.net dit stukje code opgehaald:
PHP:
1
2
3
4
5
function make_seed() {
   list($usec, $sec) = explode(' ', microtime());
   return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());

Dat toegevoegd, dan werkt hij wél goed. :S

Toch blijft het vaag dat het met IE wél goed gaat, en andere browsers niet, terwijl het een server-side probleem is...

[ Voor 47% gewijzigd door NielsNL op 29-10-2006 02:03 ]

M'n Oma is een site aan het haken.


Acties:
  • 0 Henk 'm!

Verwijderd

vergeet niet dat de timestamp op secondes werkt, als je dus refreshed in de zelfe seconde krijg je dezelfe timestamp. je kunt beter microtime gebruiken en dan de microsecondes op het plaatje
drukken.

verders lijkt het alsof ie gewoon niet goed cached en dus onodig vaak iets opnieuw laad. aan de andere
kant lijkt opera weer iets te goed te cachen en vergeet het opnieuw te laden.

kijk ook eens of dat de groote van het plaatje veranderd, veel browsers kijken naar
de 'Content-Length' header om te kijken of een plaatje al eens eerder is geladen.

Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
Die timestamp is niet om een random iets te maken, maar alleen om te kijken of het plaatje uit de ergens een cache komt, of "brand new" is. Wat blijkt, de timestamp is elke seconde nieuw, alleen de letters blijven staan...
En met het gebruik van srand() gaat het wél goed. :S
En wat nóg vager is, in IE gaat het wél goed, terwijl het een server-side probleem is. :S
Weet iemand hoe zo'n request string van IE eruit ziet, en die van opera?

M'n Oma is een site aan het haken.


Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 19-09 13:37
NielsNL schreef op zondag 29 oktober 2006 @ 01:43:
Ik heb hier Opera 9.00, en had hier in Opera 7 && 8 ook al last van.
Bij jou veranderen de letter wel gewoon? Vaag...
In Opera 9.02 werkt het prima. Firefox 2.0b2 doet het ook prima.

Hier de headers die ik heb gebruikt voor iets soortgelijks, misschien heb je er wat aan:
PHP:
1
2
3
4
5
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header ('Cache-Control: post-check=0, pre-check=0', false); // HTTP/1.1
header ('Pragma: no-cache'); // HTTP 1.0

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • Priet
  • Registratie: Januari 2001
  • Laatst online: 21:17

Priet

To boldly do what no one has..

Probeer srand() eens te gebruiken. Ik ben ooit ergens deze tekst tegengekomen (volgens mij op PHP.net maar daar vind ik 'm niet meer terug):

PHP:
1
2
3
4
//With some versions of PHP (including 4.3.4 ), there is a problem with Windows XP and rand(). 
//In short (as this is not a bug report), if you have any POST or GET requests to the page, rand() can generate the same number each time.
//This bug is already listed on bugs.php.net, but a solution to the bug posted there is that you use srand() at the start of your code.
srand();

"If you see a light at the end of a wormhole, it's probably a photon torpedo!"


Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14
Ah, een bekend probleem dus.
Zoals je een paar posts naar boven kunt lezen heb ik inderdaad, met succes, srand() bebruikt.
Alleen blijft het vaag dat het met IE niet gebeurd..

[ Voor 18% gewijzigd door NielsNL op 30-10-2006 11:36 ]

M'n Oma is een site aan het haken.


Acties:
  • 0 Henk 'm!

Verwijderd

Bij mij werkt het in Opera 8.1, Mozilla 2.0 en Iexplorer. Vreemd dat één functie een verschil kan maken in diverse browserversies.
Pagina: 1