MF PHP Search And Replace + File Explorer
MF PHP Search And Replace con File Explorer permette la programmabilità delle operazioni di Search And Replace, come suggerisce il titolo della classe. Ha funzionalità avanzate di filtraggio file, e permette potenti operazioni di rimpiazzamento stringhe anche attraverso regular expression.
A cosa serve MF PHP Search And Replace + File Explorer
Quante volte ti è capitato di dover effettuare dei search and replace all'interno del tuo ambiente di sviluppo? O ancora, quante volte ti è capitato di dover programmaticamente cercare una stringa all'interno di tutto il tuo filesystem? L'unico "tool", per così dire, funzionale e veloce, è la bash. Un paio di comandi e il gioco è fatto. Ma davvero questa è l'unica opzione funzionale e veloce, come sopra sottolineato?
Non più. Con MF PHP Search And Replace, che funziona grazie al suo fratello minore File Explorer, non è più necessaria nessuna exec() o comandi manuali da bash. Con poche righe di codice, è possibile istanziare la classe Search And Replace che fa tutto il lavoro sporco.
Una occhiata generale a MF PHP Search And Replace + File Explorer
Il lavoro di "cerca questa stringa e rimpiazzala" è sempre stato legato alla creazione "al volo" di piccoli script. Nella mia esperienza personale è capitato molte volte di dover creare uno script per il rimpiazzo di una particolare stringa all'interno dei file php di un progetto.
Dato che la programmabilità delle operazioni di search and replace permette una vastità di operazioni su file di log, cambio di password senza troppi pensieri, modifica di un nome variabile che ti è sembrato sempre scorretto ma sempre l'hai usato per compatibilità, ecco che interviene la classe MF PHP Search And Replace.
A livello pratico, il rimpiazzo di stringhe è banale. E' fattibile con una semplice str_replace(), o più "professionalmente" con delle preg_replace () ben scritte. Quello che non è banale, però, è il parsing del filesystem su cui vogliamo operare, per effettuare una scrematura dei file su cui vogliamo operare, e ancora più delicato è il discorso del rollback in caso di errori.
Infatti, l'operazione di search and replace talvolta può comportare dei problemi se questa stessa operazione non viene filtrata solo sui file giusti, e filtrata solo per le stringhe corrette.
La classe MF PHP Search And Replace cerca di essere la soluzione a questi due problemi. Con l'utilizzo di una classe apposita, la File Explorer ( sulla quale il meccanismo di filesystem tree navigation della Search And Replace si basa ) e con l'utilizzo di un sistema semi-asincrono per l'applicazione delle "patch" di rimpiazzo ai file, questa classe è non solo veloce da utilizzare ma anche sicura.
Per ogni operazione di search and replace triggerata, la classe genera automaticamente un file di rollback che si può facilmente ripristinare con una riga di codice. E inoltre, prima di operare sui file, effettuando di fatto il rimpiazzamento, la classe necessita di una riga di codice dedicata, in modo che nel tuo codice puoi inserire dei controlli sul numero di file o il tipo di file "eletti" per la modifica.
Ricapitolando,. i punti di forza di questa classe sono:
- L'interoperabilità con la classe File Explorer, che permette opzioni di filtraggio file avanzate
- Il meccanismo di modifica file è asincrono, ovvero permette una verifica prima di essere effettuato
- Per ogni istanza della classe, viene generato un file di rollback STATICO che può essere ripristinato in seguito con una riga di codice dedicata, non richiedendo più l'istanza della classe
Esempio di implementazione
require_once 'class.fileExplorer.php';
require_once 'class.searchAndReplace.php';
$sar = new searchAndReplace (
Array (
// Plain searches are "normal" str_replace's. They have LOWEST PRIORITY ( 3 )
'plain_search' => Array (
'search for this strange string' => 'replace with this other one',
'another string that needs attention' => 'no more attention needed!'
),
// Full word searches are "tweaked" str_replaces. In fact, only WORD BOUDARIES are matched
// ( bTEXTb -> matches "this is a TEST string" but NOT "TESTme please" ). This search has MEDIUM PRIORITY ( 2 )
'full_word' => Array (
'singe_word_to_be_found' => 'this search will have priority over the "plain_search" ones'
),
// Regexp searches are preg_replace's. They have an IDENTICAL syntax. If you know how to use preg_replace,
// you automatically know how to setup "regexp" searches!
// This search has HIGHEST PRIORITY ( 1 )
'regexp' => Array (
'/search([^.]+)fors(me.*)/' => 'it uses 1 the same $2 syntax of preg_replace!'
)
),
'/search/for/files/within/this/directory/',
'phphtml'
);
// the warnings_array will contain the PARSE ERRORS of regexps, if any
print_r ( $sar -> warnings_array );
// the files_that_will_be_modified contains the full list of files that will be modified, that you can parse prior of actually performing the search and replace
print_r ( $sar -> files_that_will_be_modified );
// the performSearchAndReplaceIntoFilesystem () reads the search-and-replace descriptor files, and APPLIES ALL THE MODS to the files. Returns the number of modified files
$modified_files = $sar -> performSearchAndReplaceIntoFilesystem ();
// the class builds also a ROLLBACK file ( created into the /search/for/files/within/this/directory/ ) named ".search_and_replace_rollback". You can call the rollback, if you encounter any error
$restored_files = searchAndReplace::performRollbackAfterSearchAndReplace ( '/search/for/files/within/this/directory/.search_and_replace_rollback' );
// ATTENTION: this line of code will ERASE the search-and-replace descriptor, AS LONG WITH THE ROLLBACK DESCRIPTOR, so if anything goes wrong you won't have the rollback file! KEEP THIS IN MIND!
$sar -> cleanupReplacerAndRollbackFileDescriptors ();
echo $modified_files . '::' . $restored_files;