Diferenças entre hospedar PHP em Windows e Linux - PHPit
Resolvi escrever esse artigo para ajudar a esclarecer um pouco mais a diferença entre os dois tipos de hospedagem. Importante: quando me refiro a Linux, não estou falando somente dele, mas de todos os sistemas Unix-Like, como Mac OSX, FreeBSD, OpenSolaris etc.
O fato é que, como programador, é pouco provável que você seja responsável direto pela manutenção do servidor, o que torna na maioria das vezes a escolha do sistema operacional praticamente irrelevante (se levar em consideração apenas o "colocar a aplicação online"). Agora você pode estar se perguntando o seguinte: "Se não faz diferença, por que eu não posso escolher qualquer um"? A resposta mais simples e rápida é custos.
A maioria das distribuições Linux não possuem custo de licenças, ou seja, você não precisa pagar para poder utilizá-las. Isso, de certa forma, reduz os custos de quem mantém o servidor, podendo resultar em valores mais acessíveis para quem contrata os serviços (mas nem sempre). Também creio que é importante ressaltar o quesito "segurança". A probabilidade de um servidor Linux ser infectado com um vírus ou malware é muito menor do que em um servidor Windows.
Uma das primeiras coisas a notar é a questão das permissões de arquivos. No Linux o sistema de permissões é diferente do Windows. As permissões são alteradas com o comando chmod e são formadas, geralmente, por 3 números que indicam a relação com o dono do arquivo, o grupo e os outros usuários. Os arquivos podem ter permissão de escrita, leitura e execução, em qualquer combinação e a maneira como irão se comportar depende diretamente dessas permissões. Quando você executar alguns comandos específicos ou precisar manipular ou realizar leitura de arquivos, poderá esbarrar em problemas de permissão. Para entender um pouco mais, recomendo este artigo de Renato Amadeu no iMasters.
Outra coisa que também é bastante diferente no Linux e que você pode não estar acostumado é o fato do sistema de arquivos ser case-sensitive, ou seja, ele diferencia maiúsculas e minúsculas. Isso é uma das coisas mais importantes de todas, pois muitos arquivos e diretórios possuem nuances em suas letras, principalmente arquivos de classes que costumam iniciar com letras maiúsculas. Isso quer dizer que "Classe" será diferente de "classe" e pode acabar levando a um problema de arquivo não encontrado.
Também existe a diferença dos separadores de diretório. Enquanto nos sistemas Unix-like utiliza-se a barra (/) para separar os diretórios, no Windows o caractere utilizado é a contrabarra (\). É imprescindível estar atento a isso, até porque no Linux a contrabarra cumpre um papel diferente (escapar caracteres). Para resolver esse problema de maneira simples, existe uma constante pré-definida no PHP chamada DIRECTORY_SEPARATOR. Ela irá retornar o caracter de separação de diretórios adequada ao sistema operacional que está rodando a aplicação.
Relacionado a diretórios, existe também a separação de caminhos, quando você precisa especificar mais de um diretório na mesma string (/primeiro/diretorio:/segundo/diretorio). No Linux isso é feito com o caractere : e no Windows com ;. A constante que referencia esse caractere é PATH_SEPARATOR, disponível a partir do PHP 4.3.0.
Comandos enviados para o terminal no Linux são executados diretamente no bash, com o usuário que está rodando o servidor web. No Windows o comando é rodando com cmd /c seu_comando. Tenha isso em mente quando montar suas rotinas.
A quebra de linha é outro fator que muda de um sistema operacional para outro. Quando você grava arquivos de texto puro e precisa pular de uma linha a outra, pode encontrar dificuldade. No Linux a quebra de linha ocorre com LF (line feed), representada pelo caractere \n. Alguns sistemas mais antigos utilizam CR (carriage return), com o caractere \r. No Windows, isso é feito com uma combinação dos dois CR+LF, ou seja, \r\n.Também existe uma constante pré-definida para retornar a quebra de linha adequada. Chama-se PHP_EOL (end of line) e está disponível desde o PHP 5.0.2.
Se quiser saber minha recomendação para a escolha de um ambiente para hospedar sua aplicação, sugiro Linux por todos os fatos que citei. Mesmo que você queira utilizar um VPS, aprender os comandos do Linux só vão contribuir ainda mais para a sua carreira e desenvolvimento como profissional.