Lors de la mise à jour d’un site vers PHP 7.4, je suis tombé sur cette erreur :

preg_match(): Compilation failed: invalid range in character class at offset 20 session.php on line 278

Depuis PHP 7.3, le moteur PCRE – qui est responsable de la gestion des expressions régulières – a été migré vers PCRE2.

Or, il s’avère que PCRE2 est plus strict dans la validation des pattern et c’est la raison pour laquelle, après la mise à jour de PHP, certaines expressions régulières ne peuvent plus être compilées correctement.

Voici un exemple d’expression régulière qui fonctionnait avant PHP7.3:

preg_match('/[\w-.]+/', ''); // this will not work in PHP7.3

Voici maintenant le même exemple mais qui sera désormais valide sous PHP 7.3 et les versions ultérieures :

preg_match('/[\w\-.]+/', ''); // the hyphen needs to be escaped

Comme vous pouvez le constater dans le deuxième exemple, il faut maintenant échapper le tiret (hyphen) avec un backslash.

Une fois la modification faite, plus d’erreur à ce niveau.

Voici un mashup par Thriftshop XL qui mixe deux chansons: “In a World Gone Mad” par les Beastie Boys et “Where is My Mind?” des Pixies:

YouTube

By loading the video, you agree to YouTube's privacy policy.
Learn more

Load video

Et bien cela rend très bien !

J’utilise quotidiennement Local by Flywheel pour développer ou debugger des problèmes sur certains sites.

C’est une bonne alternative lorsque les hébergeurs ne proposent pas de site staging à leurs clients (les meilleurs hébergeurs proposent évidemment un staging, c’est la base).

L’autre jour, tournée de mises à jour suivie d’un reboot, je lance Local et patatras: il ne veut plus démarrer et visiblement reste bloqué sur une tentative de renouvellement de certificat TLS pour la machine virtuelle qui tourne sous Docker.

Si cela vous arrive, voici la marche à suivre. Il suffit de copier ces lignes d’instructions dans votre terminal. Concrètement, nous allons télécharger une nouvelle version du fichier ISO Boot2Docker et laisser le système se ré-provisionner.

Le processus implique de créer un alias (local-docker-machine) pour la machine virtuelle docker “Local by Flywheel”, et ensuite de lancer la série de commandes suivantes sur cet alias.

Voici les commandes à lancer dans le terminal:

alias local-docker-machine="/Applications/Local\ by\ Flywheel.app/Contents/Resources/extraResources/virtual-machine/vendor/docker/osx/docker-machine"
local-docker-machine stop local-by-flywheel
rm -rf ~/.docker/machine/certs
local-docker-machine create local-cert-gen
local-docker-machine start local-by-flywheel
local-docker-machine regenerate-certs -f local-by-flywheel
local-docker-machine rm -f local-cert-gen

Voici le résultat de ces commandes:

Creating CA: /Users/matt/.docker/machine/certs/ca.pem
Creating client certificate: /Users/matt/.docker/machine/certs/cert.pem
Running pre-create checks...
(local-cert-gen) No default Boot2Docker ISO found locally, downloading the latest release...
(local-cert-gen) Latest release for github.com/boot2docker/boot2docker is v19.03.5
(local-cert-gen) Downloading /Users/matt/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v19.03.5/boot2docker.iso...
(local-cert-gen) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(local-cert-gen) Copying /Users/matt/.docker/machine/cache/boot2docker.iso to /Users/matt/.docker/machine/machines/local-cert-gen/boot2docker.iso...
(local-cert-gen) Creating VirtualBox VM...
(local-cert-gen) Creating SSH key...
(local-cert-gen) Starting the VM...
(local-cert-gen) Check network to re-create if needed...
(local-cert-gen) Found a new host-only adapter: "vboxnet1"
(local-cert-gen) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: /Applications/Local by Flywheel.app/Contents/Resources/extraResources/virtual-machine/vendor/docker/osx/docker-machine env local-cert-gen
Docker machine "local-by-flywheel" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
Regenerating TLS certificates
Docker machine "local-by-flywheel" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
About to remove local-cert-gen
WARNING: This action will delete both local reference and remote instance.
Successfully removed local-cert-gen

Vous n’avez plus qu’à lancer Local by Flywheel: lancement maintenant impeccable et toutes les machines virtuelles sont bien là.