
Ich schreibe ein Skript, das mir die Datenbank-Anmeldeinformationen für jede PHP-basierte Website auf einem Server, den ich migriere, mitteilt. Die Anmeldeinformationen werden normalerweise folgendermaßen angegeben:
$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';
mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);
Oder so:
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
Das Skript sucht nach jeder Zeile, die eine der PHP-Verbindungsfunktionen enthält:
grep -irE "mysql_connect\|mysql_select_db\|new PDO" *
Wie kann ich nun alle Zeichenfolgen abrufen, die $
mit einem nicht alphanumerischen Zeichen beginnen und enden? Außerdem ;
möchte ich benachrichtigt werden, wenn auf dem Bildschirm kein Zeichen gefunden wird, damit ich es manuell bearbeiten kann, da einige Programmierer dies möglicherweise folgendermaßen machen:
$pdo = new PDO("mysql: host={$servername};
dbname={$$database_name}",
$database_username,
$database_password
);
Nachdem ich diese Token (PHP-Variablen) erhalten habe, durchsuche ich die Datei erneut nach den Token in der Hoffnung, ihre Werte zu erhalten.
Antwort1
Ich bin nicht ganz sicher, was Sie hier versuchen, aber Sie können grep
„alle Zeichenfolgen, die mit einem nicht alphanumerischen Zeichen beginnen $
und enden“ folgendermaßen löschen:
grep -oP '\$.+?\W'
Wie wäre es als Antwort auf Ihren Kommentar mit etwa Folgendem:
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
Dieses Scriptlet findet alle .php-Dateien, durchsucht jede davon nach den Variablen, die Sie interessieren, und druckt dann die erste Instanz jeder Variable in der Datei aus, in der sie gefunden wurde. Ich habe beispielsweise 2 .php-Dateien erstellt aa.php
und bb.php
ihr Inhalt ist:
$ 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);
Die Ausgabe des obigen Skripts lautet:
----- ./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';