Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Poziv nepostojece funkcije

[es] :: PHP :: Poziv nepostojece funkcije

[ Pregleda: 1094 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peromalosutra
Ivan Rajkovic
Software engineer
Berlin

Član broj: 54774
Poruke: 878
*.customer.blic.net.



+148 Profil

icon Poziv nepostojece funkcije17.03.2011. u 19:23 - pre 161 meseci
Imam veoma cudan problem pa me zanima moze li mi iko razjasniti situaciju na koju sam naisao, jer ja nemam logicnog objasnjenja.

Dakle trebam da modifikujem jednu Joomla komponentu, com_rapidrecipies, tacnije samo jedan njen view (viewrecipe). U "kontroleru" funkcije nalazim case koji se odnosi na view koji zelim da mijenjam:

Code:

case 'viewrecipe':
    $recipe_id = trim(intval( JRequest::getVar('recipe_id', "" )) );
    rr_runSQL("UPDATE #__rr_recipes SET hits = hits+1 WHERE  recipe_id=" . mysql_escape_string($recipe_id));
    rr_EchoOneRecipe($recipe_id);    
    break;    


Vidim da se poziva funkcija rr_EchoOneRecipe i super, to je ono sto meni treba. Medjutim sad dolazi zanimljv dio. Ove funkcije nema nigdje na serveru! :)
Tj. negdje naravno mora biti cim se uredno poziva i ispisuje kod, ali grep pretraga cijele joomla instalacije ne nalazi nikakav rezultat:
Code:

$ egrep "function.*rr_EchoOneRecipe" -R .


Da bih bio 100% siguran da se upravo taj gorenavedeni case izvrsava, uradio sam malo printf debugovanja sa:

Code:

case 'viewrecipe':
    $recipe_id = trim(intval( JRequest::getVar('recipe_id', "" )) );
    rr_runSQL("UPDATE #__rr_recipes SET hits = hits+1 WHERE  recipe_id=" . mysql_escape_string($recipe_id));
    echo 'calling function';
    rr_EchoOneRecipe($recipe_id);    
    echo 'function ended';
    break;    


I ovaj tekst se ispise uredno. Takodje, pretragom prema HTML kodu koji funkcija rr_EchoOneRecipe generise sam nasao funkciju pod imenom "showRecipe1" i ispostavilo se da se ova funkcija zapravo poziva umjesto rr_EchoOneRecipe.

Dakle, pozove se rr_EchoOneRecipe, a izvrsi se showRecipe1. Moze li mi neko reci sta propustam i kako je ovo moguce? Vjerovatno propustam nesto veoma ocigledno, ali u ovom trenutku mi nista ne pada na pamet.

Pozdrav,

Ivan
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: Poziv nepostojece funkcije18.03.2011. u 00:37 - pre 161 meseci
Nazivi funkcija u php-u su case insensitive

Mozda za grep treba nesto kao:
Code:

$ egrep "function.rr_EchoOneRecipe" -R -i.


Kako si siguran da se showRecipe1 izvrsava umesto rr_EchoOneRecipe?
Verovatno rr_EchoOneRecipe unutar sebe poziva showRecipe1 a ne umesto. Mislim da to nije moguce.
Ako je tako onda mozes da nadjes gde se sve poziva showRecipe1 koji tebi treba.
A kada to nadjes onda ces znati sta dalje ...

Moguc je ovakav neki kod, mada je glupo:
Code (php):

$prefix = 'rr_';
eval('function '.$prefix.'EchoOneReciPE($id) { echo $id; }');
rr_EchoOneRecipe(1);
 


pa u grep rr_ zamenis sa * ili sta vec ...




[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

[es] :: PHP :: Poziv nepostojece funkcije

[ Pregleda: 1094 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.