Como obter os argumentos para uma função php via grep?

0

Estou escrevendo um script para me informar sobre as informações de login do banco de dados para cada site baseado em PHP em um servidor que estou migrando. As informações de login geralmente são feitas assim:

$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';

mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);

Ou assim:

$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);

O script está procurando por cada linha que contém uma das funções de conexão do PHP:

grep -irE "mysql_connect\|mysql_select_db\|new PDO" *

Agora, como posso obter cada string que começa com $ e termina com um não alfanumérico? Além disso, se nenhum caractere ; for encontrado na tela, eu gostaria de ser notificado para que eu pudesse manipulá-lo manualmente, pois alguns codificadores podem fazer isso:

$pdo = new PDO("mysql: host={$servername};
                dbname={$$database_name}",
                $database_username,
                $database_password
               );

Depois que eu obtiver esses tokens (variáveis PHP), eu irei buscar o arquivo novamente para os tokens na esperança de obter seus valores;

    
por dotancohen 14.04.2013 / 10:53

1 resposta

1

Não tenho certeza do que você está tentando fazer aqui, mas você pode grep "todas as sequências que começam com $ e terminam com um caractere não alfanumérico" com isso:

grep -oP '\$.+?\W' 

Em resposta ao seu comentário, que tal algo como isto:

for f in 'find . -name "*.php"'; do \
  echo "----- $f -----";
  for s in $(grep -iE "mysql_connect|mysql_select_db|new PDO" $f | 
     grep  -oP '\$\w+?\W' | sed 's/.$//' | sort | uniq); do \
       grep -m 1 $s $f; 
 done; 
done

Este scriptlet irá encontrar todos os arquivos .php, grep cada um deles para as variáveis que você está interessado e então imprimir a primeira instância de cada variável no arquivo em que foi encontrado. Por exemplo, eu criei 2 arquivos .php, aa.php e bb.php , seus conteúdos são:

$ cat aa.php 
$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';
mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);

$ cat bb.php 
$servername='localhost2';
$database_username='some2Name';
$database_password='p@ssw0rd2';
$database_name='someDatabase2';
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);

A saída do script acima é:

----- ./bb.php -----
$database_name='someDatabase2';
$database_password='p@ssw0rd2';
$database_username='some2Name';
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
$servername='localhost2';
----- ./aa.php -----
$database_name='someDatabase';
$database_password='p@ssw0rd';
$database_username='someName';
$servername='localhost';
    
por 14.04.2013 / 15:19