É possível desenvolver efetivamente aplicativos PHP no Windows que serão implantados em servidores executando Linux?

19

É bom codificar PHP no Windows e hospedá-lo posteriormente em um servidor executando Linux? Pode haver algum problema na migração de um projeto desse tipo?

Eu acho que realmente não pode haver nenhum problema, especialmente porque eu sou iniciante em PHP e não usarei nenhuma das funções avançadas que possam ser específicas do sistema operacional. No entanto, gostaria de ter certeza, já que realmente não gosto do Linux.

DotNetStudent
fonte
1
A solução simples para o seu problema é uma VM Linux com Samba em execução em um host do Windows.
treecoder
Sim, isso pode ser feito, mas você deve considerar várias coisas. Verifique as respostas para mais informações. É uma daquelas coisas que os desenvolvedores precisam fazer, devido aos recursos, não porque eles gostam.
umlcat

Respostas:

27

Algumas dicas:

Distinção entre maiúsculas e minúsculas do sistema de arquivos

Se o seu arquivo se chama HelloWorld.php, faça o seguinte:

include "helloworld.php";

é legítimo no Windows e funcionará. Mas os nomes de arquivo Linux são caso sensível, você pode ter arquivos chamados HelloWorld.php, helloworld.php, hEllOwOrlD.phpno mesmo diretório. Portanto, você deve desenvolver no Windows como se estivesse desenvolvendo um sistema de arquivos que .phpdiferencia maiúsculas de minúsculas: use exatamente os nomes de arquivos, nomes de diretórios e nomes de extensões corretos - também é diferente de .PHP.

Separadores de diretório e caminho

No Windows, dizemos:

include 'classes\myClass.php';

Mas no Linux diríamos:

include 'classes/myClass.php';

O PHP é inteligente o suficiente para não se importar, os dois separadores funcionam nos dois sistemas. Mas você deve ser consistente e usar a barra (/) em todos os lugares, pois também é a norma na maioria dos sistemas. Há uma constante bacana predefinidaDIRECTORY_SEPARATOR que se traduz na correta, se você quiser ir tão longe:

include "classes" . DIRECTORY_SEPARATOR . "myClass.php";

O mesmo vale para o separador de caminho, que é ponto-e-vírgula no Windows, caso contrário, dois pontos. Para estar seguro, você deve fazer:

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

quando precisar de um separador de caminho. Embora a maioria das pessoas pense que, como o PHP não se importa com o separador que você usa, está tudo bem, mas há um problema importante: os separadores serão os específicos do sistema quando você solicitar diretórios ou caminhos ao sistema. Então, digamos que você queira explodir o caminho de inclusão em suas partes:

$includePath = get_include_path();

$pathParts = explode(";", $includePath) // Will only work on Windows
$pathParts = explode(":", $includePath) // Will work on other systems but not Windows
$pathParts = explode(PATH_SEPARATOR, $includePath) // Will work everywhere!!!

Codificação e delimitador de arquivo

Você deve configurar seu IDE para definir a codificação de arquivo para todos os seus scripts como UTF-8 em vez de Cp * e o delimitador de linha de arquivo como Unix (em "\n"vez de "\r\n"). Na maioria dos casos, isso realmente não importa, mas você deve ser consistente e a melhor maneira é a maneira Unix (que funciona bem no Windows, mas não vice-versa).

yannis
fonte
1
Para cadeias nas quais você pode encontrar problemas de nova linha, o PHP também inclui a constante PHP_EOL, que usa o caractere de nova linha correto para a plataforma atual.
Jonathan Patt
5
As pessoas realmente usam barras invertidas em seus caminhos no PHP / Windows? Mesmo se eu não tivesse usado o PHP no Linux, evitaria barras invertidas só porque são para escapar de coisas.
cHao 12/11
2
Não deveria ser "classes \\ myClass.php"?
luiscubal
@luiscubal Sim, já que estou usando aspas duplas ... Obrigado por comentar isso, editado para aspas simples.
yannis
3
A Diferença entre maiúsculas e minúsculas e a codificação de arquivos são as duas que sempre me causam problemas entre o Windows / Linux.
Rangoric
6

Você não pode executar strftime()com %eem ambiente Windows, como é observado na página do manual :

Nem todos os especificadores de conversão podem ser suportados pela sua biblioteca C; nesse caso, eles não serão suportados pelo strftime () do PHP. Além disso, nem todas as plataformas suportam carimbos de data e hora negativos, portanto, o período pode ser limitado a não mais cedo que a época do Unix. Isso significa que% e,% T,% R e% D (e possivelmente outros) - bem como datas anteriores a 1º de janeiro de 1970 - não funcionarão no Windows, em algumas distribuições Linux e em alguns outros sistemas operacionais. Para sistemas Windows, uma visão geral completa dos especificadores de conversão suportados pode ser encontrada em » MSDN .

ilhan
fonte
4

Não haverá problemas ao executar o código. Se você editar os arquivos salvos no Windows no Linux, poderá notar que os caracteres de final de linha podem ser diferentes, mas não prejudicam nada. Se isso lhe incomoda, você configura o IDE / editor do Windows para usar o fim de linha do Unix.

Pierre
fonte
3

Prepare-se com uma plataforma de teste do Linux. Pode ser um computador Linux virtual executando no Windows, pode ser um computador de inicialização dupla, pode ser o sistema de um amigo. De vez em quando (por exemplo, nas manhãs de segunda-feira), transforme seu código no sistema Linux e teste-o.

As outras respostas trataram dos principais problemas que você enfrentará, mas existem inúmeras dicas menores, como:

  • o diretório temporário está em um local diferente
  • permissões de arquivo e diretório são diferentes
  • a função system () muda radicalmente
  • O nome de usuário que o Apache executa como alterações
  • Coisas que funcionam no Windows XP podem falhar no Windows 8.

Sim, existem maneiras de solucionar cuidadosamente todas essas diferenças, mas você teve o cuidado de usar as soluções alternativas? Claro que não - você codificou e ele funcionou, portanto deve estar OK.

Não coloque nada em um computador host até que ele tenha sido testado em um sistema operacional semelhante.

Não tenho experiência em migrar do Windows para o Linux, mas tenho alguma experiência em migrar do Linux para o Windows e mais experiência em migrar do Linux para o OS X. Isso pode ser feito, mas as chaves são testar, testar e testar.

Andy Canfield
fonte
1

Embora eu esteja bastante confortável com a linha de comando do Linux e com as ferramentas de edição do Linux, como vim, faço a maior parte do meu desenvolvimento PHP em uma máquina Windows.

Eu tenho um servidor virtual na internet (me custa cerca de US $ 20 por mês) que eu uso como servidor de desenvolvimento e me conecto a ele usando o FileZilla. O FileZilla baixa os arquivos que estou editando em um diretório temporário e monitora os salvamentos e, quando eu os salva, os lança novamente no servidor de desenvolvimento, e testo a partir daí.

É um pouco complicado, mas me permite fazer o desenvolvimento praticamente em qualquer lugar; usando o FileZilla e um editor simples em um pen drive, posso conectar-me de outro computador e fazer alterações. Como todos os testes estão sempre no servidor Linux, eu pego todos os problemas que eu possa ter causado imediatamente - menos surpresas desagradáveis ​​quando jogo o código no servidor.

Você pode fazer o mesmo com uma conta de hospedagem barata (embora, dependendo do tipo de aplicativo que está desenvolvendo, você possa ter problemas de desempenho, pois as contas de hospedagem baratas geralmente são pouco poderosas) e outros aplicativos de FTP também têm o recurso editar e funcionalidade de upload.

cori
fonte
1

Sim, isso pode ser feito, mas você deve considerar várias coisas. Verifique as respostas para mais informações.

É uma dessas coisas, às vezes os desenvolvedores precisam fazer, devido aos recursos, não porque eles gostam.

Você pode ter um servidor web local (apache, cherokee e até M $), no seu PC e servidor PHP instalado. E o seu PC pode não ter conexão com a Internet ou pode se conectar apenas por curtos períodos de tempo.

Posteriormente, você pode atualizar um site real, atualizando seu arquivo para o servidor real, com ferramentas de ftp, com o mesmo PC ou outro PC, conectado à Internet.

umlcat
fonte
0

Como a maioria das pessoas disse que realmente não deveria haver problemas. Dito isto, o VirtualBox facilita muito, realmente, a instalação de uma máquina virtual linux na qual você pode testar sua base de código para garantir que ela funcione no ambiente de produção sem ter esse ambiente de produção à mão.

Wyatt Barnett
fonte