2010-10-20 8 views
6

좋아, PHP에서 가장 좋은 해결책은 특정 문자열에 대한 파일 내용을 검색하여 다른 것으로 대체하는 것입니다.여러 파일 찾기 및 바꾸기

정확하게 notepad ++가하는 것과 똑같지 만 분명히 그 인터페이스가 필요하지는 않습니다.

답변

22
foreach (glob("path/to/files/*.txt") as $filename) 
{ 
    $file = file_get_contents($filename); 
    file_put_contents($filename, preg_replace("/regexhere/","replacement",$file)); 
} 
2

그래서 저는 최근 웹 호스트가 PHP 5.2에서 5.3으로 변환되었으며 Magento 설치가 중단 된 문제에 봉착했습니다. 나는 제안 된 몇 가지 개조를했지만 아직 깨진 부분이 있음을 발견했다. 나는 대부분의 문제가 Magento에있는 "toString"함수 및 현재 사용되지 않는 PHP 분할 함수 문제와 관련이 있다는 것을 깨달았습니다. 이것을 보면, 깨진 함수의 모든 다양한 인스턴스를 찾아서 대체 할 코드를 만들려고 결정했습니다. 나는 그 기능을 성공적으로 만들 수 있었지만, 불행히도 총 - 총 접근법은 효과가 없었습니다. 나중에 오류가 발생했습니다. 즉, 코드가 많은 잠재력을 갖고 있다고 생각하고 내가 생각한 것을 게시하고 싶었습니다.

그러나주의해서 사용하십시오. 문제가있는 경우 백업에서 복원 할 수 있도록 파일 복사본을 압축하는 것이 좋습니다.

또한 반드시 사용하지 않아도됩니다. 예를 들어 코드를 제공하고 있습니다. 교체 될 내용을 변경하고 싶을 것입니다.

코드의 작동 방식은 폴더에있는 내용과 하위 폴더의 내용을 찾아서 바꿀 수 있다는 것입니다. PHP 확장명을 가진 파일 만 찾을 수 있도록 조정 해 봤지만 필요에 따라 파일을 변경할 수 있습니다. 검색 할 때 변경되는 파일이 나열됩니다. 이 코드를 사용하려면 "ChangePHPText.php"로 저장하고 변경 사항이 필요한 곳으로 파일을 업로드하십시오. 그런 다음 해당 이름과 관련된 페이지를로드하여 실행할 수 있습니다. 예 : mywebsite.com \ ChangePHPText.php.

<?php 
    ## Function toString to invoke and split to explode 

    function FixPHPText($dir = "./"){ 
     $d = new RecursiveDirectoryIterator($dir); 
     foreach(new RecursiveIteratorIterator($d, 1) as $path){ 
      if(is_file($path) && substr($path, -3)=='php' && substr($path, -17) != 'ChangePHPText.php'){ 
       $orig_file = file_get_contents($path); 
       $new_file = str_replace("toString(", "invoke(",$orig_file); 
       $new_file = str_replace(" split(", " preg_split(",$new_file); 
       $new_file = str_replace("(split(", "(preg_split(",$new_file); 
       if($orig_file != $new_file){ 
       file_put_contents($path, $new_file); 
       echo "$path updated<br/>"; 
       } 
      } 
     } 
    } 

    echo "----------------------- PHP Text Fix START -------------------------<br/>"; 
    $start = (float) array_sum(explode(' ',microtime())); 
    echo "<br/>*************** Updating PHP Files ***************<br/>"; 
    echo "Changing all PHP containing toString to invoke and split to explode<br/>"; 
    FixPHPText("."); 

    $end = (float) array_sum(explode(' ',microtime())); 
    echo "<br/>------------------- PHP Text Fix COMPLETED in:". sprintf("%.4f", ($end-$start))." seconds ------------------<br/>"; 
    ?>