Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.
Aktivasyon mailiniz gelmediyse buraya tıklayın.
09, 2008, 03:09:15 am
42744 Mesaj 8090 Konu Gönderen: 17931 Üye
Son üye: medist
Turk-Php.Com Forum  |  Yardım Forumları  |  PHP Yardım Forumu  |  PHP Class Deposu  |  Dosyadan metin arama (Sınıf) « önceki sonraki »
Sayfa: [1] Yazdır
Yazan Konu: Dosyadan metin arama (Sınıf)  (Okunma Sayısı 238 defa)
phparmy
phparmy
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 371


Elektronik imzam.


Üyelik Bilgileri
Dosyadan metin arama (Sınıf)
« : 14, 2008, 04:20:47 am »

Sınıf
Kod:
<?php
/**
* Class : TextSearch
*
* @author  :  MA Razzaque Rupom <rupom_315@yahoo.com>, <rupom.bd@gmail.com>
*             Moderator, phpResource Group(http://groups.yahoo.com/group/phpresource/)
*             URL: http://rupom.wordpress.com 
*        
* @version :  1.0
* Date     :  06/25/2006
* Purpose  :  Searching and replacing text within files of specified path
*/

class TextSearch
{  
 var $extensions         = array();
 var $searchKey          '';  
 var $replacementKey     '';
 var $caseSensitive      0//by default case sensitivity is OFF
 var $findAllExts        1//by default all extensions
 var $isReplacingEnabled 0;
 var $logString          '';
 var $errorText          '';
 var $totalFound         0//total matches
 
   
/** 
   *   Sets extensions to look
   *   @param Array extensions
   *   @return none
   */   
   
function setExtensions($extensions = array())
   {
      
$this->extensions $extensions;
      
      if(
sizeof($this->extensions))
      {
         
$this->findAllExts 0//not all extensions
      
}
   }
//End of Method

   /** 
   * Adds a search extension
   * @param  file extension
   * @return none
   */   
   
function addExtension($extension)
   {
      
      
array_push($this->extensions$extension);      
      
$this->findAllExts 0//not all extensions 
      
   
}//End of function

  
   /** 
   * Sets search key and case sensitivity
   * @param search key, case sensitivity
   * @return none
   */   
   
function setSearchKey($searchKey$caseSensitive 0)
   {
      
$this->searchKey $searchKey;
      
      if(
$caseSensitivity)
      {
         
$this->caseSensitive 1//yeah, case sensitive
      
}
   }
//End of function

   /** 
   *   Sets key to replace searchKey with
   *   @param : replacement key
   *   @return none
   */   
   
function setReplacementKey($replacementKey)
   {
   
      
$this->replacementKey     $replacementKey;
      
$this->isReplacingEnabled 1;   
   
   }
//End of function
   
   /**
   * Wrapper function around function findDirFiles()
   * @param $path to search
   * @return none
   */
   
function startSearching($path)
   {
      
$this->findDirFiles($path);      
   }
//EO Method
   
   /** 
   * Recursively traverses files of a specified path 
   * @param  path to execute
   * @return  none
   */   
   
function findDirFiles($path)
   {
      
$dir opendir ($path);
      
      while (
$file readdir ($dir)) 
      {
         if ((
$file == ".") or ($file == ".."))
         {
            continue;
         }                
     
     if (filetype ("$path/$file") == "dir")
     {      
            
$this->findDirFiles("$path/$file"); //recursive traversing here
         
}                         
 elseif($this->matchedExtension($file)) //checks extension if we need to search this file
 {     
           if(
filesize("$path/$file"))
           {
               
$this->searchFileData("$path/$file"); //search file data           
           
}   
         }               
 
      } 
//End of while
      
      
closedir($dir);
         
   }
//EO Method

   /** 
   * Finds extension of a file
   * @param filename
   * @return file extension
   */
   
function findExtension($file)
   {
   return array_pop(explode(".",$file));
   }
//End of function
   
   /**
   * Checks if a file extension is one the extensions we are going to search 
   * @param filename
   * @return true in success, false otherwise
   */   
   
function matchedExtension($file)
   {   
      if(
$this->findAllExts//checks if all extensions are to be searched
      
{
         return 
true;
      }      
      elseif(
sizeof(array_keys($this->extensions$this->findExtension($file)))==1)
      {
         return 
true;
      }
      
      return 
false;
   
   }
//EO Method
   
   /**
   * Searches data, replaces (if enabled) with given key, prepares log 
   * @param $file
   * @return none
   */
   
function searchFileData($file)
   {
      
$searchKey  preg_quote($this->searchKey);
      
      if(
$this->caseSensitive)
      {
         
$pattern    "/$searchKey/U";
      }
      else
      {
      
 $pattern    "/$searchKey/Ui";
      }
      
      
$subject       file_get_contents($file);
            
      
$found 0;
            
      
$found preg_match_all($pattern$subject$matchesPREG_PATTERN_ORDER);            
      
      
$this->totalFound +=$found;
                  
      if(
$found)
      {
      
 $foundStr "Found in $found places";
         
$this->appendToLog($file$foundStr);
      }
      
       
      if(
$this->isReplacingEnabled && $this->replacementKey && $found)
      {           
         
$outputStr preg_replace($pattern$this->replacementKey$subject);                              
         
$foundStr "Found in $found places";
         
$this->writeToFile($file$outputStr);
         
$this->appendToLog($file$foundStr$this->replacementKey);
        
      }
      elseif(
$this->isReplacingEnabled && $this->replacementKey == '')
      {
         
$this->errorText .= "Replacement Text is not defined\n";
         
$this->appendToLog($file"Replacement Text is not defined"$this->replacementKey);
      }
      elseif(!
found)
      {
         
$this->appendToLog($file"No matching Found"$this->replacementKey);
      }
      
   }
//EO Method
   
   /**
   * Writes new data (after the replacement) to file
   * @param $file, $data
   * @return none
   */
   
function writeToFile($file$data)
   {           
      if(
is_writable($file))
      {
         
$fp fopen($file"w");
         
fwrite($fp$data);
         
fclose($fp);
      }
      else
      {
         
$this->errorText .= "Can not replace text. File $file is not writable. \nPlease make it writable\n";
      }
      
   }
//EO Method

   /**
   * Appends log data to previous log data
   * @param filename, match string, replacement key if any
   * @return none
   */   
   
function appendToLog($file$matchStr$replacementKey null)
   {
   
  if($this->logString == '')
   
  {
   
     $this->logString " --- Searching for '".$this->searchKey."' --- \n";
   
  } 
      
      if(
$replacementKey == null)
      {
         
$this->logString .= "Searching File $file : " $matchStr."\n";       
      }
      else
      {
         
$this->logString .= "Searching File $file : " $matchStr.". Replaced by '$replacementKey'\n";       
      }
      
   }
//EO Method
   
   /**
   * Shows Log
   * @param none
   * @return none
   */
   
function showLog()
   {
      
$this->dBug("------ Total ".$this->totalFound." Matches Found -----");
      
$this->dBug(nl2br($this->logString));              
      
      if(
$this->errorText!='')
      {
      
 $this->dBug("------Error-----");
         
$this->dBug(nl2br($this->errorText));     
      }
   }
//EO Method
   
   /**
   * Writes log to file
   * @param log filename
   * @return none
   */
   
function writeLogToFile($file)
   {      
      
$fp fopen($file"wb") OR die("Can not open file <b>$file</b>");            
      
fwrite($fp$this->logString);
      
fwrite($fp"\n------ Total ".$this->totalFound." Matches Found -----\n");
      if(
$this->errorText!='')
      {
         
fwrite($fp"\n------Error-----\n");     
         
fwrite($fp$this->errorText);
      }
      
      
fclose($fp);      
   }
//EO Method
   
   /**
   * Dumps data
   * @param data to be dumped
   * @return none
   */
   
function dBug($dump)
   {
      echo 
"<pre>";
      
print_r($dump);
      echo 
"</pre>";  
   }
//EO Method
   
//End of class

?>


Kullanım
Kod:
<?php
$path 
"a"//setting search path
//$logFile = "/projects/rupom/test_search/searchResult.txt"; //setting log file
$aranan='Aradığım metin'
$replace='değiştirlecek veri ';
//$aranan='<TR><TH COLSPAN="3" ALIGN="center" >PHP Manual</TH></TR>';
//$replace='<TR><TH COLSPAN="3" ALIGN="center" >PHP Manual</TH></TR><TR><TD COLSPAN="3" ALIGN="center">SELAM</TD></TR>';
$obj = new TextSearch();
$obj->setExtensions(array('html')); //setting extensions to search files within
//$obj->addExtension('php');//adding an extension to search within
$obj->setSearchKey($aranan);
$obj->setReplacementKey($replace);//setting replacement text if you want to replace matches with that
$obj->startSearching($path);//starting search
//$obj->showLog();//showing log
//$obj->writeLogToFile($logFile); //writting result to log file
?>


Yukarıdakı kullanımda Find and Replace işlemi yapılmıştır.
Logged
Sayfa: [1] Yazdır 
« önceki sonraki »
Gitmek istediğiniz yer:  


Turk-Php.Com Forum | SMF Forum Software © 2005, Simple Machines LLC. All Rights Reserved.