¿Es posible desarrollar efectivamente aplicaciones PHP en Windows que se implementarán en servidores que ejecutan Linux?

19

¿Está bien codificar PHP en Windows y alojarlo más tarde en un servidor con Linux? ¿Puede haber algún problema en la migración de tal proyecto?

Creo que realmente no puede haber ningún problema, especialmente porque soy un principiante en PHP y no usaré ninguna de las funciones avanzadas que pueden ser específicas del sistema operativo. Sin embargo, me gustaría asegurarme ya que realmente no me gusta Linux en absoluto.

DotNetStudent
fuente
1
La solución simple a su problema es una máquina virtual Linux con Samba ejecutándose en un host de Windows.
treecoder
Sí, se puede hacer, pero hay varias cosas que debes considerar. Verifique las respuestas para más información. Es una de esas cosas que los desarrolladores tienen que hacer, debido a los recursos, no porque les guste.
umlcat el

Respuestas:

27

Algunos punteros:

Sistema de archivos de mayúsculas y minúsculas

Si su archivo se llama HelloWorld.php esto:

include "helloworld.php";

es legítimo en Windows y funcionará. Sin embargo, los nombres de archivos de Linux son mayúsculas y minúsculas, puede tener archivos llamados HelloWorld.php, helloworld.php, hEllOwOrlD.phpen el mismo directorio. Por lo tanto, debe desarrollar en Windows como si estuviera desarrollando un sistema de archivos sensible a mayúsculas y minúsculas: usar exactamente los nombres de archivo correctos, nombres de directorio, nombres de extensión, .phptambién es diferente de .PHP.

Separadores de directorio y ruta

En Windows decimos:

include 'classes\myClass.php';

Pero en Linux diríamos:

include 'classes/myClass.php';

PHP es lo suficientemente inteligente como para no importarle, ambos separadores funcionan en ambos sistemas. Pero debe ser coherente e ir con la barra diagonal (/) en todas partes, ya que también es la norma en la mayoría de los sistemas. Hay una ingeniosa constante predefinida DIRECTORY_SEPARATOR que se traduce en la correcta, si quieres llegar tan lejos:

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

Lo mismo ocurre con el separador de ruta, que es punto y coma en Windows, dos puntos de lo contrario. Entonces, para estar seguro, debes hacer:

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

cuando se necesita un separador de ruta. Aunque la mayoría de la gente piensa que dado que a PHP no le importa qué separador usa, está bien, pero hay un inconveniente importante: los separadores serán los específicos del sistema cuando le solicite directorios o rutas. Entonces, digamos que desea explotar la ruta de inclusión en sus 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!!!

Codificación de archivo y delimitador

Debe configurar su IDE para establecer la codificación de archivos para todos sus scripts en UTF-8 en lugar de Cp *, y el delimitador de línea de archivo en Unix (en "\n"lugar de "\r\n"). En la mayoría de los casos, realmente no importará, pero debe ser coherente y la mejor manera es la forma Unix (que funciona bien en Windows pero no al revés).

Yannis
fuente
1
Para las cadenas en las que puede encontrarse con problemas de nueva línea, PHP también incluye la constante PHP_EOL que utiliza el carácter de nueva línea correcto para la plataforma actual.
Jonathan Patt
55
¿La gente usa barras invertidas en sus rutas en PHP / Windows? Incluso si no hubiera usado PHP por primera vez en Linux, evitaría las barras invertidas solo porque son para escapar de cosas.
cHao
2
¿No debería ser "classes \\ myClass.php"?
luiscubal
@luiscubal Sí, ya que estoy usando comillas dobles ... Gracias por decir eso, editado entre comillas simples.
Yannis
3
La sensibilidad a mayúsculas y la codificación de archivos son las dos que siempre me causan problemas entre Windows / Linux.
Rangoric
6

No se puede ejecutar strftime()con %een entorno Windows, como se señala en la página del manual :

No todos los especificadores de conversión pueden ser compatibles con su biblioteca C, en cuyo caso no serán compatibles con strftime () de PHP. Además, no todas las plataformas admiten marcas de tiempo negativas, por lo que su rango de fechas puede estar limitado a no antes de la época de Unix. Esto significa que% e,% T,% R y% D (y posiblemente otros), así como las fechas anteriores al 1 de enero de 1970, no funcionarán en Windows, algunas distribuciones de Linux y algunos otros sistemas operativos. Para sistemas Windows, se puede encontrar una descripción completa de los especificadores de conversión compatibles en » MSDN .

ilhan
fuente
4

No habrá problemas al ejecutar el código. Si edita los archivos guardados en Windows en Linux, puede notar que los caracteres de final de línea pueden ser diferentes, pero no dañará nada. Si le molesta, configure su IDE / editor de Windows para usar el final de línea de Unix.

Pierre
fuente
3

Prepárese con un banco de pruebas de Linux. Podría ser una computadora Linux virtual con Windows, podría ser una computadora de arranque dual, podría ser el sistema de un amigo. Luego, de vez en cuando (por ejemplo, los lunes por la mañana), transfiera su código al sistema Linux y pruébelo.

Las otras respuestas manejaron los problemas principales que enfrentará, pero hay numerosos problemas menores, como:

  • el directorio temporal está en un lugar diferente
  • los permisos de archivo y directorio son diferentes
  • la función system () cambia radicalmente
  • El nombre de usuario que Apache ejecuta como cambios
  • Las cosas que funcionan en Windows XP pueden fallar en Windows 8.

Sí, hay formas de evitar cuidadosamente todas estas diferencias, pero ¿tuvo cuidado de usar las soluciones? Por supuesto que no: codificó y se ejecutó, por lo que debe estar bien.

No coloque nada en una computadora host hasta que se haya probado en un sistema operativo similar.

No tengo experiencia en portar de Windows a Linux, pero tengo algo de experiencia en portar de Linux a Windows y más experiencia en portar de Linux a OS X. Se puede hacer, pero la clave es probar, probar y probar.

Andy Canfield
fuente
1

Aunque estoy bastante cómodo con la línea de comandos de Linux y con herramientas de edición de Linux como vim, hago la mayor parte de mi desarrollo de PHP en una máquina Windows.

Tengo un servidor virtual en Internet (me cuesta alrededor de $ 20 al mes) que uso como servidor de desarrollo, y me conecto a él usando FileZilla. FileZilla descarga los archivos que estoy editando en un directorio temporal y realiza un seguimiento de los guardados y, cuando los guardo, los devuelve al servidor de desarrollo y los pruebo desde allí.

Es un poco engorroso, pero me permite hacer el desarrollo prácticamente en cualquier lugar; usando FileZilla y un editor simple en una memoria USB, incluso puedo conectarme desde otra computadora y hacer cambios. Todas las pruebas siempre se realizan en el servidor Linux, por lo que capto los problemas que podría haber causado de inmediato; menos sorpresas desagradables cuando lanzo el código al servidor.

Podrías hacer lo mismo con una cuenta de alojamiento barata (aunque dependiendo de qué tipo de aplicación estés desarrollando puedes tener problemas de rendimiento ya que las cuentas de alojamiento baratas suelen tener poco poder) y muchas otras aplicaciones FTP también tienen la función de edición y Subir funcionalidad.

cori
fuente
1

Sí, se puede hacer, pero hay varias cosas que debes considerar. Verifique las respuestas para más información.

Es una de esas cosas, a veces los desarrolladores tienen que hacer, debido a los recursos, no porque les guste.

Es posible que tenga un servidor web local (apache, cherokee, incluso M $) en su PC y un servidor PHP instalado. Y su PC, puede no tener una conexión a Internet, o solo puede conectarse por cortos períodos de tiempo.

Más tarde, puede actualizar un sitio web real, actualizando su archivo al servidor real, con herramientas ftp, con la misma PC u otra PC, conectada a Internet.

umlcat
fuente
0

Como la mayoría de la gente dijo, realmente no debería haber problemas. Dicho esto, VirtualBox hace que sea realmente fácil instalar una máquina virtual Linux en la que pueda probar su base de código para asegurarse de que funcione en el entorno de producción sin tener dicho entorno de producción a mano.

Wyatt Barnett
fuente