Autor Zpráva
ShiraNai7
Profil
Následující kód natvrdo shodí apache nebo vyčerpá všechen limit paměti (chce alokovat asi 2GB) a skončí fatal errorem.. čím to? (PHP: 5.2.9, Apache: 2.2.11, OS: XP SP3)

function foobar($match) {
	$GLOBALS['omg'] = $match;
	//print_r($match);
}
preg_replace_callback('%(.*)%', 'foobar', 'Bla bla bla');


Když si odkomentujete to print_r a zakomentujete tu asociaci do globals, tak se vám to normálně vypíše.
AM_
Profil
Mám Apache 2.2.11, php 5.3.0, Win7 a nepadá to. Takže asi opravdu bug v 5.2.9. Každopádně zajímavý :)
ShiraNai7
Profil
Asi nějaký memory leak slušně brutální.. no nic, děkuji za reakci. Já to nepotřebuji tímto způsobem zpracovávat, jen jsem se do této situaci dostal jednou svou debugovací funkcí a nepochopil jsem co a jak.
Majkl578
Profil
U mě na localhostu (PHP 5.3.1, Debian, Apache 2.2.14) je to OK.
Kcko
Profil
Taky shodi, verze 5.2.9 za to muze toto

function foobar($match) {
    $GLOBALS['omg'] = $match;
    //print_r($match);
}
preg_replace_callback('%(.*)%', 'foobar', 'Bla bla bla');
Majkl578
Profil
Můžu vědět, k čemu je dobré v PHP5 použití GLOBALS?
ShiraNai7
Profil
O zadne globals tu nejde.. tohle je zobecneny kod pro reprodukci te chyby, ktera nastane, kdyz se funkce nastavena jako callback pokusi prenest hodnotu sveho argumentu volanim mimo jeji scope. Narazil jsem na to nahodou, kdyz jsem z callbacku volal svoji debugovaci funkci (ktere jsem predal ten $match). Urcite se to nema pokusit sezrat x giga ramky a shodit apache :)
Yur4Y
Profil
Táto chyba bola opravená v PHP 5.2.10.
ShiraNai7
Profil
Ok, diky :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0