#1 2012-05-22 18:08:57

bogan
Člen
Registrován: 2012-02-21
Příspěvky: 10

Re: Nefunkcni anonymni funkce v PHP

Dobry den,

od verze PHP 5.3 lze pouzivat anonymni funkce a jeste donedavna na Endore fungovaly. Nyni mi prestaly fungovat stranky (http://www.bogan.cz) a pravdpodobne za to muze nedavny upgread PHP na verzi 5.3.13.

Kdyz si spustim na starsi verzi PHP (5.3.X) nasledujici kod, tak to v poho probehne a kdyz to spustim na Endore, tak to zahlasi chybu.

Bojim se, ze s tim moc nenadelate, protoze to vypada na problem v PHP. Zkusim si nainstalovat u sebe PHP 5.3.13, abych zjistit, zda to je problem PHP nebo Endory. Pokud udelate downgrade PHP nebo to nejak opravite, tak budu vdecny. Na teto adrese mate PHP, kterym to vzdy muzete otestovat http://www.bogan.cz/test.php

Ukazkovy kod:
$promenna='neco';

$fce1=function() { echo 'Fce 1 spustena<br>'; };
$fce2=function() use ($promenna) { echo 'Fce 2 spustena, $promenna='.$promenna.'<br>'; };

$fce1();
$fce2();

Na starsim PHP (5.3.X) to vrati:
Fce 1 spustena
Fce 2 spustena, $promenna=neco

Na Enodre PHP (5.3.13) to vrati:
Fce 1 spustena
Fatal error: Function name must be a string in ... on line ...

Offline

#2 2012-05-22 20:25:57

JF
Endora rádce
Místo: ....nice u Plzně
Registrován: 2010-06-22
Příspěvky: 11,888

Re: Nefunkcni anonymni funkce v PHP

Ak to nefunguje na novej verzií je nutné si to preprogramovať tak aby to bežalo korektne podľa nových ustanovení PHP. Verzie sa aktualizujú preto lebo sa príde na nejakú závadu a aby sa to zabezpečilo vydá sa nová verzia, tj ísť späť na staršiu nepripadá v úvahu.


Ján Fačkovec - Endora.cz by Webglobe
Email, Web, Webadmin, Webmail, Nápověda, Ceník

Offline

#3 2012-05-23 07:29:16

bogan
Člen
Registrován: 2012-02-21
Příspěvky: 10

Re: Nefunkcni anonymni funkce v PHP

Pak jsem jeste objevil chybu v preg_replace_callback, kdy pretece pamet, ale zatim jsem neudelal testovaci/ukazkovy skript chyby.
Zadne zmeny ve verzi 5.3.13 v tech funkcich, co tu zminuji, neprobehly. Do dokumentace funkci i do changelogu PHP jsem se samozrejmne podival ihned pri nalezeni chyby. Popisovana chyba je spis downgrade funkcnosti a to v PHP davaji vedet hodne dopredu pomoci chyby E_DEPRECATED.
Tato chyba urcite neni planovana uprava PHP.

Offline

#4 2012-05-23 07:52:53

bogan
Člen
Registrován: 2012-02-21
Příspěvky: 10

Re: Nefunkcni anonymni funkce v PHP

Tak je to 100% problem na endore. Stahnul jsem si do lokalniho pocitace veriz 5.3.13 a zminene chyby to nedela.
Zkuste si opakovane volat stranku http://www.bogan.cz/preg_replace.php a budou se vam dit ruzne 3 chyby:
- Nebyla přijata žádná data
- Warning: preg_replace_callback() Requires argument 2, '', to be a valid callback in preg_replace.php
- Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 365590041 bytes)

Dokonce pretece pamet a to v tom souboru je jen

$fcep=function(){
    return 'x';
};

$text=preg_replace_callback('/[0-9]/',$fcep,'abcdefghijkl12345679'); //toto nahradi cisla za znak x
echo $text.'<br>';

// nasledujici cast ovlivnuje chovani i beh predchozi funkce a to je uz fakt divne
$promenna='neco';

$fce1=function() { echo 'Fce 1 spustena<br>'; };
$fce2=function() use ($promenna) { echo 'Fce 2 spustena, $promenna='.$promenna.'<br>'; };

$fce1();
$fce2();

Je mi lito, ale tohle je opravdu problem u vas. Moc zakazniku tyto moznosti asi nepouziva, ale urcite se jich par najde.

Offline

#5 2012-05-23 13:31:18

JF
Endora rádce
Místo: ....nice u Plzně
Registrován: 2010-06-22
Příspěvky: 11,888

Re: Nefunkcni anonymni funkce v PHP

Ako píše chyba, funkcia požaduje parameter 2. Ak si čítal manuál k danej funkcií http://cz2.php.net/preg_replace_callback tak druhý parameter nemôže byť premenná ale mal by byť typu callable http://cz2.php.net/manual/en/language.t ... llable.php

$text=preg_replace_callback('/[0-9]/',$fcep,'abcdefghijkl12345679'); - špatne
$text=preg_replace_callback('/[0-9]/',function(),'abcdefghijkl12345679'); - správne

- sám to otestované nemám, výsledok čerpám z manuálu


Ján Fačkovec - Endora.cz by Webglobe
Email, Web, Webadmin, Webmail, Nápověda, Ceník

Offline

#6 2012-05-23 18:58:25

bogan
Člen
Registrován: 2012-02-21
Příspěvky: 10

Re: Nefunkcni anonymni funkce v PHP

Na strance
http://php.net/manual/en/functions.anonymous.php
najdete kod

$service = function($foo) {
    echo "Service returns: $foo";
};

coz je dukaz ze to jde. Najdete tam spoustu ukazek, ze anonymni fci lze definovat jako prommenou. Jinak by postradaly smysl.

Dnes jsem si stahl verzi 5.3.13 a v poradku vse funguje. Webovky jsem si pozmenil, aby mi bezely i na vasi rozbite verzi. Berte to spis tedy jako informovani, ze vam pri kompilace php doslo asi k chybe. Tohlo opravdu ma fungovat, jsem v tom profik :-).

Chapu, ze vy s tim moc nenadelate a musite pockat na nejaky BUG fix. Problem je, ze na jinem 5.3.13 se to nedeje.

Preji hodne zdaru.
Snad se vam to casem podari opravit.

Offline

#7 2012-05-24 19:26:14

admin
Administrátor
Registrován: 2009-05-15
Příspěvky: 4,294

Re: Nefunkcni anonymni funkce v PHP

Zkuste vypnout eaccelerator ... resilo se to tu

Offline

#8 2012-05-24 20:08:04

bogan
Člen
Registrován: 2012-02-21
Příspěvky: 10

Re: Nefunkcni anonymni funkce v PHP

ZABRALO, mate medaili :-). Eaccelerator u sebe nepouzivam, v zivote by mne to nenapadlo.

Diky moc

Offline

Zápatí

Založeno na FluxBB | CZ a SK