Boa parte dos sites em PHP no Brasil ainda roda em hospedagem compartilhada com cPanel, e é ali que o CRLF costuma dar as caras: editar um arquivo no Notepad do Windows e enviá-lo por FTP em modo ASCII para um servidor Linux pode alterar silenciosamente as quebras de linha no caminho, quebrando um script que funcionava perfeitamente em ambiente local.
De onde vem a divergência
Unix e macOS usam um único caractere — LF (line feed, \n). O Windows herdou de antigas teleimpressoras um par de caracteres — CRLF (carriage return + line feed, \r\n): um retorna o carro para o início da linha, o outro desce uma linha — uma imitação literal de uma máquina de escrever.
Por que isso ainda importa
- Git. Se um arquivo com CRLF entra num repositório onde os outros arquivos usam LF, o git pode mostrar "arquivo inteiro alterado" mesmo que apenas uma linha tenha sido editada — porque tecnicamente os finais de todas as linhas mudaram.
- Scripts com shebang. Um script shell Unix salvo com finais CRLF pode falhar ao executar no servidor, porque o interpretador vê um caractere
\rextra na primeira linha. - Comparação de strings no código. Uma linha lida de um arquivo CRLF pode não corresponder numa comparação com uma string LF esperada, mesmo que o texto visível pareça igual.
Como isso é tratado
O git tem uma configuração (core.autocrlf) que converte automaticamente os finais de linha no checkout/commit, mas depender da configuração local de cada colaborador é frágil. Fixar o estilo num arquivo .gitattributes versionado no próprio repositório é mais confiável, porque a regra passa a valer para todo mundo, independente do editor ou do sistema operacional de cada um.
Para que serve a conversão manual
- Corrigir um arquivo que entrou no repositório com o estilo de fim de linha errado.
- Preparar um script para um servidor Linux que foi editado num editor Windows antes do envio por FTP.
- Diagnosticar por que uma comparação de texto entre dois arquivos aparentemente idênticos mostra diferença.
Finais mistos num mesmo arquivo
Um arquivo editado em vários editores ou sistemas operacionais diferentes pode conter CRLF e LF ao mesmo tempo — parte das linhas com um estilo, parte com outro. Esse é o caso mais traiçoeiro: a conversão "para LF" à primeira vista não muda nada nas linhas que já tinham LF, mas é importante aplicar a transformação a todo o arquivo, não apenas às linhas visivelmente "suspeitas", senão o problema permanece escondido.