Lancer un script PHP en ligne de commande sous Windows

Comme je le disais dans mes deux derniers billets, je travaille actuellement sur des scripts de migration de données. Le problème avec ce genre de scripts qui traitent plusieurs milliers de lignes, c’est que vous êtes vite bloqué par les délais d’exécution lorsque vous les lancez via un navigateur Web.

Vous avez alors deux possibilités :

  • Fractionner le traitement des données en fixant des plages de traitement (traitement par lots)
  • Lancer votre script directement sur le serveur en ligne de commande

Fractionner le traitement est souvent fastidieux, surtout lorsqu’on doit traiter plus de 80 000 lignes.

La solution la plus simple est donc de lancer votre script directement dans une console (Invite de commandes). Pour ce faire, ouvrez une console et rendez vous dans le répertoire contenant le fichier php.exe. Si vous utilisez WampServer, le chemin par défaut est :

C:\wamp\bin\php\php5.5.12>

 

N.B. : la version de PHP varie selon votre version de wamp

Pour lancer votre script, il vous suffit d’exécuter la commande suivante :

C:\wamp\bin\php\php5.5.12>php.exe -f c:\chemin\vers\votre\script.php

 

Et le tour est joué ! ^^

Si vous exécutez souvent des commandes PHP en ligne de commandes, vous pouvez également déclarer le chemin de votre php.exe dans vos variables d’environnement du système. Cela vous évitera de devoir vous positionner dans le répertoire de php avant de lancer vos scripts. Pour plus d’informations, n’hésitez pas à consulter la documentation PHP sur php.net : Ligne de commande PHP sous Microsoft Windows

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é ! ^^

Dégooglisation : oui, mais en douceur !

Comme beaucoup, mon moteur de recherche préféré est Google. Comme beaucoup, je suis de plus en plus inquiet de la stratégie de la multinationale du même nom qui trace mes faits et gestes sur la toile. Bien entendu, je n’ai rien à cacher. Cela dit, ce n’est pas parce que je n’ai rien à cacher que je souhaite qu’une entité, quelle qu’elle soit, se prenne le droit de collecter mes données personnelles et d’en faire commerce. Voir pire.

 

Illustration confidentialité

 

Comme beaucoup, j’ai envie de reprendre le contrôle de mes données. Une fois cela dit, il faut tout de même se rendre à l’évidence : les produits Google sont tout de même fichtrement bien foutus. Ils sont simples d’accès, puissants et gratuits… même si c’est nous le produit. Mon but n’est pas de me dégoogliser d’un coup, mais de tout doucement migrer mes outils actuels vers des solutions plus saines. J’attaque donc une migration en douceur. Je commence avec les emails et mon moteur de recherche par défaut. Pour le blog, vous savez déjà ce qu’il en est.

 

Lire la suite…

La fin de blog-libre.org

Suite à un message de Christophe Gallaire sur le réseau social Diaspora*, j’ai appris la fermeture du blog : blog-libre.org. C’est facile à dire après coup mais je m’y attendais. Cyrille Borne, le maître des lieux, a décidé de mettre fin à l’aventure et, dans un sens, c’est tant mieux. Pourquoi ? Il y a quelques années, Cyrille expliquait qu’avoir un nom de domaine à son nom était un gage de pérennité car cela évitait de s’enfermer dans une ligne éditoriale, dans un thème. Bref, le nom de domaine à son nom, c’est la liberté. Force est de constaté qu’il avait (et a encore aujourd’hui) raison.

Ce que je préférais lire sur le blog-libre, c’est ce que certains appellent « Les aventures de Cyrille ». J’ai beaucoup aimé les textes de Cep, Christophe, Régis et les autres, mais la substantifique moelle du blog-libre restait les écrits de Cyrille.

Le jeune blog que j’ai lancé ici, et à mon nom, est le fruit d’une réflexion, d’une envie de partage initiée par, entre autres, les écrits de Cyrille. Ici, vous ne trouverez pas d’apologie du Libre. J’en parlerai sans aucun doute, mais ce ne sont pas ses écrits sur le Libre qui ont motivé l’ouverture de ce blog. Non, ici, je souhaite simplement partager. Partager sur tous les thèmes qui pourront m’intéresser.

Petite parenthèse concernant le Libre : je suis passé par une phase « libriste » avec le blog open-stream.fr (il n’existe plus aujourd’hui). Je m’en suis vite lassé car depuis quelques années, la communauté du « Libre » ou en tout cas la partie visible de l’iceberg, est devenue violente. Les « Libristes » intégristes se sont fortement affirmés et occupent aujourd’hui le devant de la scène. Ils en arrivent même à s’entre-déchirer. On se croirait presque dans un partie politique. Ils ne défendent plus des valeurs, mais des points de vue radicaux qui mènent parfois à une violence extrême. Une violence dans les propos, certes, mais une violence quand même. Il n’y a qu’à voir les « débats » engendrés par le système d’init « systemd ». Refermons cette parenthèse.

Pour revenir au blog-libre et à sa fermeture, comme je le disais, je n’en suis nullement étonné. Cyrille a pris sur lui ces dernières semaines mais malheureusement (ou heureusement selon le point de vue), une autre issue n’était sans doute pas envisageable. Le blog-libre est né de Cyrille Borne et ce dernier l’incarnait beaucoup trop. Pour que le blog-libre fonctionne, il aurait fallu que Cyrille garde son espace et que le blog-libre soit un outil supplémentaire/complémentaire. A mon humble avis.

J’espère simplement que Cyrille va relancer son nom de domaine car je le suis depuis de nombreuses années et j’ai toujours aimé sa plume, ses écrits. Je ne suis pas toujours d’accord avec lui, mais ce que j’aime chez Cyrille, c’est son honnêteté. Il écrit par passion et non pour convenir à un lectorat.

Bref, Cyrille, s’il vous plaît, revenez !

N.B. Au moment où je prépare la publication de ce billet, je vois que http://cyrille-borne.com/ est de retour. Ouf ! ^^

Auto-hébergement : expérience suspendue

Dans mon billet Auto-hébergement : le bon choix ?, je citais trois inconvénients à l’auto-hébergement : la sécurité, les sauvegardes et les pannes matérielles. Ce dernier inconvénient a eu raison de mon serveur fin de semaine dernière : le disque dur a rendu l’âme !

Pour ne pas laisser le blog trop longtemps hors-ligne, je me suis orienté vers un service de Gandi, mon fournisseur de nom de domaine : Simple Hosting. Il s’agit d’un service Paas (Platform as a service). Pour faire simple, vous disposez d’un environnement complet, à la carte, ou vous choisissez chaque élément de votre plateforme (pour ma part PHP + MySQL sur un pack S) et une instance vous est créée au jour, mois ou à l’année. Chaque instance est indépendante et autonome donc votre instance vous est entièrement dédiée. Par contre, contrairement à un serveur dédié, vous ne pouvez pas administrer le serveur (logique, c’est une instance, pas un serveur en tant que tel). Vous pouvez par contre administrer tous les services de votre instance.

Cette solution me convient donc parfaitement à l’heure actuelle car elle me laisse le temps de mener une réflexion sur mon prochain serveur. Vais-je réparer l’actuel ? Vais-je investir un petit peu de sous et me monter un petit serveur mieux équipé ? Vais-je finir par opter pour un dédié en ligne ? Je n’en sais rien pour le moment.

J’espère tout de même avoir le temps ces prochains jours d’aboutir ma réflexion et de rapidement revenir aux affaires. Contre toutes attentes, je pensais qu’une fois mon serveur décédé je serais soulagé de revenir à une solution gérée par un tiers. Je me rends compte que non, j’ai envie de continuer cette aventure de l’auto-hébergement. Malgré les heures passées à administrer, malgré les arrachages de cheveux, malgré les coupures intempestives… oui, malgré tout cela, je prends énormément de plaisir à gérer mes données.

Wamp : Configurer le stockage de configuration de phpMyAdmin

Note du 27/11/2014 : J’ai apporté quelques corrections à ce billet car dans la première version, je créais l’utilisateur pma avec des droits sur toutes les bases de données. Or, d’un point de vue « sécurité », il vaut mieux que l’utilisateur pma n’est de droits que sur la table phpmyadmin.

Au quotidien, j’utilise MySQL Workbench pour l’administration de mes bases MySQL. Cependant, il est toujours utile d’avoir phpMyAdmin sous la main pour certaines opérations.

Si comme moi vous avez installé WampServer, vous avez surement remarqué ce message indiquant que vos préférences ne peuvent être enregistrées tant que vous n’avez pas configuré le « stockage de configurations phpMyAdmin ».

 

Lire la suite…

Mémo : FixBoot – FixMbr : Réparer le boot de Windows Vista et 7

Lors de l’installation d’une distribution GNU/Linux en dual-boot avec Windows Vista ou Windows 7, un système d’amorçage tel que Grub ou Lilo est également installé. Mais voilà, après avoir supprimé votre distribution, le système d’amorçage de Windows est cassé. Il vous faut donc réparer ce dernier afin de pouvoir booter à nouveau directement sur le système d’exploitation.

Le plus simple, dans ce cas-là, est d’insérer votre disque Windows Vista ou 7 (à noter que vous pouvez réparer le boot d’un Windows 7 avec un CD de Windows Vista et réciproquement). Une fois que vous avez booté dessus, cliquez sur « Réparer ». Une fois votre système détecté, cliquez sur le bouton « Suivant ». La liste des options de récupérations du système s’affiche alors. Cliquez sur « Invite de commandes ».

Une fois la console ouverte, il vous suffit de taper :

Bootrec.exe/FixMbr

 

et/ou :

Bootrec.exe/FixBoot

 

Redémarrez et le tour est joué !

PDFtk : réorganisez vos PDF

Il y a peu, j’ai redécouvert un outil que j’utilisais il y a quelques années sous Linux pour réorganiser mes PDF : PDFtk – The PDF Toolkit. Cerise sur le gâteau, cet outil est publié sous licence GNU GPL.

PDFtk est multiplateformes et fonctionne donc sur les 3 principaux OS du marché. Cet outil s’utilise aussi bien en ligne de commande que via son interface graphique (sous Windows uniquement). La version « ligne de commande » s’appelle PDFtk Server. Il existe deux versions « graphiques » : PDFtk Free (gratuite mais bridée) et PDFtk Pro (payante). PDFtk Free permet tout de même d’effectuer les opérations de base : supprimer et ajouter des pages. Cependant, si vous ne souhaitez pas contribuer financièrement à la version graphique, sachez que PDFtk Server est complet et vous permet d’user de toutes les fonctionnalités de l’outil.

Je vous propose donc aujourd’hui de découvrir les fonctionnalités de base de cet outil, à savoir la suppression et l’ajout de pages à un document PDF existant.

 

Lire la suite…

Komodo Edit : un éditeur PHP puissant et quasi complet

Ce billet, initialement rédigé le 08/04/2014, n’est plus du tout d’actualité car depuis quelques mois j’utilise NetBeans. Cependant, il fait partie d’une suite de billets concernant mes outils de développement. Je le publie donc tout de même pour marquer la chronologie de mes choix.

 

Illustration code source

 

Je suis développeur Web depuis de nombreuses années. J’ai démarré, au début des années 2000, avec un petit éditeur intitulé Weaverslave. Devant l’absence de mise à jour de ce dernier, je suis ensuite passé à Notepad++. Puis, j’ai découvert Linux (ou GNU/Linux pour les puristes). Comme beaucoup, j’ai commencé par me faire la main avec Ubuntu (6.06) puis je suis passé d’une distribution à l’autre (Ubuntu, Frugalware, Debian, etc).

 

Lire la suite…