Zend - The PHP Company




Files and Directories

Add Code


Search and Replace  

Type: code fragment
Added by: richardhey
Entered: 20/05/2000
Last modified: 08/12/1999
Rating: ***** (6 votes)
Views: 8694
A script that performs a search and replace function. Written because I didn't have one at the time. Can perform over multiple files and/or directories. Can be configured to ignore certain lines.


<?php
error_reporting
(63);
/***************************************
** Title........: Search and replace utility
** Filename.....: search.replace.php
** Author.......: Richard Heyes
** Version......: 0.9
** Notes........:
** Last changed.: 23/04/2000
** Last change..:
***************************************/

        
$find '';                                     // Find this.
        
$replace '';                                  // And replace with this.
        
$ignore_lines '';                             // Can't use commas in this.
        
$directories '';                              // Comma seperated if multiple
        
$files '';                                    // Search and replace in these files.
        
$include_subdir 0;                            // Include subdirectories or not. 1/0

/***************************************
** The main search and replace routine.
***************************************/
        
function search_replace($filename){
                global 
$find,$replace,$ignore;
                
$occurences 0;
                
$file_array file($filename);
                for(
$i=0$i<count($file_array); $i++){
                        
$continue_flag 0;
                        for(
$j=0$j<count($ignore); $j++){
                                if(
substr($file_array[$i],0,strlen($ignore[$j])) == $ignore[$j]) $continue_flag 1;
                        }
                        if(
$continue_flag == 1) continue;
                        
$occurences += count(explode($find$file_array[$i])) - 1;
                        
$file_array[$i] = str_replace($find$replace$file_array[$i]);
                }
                if(
$occurences 0$return = array($occurencesimplode(''$file_array)); else $return FALSE;
                return 
$return;
        }

/***************************************
** Function for writing out a new file.
***************************************/
        
function writeout($filename$contents){
                if(
$fp fopen($filename'w')){
                        
fwrite($fp$contents);
                        
fclose($fp);
                }else{
                        die(
'Could not open file: '.$filename);
                }
        }

/***************************************
** First do whatever files are specified,
** and/or if directories are specified,
** do those too.
***************************************/
        
$occurences 0;
        
$ignore explode(','$ignore_lines);
        if(
$find != ''){
                if(!empty(
$files)){
                        if(
ereg(','$files)) $files explode(','$files); else $files = array($files);
                        for(
$i=0;$i<count($files); $i++){
                                if(
$files[$i] == '.' OR $files[$i] == '..') continue;
                                if(
is_dir($files[$i]) == TRUE) continue;
                                
$newfile search_replace($files[$i]);
                                if(
is_array($newfile) == TRUE){
                                        
writeout($files[$i], $newfile[1]);
                                        
$occurences += $newfile[0];
                                }
                        }
                }

                if(!empty(
$directories)){
                        if(
ereg(','$directories)) $directories explode(','$directories); else $directories = array($directories);
                        for(
$i=0;$i<count($directories); $i++){
                                
$dh opendir($directories[$i]);
                                while(
$file readdir($dh)){
                                        if(
$file == '.' OR $file == '..') continue;

                                        if(
is_dir($directories[$i].$file) == TRUE AND $include_subdir == 1){
                                                
$directories[] = $directories[$i].$file.'/';
                                                continue;
                                        }elseif(
is_dir($directories[$i].$file) == TRUE){
                                                continue;
                                        }

                                        
$newfile search_replace($directories[$i].$file);
                                        if(
is_array($newfile) == TRUE){
                                                
writeout($directories[$i].$file$newfile[1]);
                                                
$occurences += $newfile[0];
                                        }
                                }
                        }
                }
        }
        echo 
'Found '.$occurences.' occurences.';
?>


Usage Example




Rate This Script





Search



This Category All Categories