Ma logithèque pour développer en PHP sous Windows

Suite à la lecture du billet de Nicolas Hachet intitulé "Quels outils pour développer en PHP sous Windows ?", j'ai eu envie de faire, moi aussi, le tour de mon environnement de développement.

 

Stack

WampServer

Je vous l'accorde, rien de bien original. À mes débuts, j'installais Apache, MySQL et PHP l'un après l'autre mais je trouvais ça fastidieux. Surtout qu'à cette époque (début des années 2000), il m'arrivait bien souvent de réinstaller Windows. Par la suite, j'ai découvert EasyPhp que j'ai utilisé pendant un certain temps. Je ne me souviens plus de la raison qui m'a poussé à tester WampServer à l'époque mais en tout cas, je ne suis jamais revenu en arrière. Apache, MySQL et PHP installés et prêts à l'emploi en moins de 10 minutes, que demander de plus ? Simple et efficace.

 

Programmation

Cmder

Je vous l'avais déjà présenté en mars 2015. Elle reste ma Console de prédiléction bien que j'ai tendance à utiliser de plus en plus celle intégrée à Visual Studio Code.

 

Visual Studio Code

Visual Studio Code est mon nouvel IDE de coeur. Après des années sur Netbeans, j'ai enfin trouvé un IDE puissant et eye-candy. Netbeans est puissant lui aussi, mais je me suis lassé de son interface old-school ! Cerise sur le gâteau, Visual Studio Code est beaucoup moins gourmand en ressources que Netbeans.

 

Notepad2

Beaucoup utilise Notepad++ pour l'édition rapide de script. Personnellement, j'ai choisi Notepad2 qui est, certes vieillissant et non maintenu depuis 2012, mais qui n'en reste pas moins une solution hyper légère. En plus, il est "livré" avec TortoiseGit alors pourquoi s'en priver. J'ai bien essayé de passer à Notepad++, mais je le trouve beaucoup trop "lourd" pour de l'édition simple et rapide.

 

TortoiseGIT

Je suis un grand fan du système de gestion de versions Git. TortoiseGit permet (entre autre) d'afficher l'état d'un fichier par superposition d'icône dans l'explorateur de fichier de Windows et y ajoute également un menu contextuel pour Git. Bref, un must-have pour les utilisateurs de Git.

 

Base de données

MySQL Workbench

Pendant de nombreuses années, je me suis contenté de PHPMyAdmin. Je le trouvais cependant trop peu ergonomique et trop peu pratique. MySQL Workbench me semble plus adapté et permet de faire énormément de chose, de la simple requête au reverse engineering d'une base de données. Bref, l'essayer c'est l'adopter.

 

SQL Server Management Studio

Rapide raccourci qui risque d'en faire hurler plus d'un ^^ : SQL Server Management Studio est le MySQL Workbench pour SQL Server.

 

Accès distants

Windows Connexion Bureau à distance

Pour le coup, j'utilise l'application native de Windows pour la prise en main à distance de Windows Server. Elle fait le job donc...

 

Filezilla

Inutile d'entrer dans les détails, je pense que tout le monde connaît l'indétrônable client FTP ? Je utilise FileZilla depuis toujours.

 

Navigation et test

Edge, Firefox, Chrome

Edge en première position ? Non, ce n'est pas une erreur. Pendant de longues années, je n'utilisais que Firefox pour la navigation et le développement. A la sortie de Windows 10, j'ai commencé à utiliser Edge sporadiquement car je le trouvais plus rapide et plus eye-candy. Petit à petit, Edge est devenu mon navigateur par défaut. Je continue cependant à utiliser Firefox en navigateur secondaire. Quant à Chrome, je ne l'utilise qu'à des fins de test. En effet, je n'ai jamais aimé ce navigateur. Les goûts et les couleurs... De temps en temps, j'utilise également Vivaldi mais c'est relativement rare.

 

Bureautique et organisation

Microsoft Office 2013

Ne nous leurrons pas : Microsoft Office reste LA référence en matière de suite bureautique. Si dans un cadre privé je recommande chaudement LibreOffice, j'avoue que dans un cadre professionnel, je ne pourrais pas me passer de la suite de Microsoft.

 

OneNote

OneNote est la pierre angulaire de mon organisation. Il m'est réellement indispensable. J'utilise énormément cet outil pour prendre des notes pendant mes développements. Synchronisé automatiquement sur tous mes postes, je retrouve mes notes sur tous mes appareils. Il me permet de structurer mes idées. C'est un outil que j'utilise également à titre personnel. D'ailleurs, la plupart des billets que vous lirez sur ce blog sont initialement rédigés dans OneNote. C'est d'ailleurs mon principal frein à un retour sur GNU/Linux...

 

Redmine

Redmine est un bug-tracker complet et relativement user-friendly. J'en avais tester quelques autres avant d'opter pour cet outil mais je ne les trouvais pas très accessibles aux utilisateurs non informaticiens. Après quelques années d'utilisation, je ne peux que vous recommander chaudement cet outil.

 

Conclusion

Ces différents outils sont ce que je pourrais appeler "mes indispensables". D'ailleurs, si je compare ma logithèque actuel à celle que je vous présentais en octobre 2015, je constate que mise à part mon passage de Netbeans à Visual Studio Code, j'utilise toujours les mêmes outils. :)

Windows Server 2012 : mise à jour d'Apache, Php et des drivers SQL Server

Depuis peu, je découvre les joies (ironie inside) de la maintenance des outils Apache, Php et MySQL sur Windows Server 2012. Si sur Linux il suffit d'une petite ligne de commande pour maintenir ces services à jour, sur Windows, ce n'est pas la même histoire. Comme vous le constaterez par vous-même, ce n'est pas bien compliqué. Ce billet est donc plus un pense-bête qu'un How-To à proprement parler.

Attention, avant toute opération de mise à jour, il convient de jeter un petit coup d'œil aux ChangeLogs des différents outils pour vérifier que leurs mises à niveau ne vont pas "casser" vos sites web.

 

Apache 2.4.20 vers 2.4.25

Personnellement, j'ai fait le choix d'ApacheLounge pour mon environnement Windows Server 2012. ApacheLounge fourni les binaires Apache à jour pour environnement Windows.

Cet exemple repose sur la mise à jour d'Apache 2.4.20 vers la version 2.4.25. Pour un saut de version (ex. Apache 2.2 vers 2.4), consultez la documentation dédiée sur le site d'Apache.

La mise à jour, bien que très simple à réaliser, est tout de même plus "lourde" qu'un simple sudo apt update && sudo apt upgrade.

Pour mettre à jour Apache, il vous faut :

  1. Télécharger le fichier .zip de la dernière version d'Apache sur le site  ApacheLounge
  2. Renommer le répertoire de votre version d'origine (ex. Apache24_old). Ce sera votre sauvegarde.
  3. Dézipper la version téléchargée d'Apache en conservant le nom du répertoire d'origine (ex. Apache24)
  4. Copier les fichiers de conf et les composants additionnels dont vous avez besoin du répertoire sauvegardé (Apache24_old) et coller-les dans le répertoire Apache24.

Je vous recommande de conserver votre répertoire Apache24_old jusqu'à la prochaine mise à jour. Juste au cas où...

Et le tour est joué. :)

Source : https://www.apachelounge.com/viewtopic.php?t=5768

 

Php 7.0.7 vers 7.1.6

Tout comme pour Apache, la mise à jour de Php est relativement aisée. Pour ce faire :

  1. Téléchargez la dernière version de Php qui convient à votre architecture (x86 pour les OS 32bits / x64 pour les OS 64 bits). Si vous utilisez un serveur Apache, tournez vous vers la version TS (Thread Safe). Si vous utilisez IIS, optez pour la version NTS (Non Thread Safe). Dans mon cas, je pars donc sur la version 7.1.6 VC14 x64.
  2. Renommer le répertoire de votre version d'origine (ex. php7.0). Cela sera votre sauvegarde.
  3. Dézipper la dernière version de Php en conservant le nom du répertoire d'origine (ex. php). Cela évitera d'avoir à redéfinir les variables d'environnement.
  4. Copiez les fichiers de conf et les extensions additionnelles dont vous avez besoin du répertoire sauvegardé php7.0 et collez-les dans le répertoire php.

Tout comme pour Apache, je vous conseille de conserver votre répertoire php7.0 qui vous permettra de rebasculer sur cette version de Php en cas de pépins.

Et le tour est joué. ^^

 

Drivers SQL Server pour Php

Avant toute chose, il vous faudra télécharger et installer Microsoft ODBC Driver for SQL Server. La version à télécharger dépend de la version de votre serveur. Pour ma part, j'ai installé la version 11.

Les drivers SQL Server pour Php 7.1.x sont disponibles sur GitHub, projet msphpsql.

Dézippez et copiez les fichiers php_pdo_sqlsrv_71_ts.dll et php_sqlsrv_71_ts.dll et collez-les dans le répertoire php/ext/

Modifiez ensuite le fichier php.ini en ajoutant les lignes suivantes à la fin de la liste des extensions :

extension=php_sqlsrv_71_ts.dll
extension=php_pdo_sqlsrv_71_ts.dll

 

Redémarrez votre serveur Apache.

Et le tour est joué ! ^^

 

MySQL 5.6.34 vers 5.7.18.1

Bon, sur ce coup-là, j'avoue avoir tout foiré... d'où l'absence de MySQL dans le titre. Finalement, j'ai dû me résoudre à réinstaller totalement MySQL Server via MySQL Installer. :( D'où l'importance des sauvegardes des bases de données. :P

MySQL : Autoriser/Forcer id=0 pour les PRIMARY KEY avec AUTO_INCREMENT

Dans le cadre de la migration des données d'une structure de base à une autre, j'ai été confronté à un petit problème. En effet, dans l'ancienne version de la BDD, certaines tables de paramètres ont un id démarrant à 0 au lieu de 1.

Exemple :

Table "civilite"
Id Valeur
0 Non communiqué
1 Féminin
2 Masculin

 

Or, lorsque je lance la requête :

INSERT INTO `civilite_new` (`civilite_new_id`, `civilite_new_label`)
SELECT `civilite_id`, `civilite_label` FROM `civilite`;

MySQL me retourne l'erreur suivante :

Error Code: 1062. Duplicate entry '1' for key 'PRIMARY'

L'AUTO_INCREMENT prend la première ligne (Id = 0) et force l'Id à 1. Du coup, lors du traitement de la deuxième ligne, MySQL bloque car la valeur de l'Id de cette dernière est également 1. Partant de ce constat, deux solutions sont possibles :

  • ré-incrémenter toutes les tables en décalant les id (on aurait donc 1, 2, 3 à la place de 0, 1, 2) - Attention aux intégrités référentielles
  • forcer la valeur 0 du premier Id - pas très "propre" mais efficace

Dans mon cas, la première solution ne me convient pas car le code de l'application qui alimente cette base de données repose sur le principe de Id = 0 pour "Non communiqué".

Donc, pour forcer la mise à 0 des premiers Id, il va donc falloir user du mode SQL NO_AUTO_VALUE_ON_ZERO :

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';

Ajoutez la ligne ci-dessus avant votre INSERT ou UPDATE.

Une fois vos requêtes exécutées, n'oubliez pas de désactiver le mode "NO_AUTO_VALUE_ON_ZERO" :

SET SQL_MODE=@OLD_SQL_MODE;

Et le tour est joué ! ^^

MySQL : Désactiver temporairement les contraintes référentielles

Actuellement, je travaille sur un script PHP de migration de données d'une structure de base de données à une autre. L'ancienne structure était composée de table au format MyISAM sans contraintes référentielles (vu que ce format ne gère pas la déclaration de FOREIGN KEY). La nouvelle structure, quant à elle, est composée de table au format InnoDB où les intégrités référentielles sont déclarées.

Le problème avec ces contraintes référentielles, c'est que mon script de migration bloque dès qu'une de ces contraintes n'est pas respectée. Je vous l'accorde, ce n'est pas un problème en soi puisque c'est justement le but lorsqu'on déclare les intégrités référentielles : vérifier la cohérence du contenu de la base de données.

Une fois que le script m'a renvoyé l'erreur, je le corrige et il me faut alors vider la table impactée afin de le relancer et vérifier que le problème est bien résolu. Si je tente un TRUNCATE ou un DELETE FROM sur ma table, MySQL me renvoie alors l'erreur suivante :

Error Code: 1701 Cannot truncate a table referenced in a foreign key constraint (...)

Bien. MySQL vérifie donc correctement les contraintes. Cependant, il faut bien que je vide ma table pour relancer mon script. Pour pallier à ce problème, il suffit donc de suspendre le contrôle des contraintes temporairement (le temps de la requête en fait) :

SET FOREIGN_KEY_CHECKS=0;
DELETE FROM bdd.table;     -- ou autre(s) requête(s)
SET FOREIGN_KEY_CHECKS=1;

Et le tour est joué ! ^^