data_criacao: "30.06.2024 - 21:08"
título: "Substituir String em Arquivos"
resumo: |
  
conversa: |
  usuário:
    Você poderia fazer um arquivo php que, colocado em uma pasta, seria capaz de alterar todas as ocorrências de uma dada string para outra dada string?

  assistente:
    Claro! Vou te fornecer um exemplo de script PHP que faz exatamente isso. Este script percorre todos os arquivos em um diretório e substitui todas as ocorrências de uma string por outra string. Vamos chamar esse arquivo de `substituir_string.php`.
    
    Aqui está o código:
    
    ```php
    &lt;?php
    
    function substituirStringEmArquivos($diretorio, $stringAntiga, $stringNova) {
        if (!is_dir($diretorio)) {
            die(&quot;O diretório especificado não existe.&quot;);
        }
    
        $it = new RecursiveDirectoryIterator($diretorio, RecursiveDirectoryIterator::SKIP_DOTS);
        $it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::SELF_FIRST);
    
        foreach ($it as $arquivo) {
            if ($arquivo-&gt;isFile()) {
                $conteudo = file_get_contents($arquivo);
                if (strpos($conteudo, $stringAntiga) !== false) {
                    $conteudoAtualizado = str_replace($stringAntiga, $stringNova, $conteudo);
                    file_put_contents($arquivo, $conteudoAtualizado);
                    echo &quot;String substituída no arquivo: &quot; . $arquivo . &quot;\n&quot;;
                }
            }
        }
    }
    
    // Parâmetros: diretório, string antiga, string nova
    $diretorio = &#x27;./pasta&#x27;;
    $stringAntiga = &#x27;texto_antigo&#x27;;
    $stringNova = &#x27;texto_novo&#x27;;
    
    substituirStringEmArquivos($diretorio, $stringAntiga, $stringNova);
    
    ?&gt;
    ```
    
    ### Como usar:
    
    1. **Coloque o arquivo `substituir_string.php` no diretório onde deseja realizar a substituição.**
    2. **Edite as variáveis `$diretorio`, `$stringAntiga` e `$stringNova` com os valores desejados:**
       - `$diretorio`: Caminho para o diretório onde os arquivos estão localizados.
       - `$stringAntiga`: A string que você deseja substituir.
       - `$stringNova`: A nova string que substituirá a antiga.
    3. **Execute o script PHP no servidor ou no terminal (se você tiver o PHP instalado localmente):**
    
    ```sh
    php substituir_string.php
    ```
    
    Isso fará com que o script percorra todos os arquivos no diretório especificado e substitua todas as ocorrências da string antiga pela nova. 
    
    Caso precise de mais alguma coisa ou tenha alguma dúvida, estou à disposição!

  usuário:
    Faça com que o programa php não mude o conteúdo de arquivos cujo nome sejam subs.php

  assistente:
    Entendi, vou ajustar o script para que ele ignore arquivos com o nome `subs.php`. Aqui está o código atualizado:
    
    ```php
    &lt;?php
    
    function substituirStringEmArquivos($diretorio, $stringAntiga, $stringNova) {
        if (!is_dir($diretorio)) {
            die(&quot;O diretório especificado não existe.&quot;);
        }
    
        $it = new RecursiveDirectoryIterator($diretorio, RecursiveDirectoryIterator::SKIP_DOTS);
        $it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::SELF_FIRST);
    
        foreach ($it as $arquivo) {
            if ($arquivo-&gt;isFile() &amp;&amp; $arquivo-&gt;getFilename() !== &#x27;subs.php&#x27;) {
                $conteudo = file_get_contents($arquivo);
                if (strpos($conteudo, $stringAntiga) !== false) {
                    $conteudoAtualizado = str_replace($stringAntiga, $stringNova, $conteudo);
                    file_put_contents($arquivo, $conteudoAtualizado);
                    echo &quot;String substituída no arquivo: &quot; . $arquivo . &quot;\n&quot;;
                }
            }
        }
    }
    
    // Parâmetros: diretório, string antiga, string nova
    $diretorio = &#x27;./pasta&#x27;;
    $stringAntiga = &#x27;texto_antigo&#x27;;
    $stringNova = &#x27;texto_novo&#x27;;
    
    substituirStringEmArquivos($diretorio, $stringAntiga, $stringNova);
    
    ?&gt;
    ```
    
    ### Como usar:
    
    1. **Coloque o arquivo `substituir_string.php` no diretório onde deseja realizar a substituição.**
    2. **Edite as variáveis `$diretorio`, `$stringAntiga` e `$stringNova` com os valores desejados:**
       - `$diretorio`: Caminho para o diretório onde os arquivos estão localizados.
       - `$stringAntiga`: A string que você deseja substituir.
       - `$stringNova`: A nova string que substituirá a antiga.
    3. **Execute o script PHP no servidor ou no terminal (se você tiver o PHP instalado localmente):**
    
    ```sh
    php substituir_string.php
    ```
    
    Este script agora ignora arquivos cujo nome seja `subs.php` ao fazer a substituição de strings. Caso precise de mais alguma coisa ou tenha alguma dúvida, estou à disposição!