<?php // Usage: call the function on the commandline (PHP CLI needed) // entereing the path of the persistent.log and the path of the userdb.txt // attention only run the script once main("persistent.log","userdb.txt"); function main($path_to_log, $path_to_db) { $successful=create_backup($path_to_db); if ($successful==true) { migrate_db($path_to_log, $path_to_db);} else { print_r("The backup copy failed, so there was no transition. Please check permissions."); } } function create_backup($path_to_db) { $path_to_backup=$path_to_db.".version1"; if (copy($path_to_db,$path_to_backup)) { print_r("A backup copy of your file has been saved to ".$path_to_backup."\n"); return true;} else { print_r("Something went wrong!"); return false; } } function parse_log($path_to_log) { $tmp_file_s=$path_to_log."_sort"; $tmp_file_u=$path_to_log."_uniq"; system("sort -u ".$path_to_log." > ".$tmp_file_s); system("uniq -u ".$tmp_file_s." ".$tmp_file_u); // read file into a two dimensional array $lines = file($tmp_file_u,FILE_IGNORE_NEW_LINES); foreach ($lines as $line_num => $line) { $tmp_array=preg_split("/ /", $line, 4); $conversion[$line_num]['uniqueid'] = $tmp_array[2]; $conversion[$line_num]['persistentid'] = $tmp_array[1]; } return $conversion; } // returns the corresponding persistentid to the uniqueid // or returns false when nothing was found function get_persistentid_to_uniqueid($search, $multidimensionalarray) { foreach($multidimensionalarray as $key => $values) { if (in_array($search, $values)) { if ($search != $values['persistentid']) {return $values['persistentid'];} // if the search input is already a persistent ID, then the userdb file has already been migrated else {print_r("It seems that you are running the script for the second time.");} } } return false; } function migrate_db($path_to_log,$path_to_db) { $conversion=parse_log($path_to_log); $counter=0; $text=""; $notmigrated=""; // read each line of the userdb file into an array $lines = file($path_to_db,FILE_IGNORE_NEW_LINES); // go through all users and try to replace the line with the persistentid instead of the uniqueid foreach ($lines as $line_num => $line) { $tmp_array=preg_split("/ /", $line, 2); $persistentid=get_persistentid_to_uniqueid($tmp_array[0],$conversion); if ($persistentid != false) { $tmp_array[0]=$persistentid; $line = implode(" ", $tmp_array); $counter++; } else {$notmigrated=$notmigrated.$tmp_array[0]."\n\n";} $text=$text.$line."\n"; } $fh = fopen($path_to_db, 'w') or die("can't open file".$path_to_db); fwrite($fh, $text); fclose($fh); $numberofunchancheduid=$line_num-$counter; print "Attention, you have unmigrated uids. A total of ".$numberofunchancheduid."has not been changed"; print "A total of ".$counter." uids have been changed"; print_r("The not migrated".$notmigrated); } ?>