Kiedyś poproszono mnie o przeszukanie wszystkich plików php na serwerze webowym po kątem wywołania pewnej funkcji. Oczywiste wydało mi się użycie rekurencyjnie grep’a, więc:
grep -R "JAKAS_FUNKCJA" /var/www/*.php
Ale szybko okazało się że grep dopasowuje maskę *.php również do katalogów, więc nie przeszukiwał katalogów które nie kończyły się na .php ehhh…..
Drugie podejście okazało się trafniejsze - najpierw poleceniem find wyszukuję wszystkie pliki php, a dopiero później grepuję (wypisując nazwę pliku i numer linii):
find /var/www/ -iname '*.php' -print0 | xargs -0 -I'{}' sh -c 'grep -iHn "JAKAS_FUNKCJA" "{}"'
Przykładowo wynik:
find /var/www -iname '*.php' -print0 | xargs -0 -I'{}' sh -c 'grep -iHn "eval(" "{}"'
/var/www/*****/wp-admin/press-this.php:208: var my_src = eval(
/var/www/*****/wp-admin/press-this.php:219: var my_src = eval(
/var/www/*****/wp-admin/press-this.php:402: eval(data);
/var/www/*****/wp-admin/includes/class-pclzip.php:4063:// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
/var/www/*****/wp-includes/class-phpmailer.php:1916: //TODO using /e (equivalent to eval()) is probably not a good idea
/var/www/*****/wp-includes/class-json.php:22: * Javascript, and can be directly eval()'ed with no further parsing
/var/www/*****/wp-includes/functions.php:190: if ( doubleval($bytes) >= $mag )