PHP Object is leeg direct na het setten.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 20-09 20:54

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ok, we lopen tegen een super vaag probleem aan. We krijgen random 500 internal server errors.

Het probleem is soort van bekend maar dit heb ik letterlijk nooit gehad en een oplossing weet ik al helemaal niet.

De code ziet er ongeveer zo uit, en wat er in de functie staat gebeurd ook letterlijk zo. Er zit helemaal geen andere code / logica in/tussen..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

protected $foo

..

public function blaat($bar)
{
    print_r($bar); // Laat een waarde zien

    $this->foo = $bar;

    print_r($this->foo); // is NULL

    print_r($bar); // laat nog steeds een waarde zien

    print_r($this);  // laat gewoon een waarde zien op foo...

}


Ongeveer 1 op de 10x is dus de waarde uit $this->foo NULL, andere keren gaat het wel goed. Domweg F5én laat de ene keer wel een waarde zien en de andere keer weer NULL..

Het geheugen verbruik van de server is helemaal prima, idem qua HD ruimte en qua load is het ook allemaal netjes.

Echt wtf kan dit zijn?

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 15:23
Mogelijk dat de class waar $foo een instance van is iets doet met de magic __get en __set methodes.

http://php.net/manual/en/...verloading.php#object.get

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Wat doe je aan caching?

APC-dingen of Apache die iets probeert te cachen?

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 20-09 20:54

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
ZpAz schreef op maandag 11 juli 2016 @ 22:24:
Mogelijk dat de class waar $foo een instance van is iets doet met de magic __get en __set methodes.

http://php.net/manual/en/...verloading.php#object.get
mja dat zou volgens mij dan alleen niet verklaren waarom je hem wel in 'this' kan terug zien toch?
Gomez12 schreef op maandag 11 juli 2016 @ 22:25:
Wat doe je aan caching?

APC-dingen of Apache die iets probeert te cachen?
mja vanuit het framework zelf, maar daar ligt het ook weer niet helemaal aan. We checken morgen even om alle cache te verwijderen. Punt is dat als het iets van cache zou zijn, dat je niet gemixte resultaten zou terug krijgen (ene keer wel, dan weer niet etc.).

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Douweegbertje schreef op maandag 11 juli 2016 @ 23:17:
[...]
mja vanuit het framework zelf, maar daar ligt het ook weer niet helemaal aan. We checken morgen even om alle cache te verwijderen. Punt is dat als het iets van cache zou zijn, dat je niet gemixte resultaten zou terug krijgen (ene keer wel, dan weer niet etc.).
Zitten er meerdere gebruikers op het systeem?

Het zou niet de 1e keer zijn dat ik een cache enkel om zie vallen als een andere gebruiker een actie doet. Oftewel je krijgt de hele tijd dezelfde waarde terug totdat een andere gebruiker actie x/y/z doet en wordt jouw caches ververst :)

Acties:
  • 0 Henk 'm!

Verwijderd

Wat laat je $this exact zien? Ik ben ooit ergens geweest waar er wel sprake was van een __set overload die de waarde niet in foo wegschreef, maar in iets wat er op leek (laten we zeggen f00). Als je dan print_r($this) deed was het onderscheid bijna niet te maken, maar $this->foo was wel leeg, want $this->f00 was beschreven.

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Wat zie je als je de variabelen en properties bekijkt tijdens het debuggen?

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 15:23
Douweegbertje schreef op maandag 11 juli 2016 @ 23:17:
[...]


mja dat zou volgens mij dan alleen niet verklaren waarom je hem wel in 'this' kan terug zien toch?
[...]
Ja, je hebt gelijk, waarschijnlijk gaat hij dan niet langs een __get(). Want die wordt enkel aangeroepen voor "niet bestaande" properties van de class.

Het enige wat ik zo kan zeggen, reduceer zoveel mogelijk code. (Bijvoorbeeld als het van een parent class erft, stop dat even, en kijk of het nog zo is. Indien niet, dan is het iets in de parent class, indien wel, dan verder kijken).

-

Caching of multi-user systemen kan ook iets zijn natuurlijk. Zoals hierboven vermeld.

[ Voor 29% gewijzigd door ZpAz op 11-07-2016 23:42 ]

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19-09 11:00

Ventieldopje

I'm not your pal, mate!

Als het 1 op de 10x is dan lijkt het mij een opcode caching probleem. Zonder de juiste configuratie (van zowel apache worker, php handler als php zelf) kan dit voor rare problemen zorgen.

Check voor dingen als suhosin en zet die tijdelijk even uit, net als de caching (apc, zend..). Check voor de zekerheid ook het toegestane geheugen voor php.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 20-09 20:54

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
De server was uiteindelijk op zijn plaat gegaan. Na een restart is alles weer normaal. We gaan inderdaad uit van corrupte cache.. ding draait al jaren non stop en er waren recent geen commits geweest. :)

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ah, u heeft ons kritieke info onthouden...

Jaren aanstaan en recent geen commits, dan zou mijn 1e advies ook zijn : Have you tried turning it off and on again :)
Pagina: 1