Est-il possible de développer efficacement des applications PHP sur Windows qui seront déployées sur des serveurs sous Linux?

19

Est-il correct de coder PHP sur Windows et de l'héberger plus tard sur un serveur exécutant Linux? Peut-il y avoir des problèmes dans la migration d'un tel projet?

Je pense qu'il ne peut vraiment pas y avoir de problème, d'autant plus que je suis un débutant en PHP et que je n'utiliserai aucune des fonctions avancées qui peuvent être spécifiques au système d'exploitation. Cependant, je voudrais m'assurer que je n'aime vraiment pas Linux du tout.

DotNetStudent
la source
1
Une solution simple à votre problème est une machine virtuelle Linux avec Samba fonctionnant sur un hôte Windows.
treecoder
Oui, cela peut être fait, mais plusieurs choses que vous devez considérer. Vérifiez les réponses pour plus d'informations. C'est l'une des choses que les développeurs doivent faire, à cause des ressources, pas parce qu'ils l'aiment.
umlcat

Réponses:

27

Quelques conseils:

Sensibilité à la casse du système de fichiers

Si votre fichier s'appelle HelloWorld.php, ceci:

include "helloworld.php";

est légitime sur Windows et fonctionnera. Mais les noms de fichiers Linux sont sensibles à la casse, vous pouvez avoir des fichiers appelés HelloWorld.php, helloworld.php, hEllOwOrlD.phpdans le même répertoire. Vous devez donc développer sous Windows comme si vous développiez sur un système de fichiers sensible à la casse: utilisez exactement les noms de fichiers, noms de répertoire, noms d'extension corrects - .phpest également différent de .PHP.

Séparateurs de répertoires et de chemins

Sous Windows, nous disons:

include 'classes\myClass.php';

Mais sous Linux, nous dirions:

include 'classes/myClass.php';

PHP est assez intelligent pour ne pas s'en soucier, les deux séparateurs fonctionnent dans les deux systèmes. Mais vous devez être cohérent et utiliser la barre oblique (/) partout car c'est également la norme sur la plupart des systèmes. Il y a une constante prédéfinie astucieuse DIRECTORY_SEPARATORqui se traduit par la bonne, si vous voulez aller aussi loin:

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

Il en va de même pour le séparateur de chemin d'accès, qui est un point-virgule sous Windows, deux-points sinon. Donc, pour être en sécurité, vous devez faire:

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

lorsqu'il a besoin d'un séparateur de chemin. Bien que la plupart des gens pensent que PHP ne se soucie pas du séparateur que vous utilisez, c'est correct, mais il y a un hic important: les séparateurs seront ceux spécifiques au système lorsque vous demandez au système des répertoires ou des chemins. Supposons donc que vous souhaitiez faire exploser le chemin d'inclusion dans ses parties:

$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!!!

Encodage et délimiteur de fichier

Vous devez définir votre IDE pour définir le codage de fichier pour tous vos scripts sur UTF-8 au lieu de Cp *, et le délimiteur de ligne de fichier sur Unix ( "\n"au lieu de "\r\n"). Dans la plupart des cas, cela n'a pas vraiment d'importance, mais vous devez être cohérent et la meilleure façon est la méthode Unix (qui fonctionne bien sous Windows mais pas l'inverse).

yannis
la source
1
Pour les chaînes où vous pourriez rencontrer des problèmes de nouvelle ligne, PHP inclut également la constante PHP_EOL qui utilise le caractère de nouvelle ligne correct pour la plate-forme actuelle.
Jonathan Patt
5
Les gens utilisent réellement des barres obliques inverses dans leurs chemins en PHP / Windows? Même si je n'avais pas utilisé PHP sous Linux pour la première fois, j'éviterais les barres obliques inverses simplement parce qu'elles servent à échapper des choses.
cHao
2
Ne devrait-il pas s'agir de "classes \\ myClass.php"?
luiscubal
@luiscubal Oui puisque j'utilise des guillemets doubles ... Merci d'avoir repéré cela, modifié en guillemets simples.
yannis
3
La sensibilité à la casse et l'encodage de fichiers sont les deux qui me causent toujours des problèmes entre Windows / Linux.
Rangoric
6

Vous ne pouvez pas exécuter strftime()avec %edans l'environnement Windows, comme indiqué dans la page de manuel :

Tous les spécificateurs de conversion peuvent ne pas être pris en charge par votre bibliothèque C, auquel cas ils ne seront pas pris en charge par strftime () de PHP. De plus, toutes les plates-formes ne prennent pas en charge les horodatages négatifs, votre plage de dates peut donc être limitée au plus tôt à l'époque Unix. Cela signifie que% e,% T,% R et,% D (et éventuellement d'autres) - ainsi que les dates antérieures au 1er janvier 1970 - ne fonctionneront pas sur Windows, certaines distributions Linux et quelques autres systèmes d'exploitation. Pour les systèmes Windows, un aperçu complet des spécificateurs de conversion pris en charge est disponible sur » MSDN .

ilhan
la source
4

Il n'y aura aucun problème lors de l'exécution du code. Si vous modifiez les fichiers enregistrés sur Windows sous Linux, vous remarquerez peut-être que les caractères de fin de ligne peuvent être différents, mais cela ne fera rien de mal. Si cela vous dérange, configurez votre IDE / éditeur Windows pour utiliser la fin de ligne Unix.

Pierre
la source
3

Configurez-vous avec un banc d'essai Linux. Ce pourrait être un ordinateur Linux virtuel fonctionnant sous Windows, ce pourrait être un ordinateur à double démarrage, ce pourrait être le système d'un ami. Ensuite, de temps en temps (par exemple le lundi matin), transférez votre code sur le système Linux et testez-le.

Les autres réponses ont traité les principaux problèmes auxquels vous serez confronté, mais il existe de nombreux petits problèmes, comme:

  • le répertoire temporaire est dans un endroit différent
  • les autorisations de fichier et de répertoire sont différentes
  • la fonction system () change radicalement
  • Le nom d'utilisateur qu'Apache exécute en tant que modifications
  • Les choses qui fonctionnent sous Windows XP peuvent échouer sous Windows 8.

Oui, il existe des moyens de contourner soigneusement toutes ces différences, mais avez-vous pris soin d'utiliser les solutions de contournement? Bien sûr que non - vous avez codé et cela a fonctionné, donc ça doit être OK.

Ne placez rien sur un ordinateur hôte tant qu'il n'a pas été testé sur un système d'exploitation similaire.

Je n'ai aucune expérience du portage de Windows vers Linux, mais j'ai une certaine expérience du portage de Linux vers Windows et plus d'expérience du portage de Linux vers OS X. Cela peut être fait, mais les clés sont les tests, les tests et les tests.

Andy Canfield
la source
1

Même si je suis assez à l'aise sur la ligne de commande Linux et avec des outils d'édition Linux comme vim, je fais l'essentiel de mon développement PHP sur une machine Windows.

J'ai un serveur virtuel sur Internet (me coûte environ 20 $ par mois) que j'utilise comme serveur de développement, et je me connecte avec FileZilla. FileZilla télécharge les fichiers que je modifie dans un répertoire temporaire et garde une trace des sauvegardes et quand je le sauvegarde, il le remet sur le serveur de développement, et je le test à partir de là.

C'est un peu lourd, mais cela me permet de faire le développement à peu près n'importe où; en utilisant FileZilla et un simple éditeur sur une clé USB, je peux même me connecter à partir d'un autre ordinateur et apporter des modifications. Tous les tests sont toujours sur le serveur Linux, donc j'attrape tous les problèmes que j'ai pu causer - moins de surprises désagréables lorsque je jette le code sur le serveur.

Vous pouvez faire la même chose avec un compte d'hébergement bon marché (bien que, selon le type d'application que vous développez, vous puissiez rencontrer des problèmes de performances, car les comptes d'hébergement bon marché sont généralement assez sous-alimentés) et d'autres nombreuses applications FTP ont également la modification et- fonctionnalité de téléchargement.

cori
la source
1

Oui, cela peut être fait, mais plusieurs choses que vous devez considérer. Vérifiez les réponses pour plus d'informations.

C'est l'une de ces choses, parfois les développeurs doivent le faire, à cause des ressources, pas parce qu'ils l'aiment.

Vous pouvez avoir un serveur Web local (apache, cherokee, même M $), sur votre PC, et un serveur PHP installé. Et votre PC peut ne pas avoir de connexion Internet ou ne peut se connecter que pendant de courtes périodes.

Plus tard, vous pouvez mettre à jour un vrai site Web, mettre à jour votre fichier sur le vrai serveur, avec des outils ftp, avec le même PC ou un autre PC, connecté à Internet.

umlcat
la source
0

Comme la plupart des gens l'ont dit, il ne devrait vraiment pas y avoir de problèmes. Cela dit, VirtualBox facilite la mise en place d'une machine virtuelle Linux sur laquelle vous pouvez tester votre base de code pour vous assurer qu'elle fonctionne dans l'environnement de production sans avoir cet environnement de production à portée de main.

Wyatt Barnett
la source