Aller au contenu | Aller au menu | Aller à la recherche

11 février 2020

Fichier CSV généré avec PHP: forcer Excel à reconnaître l'UTF-8

Si vous générez un fichier CSV avec PHP, par exemple:

<?php

$csv = fopen('file.csv', 'w');
fputcsv($csv, ['é', 'è', 'à']);
fclose($csv);

Le fichier sera correctement généré, comme nous pouvons le voir en ouvrant le fichier file.csv avec un éditeur de texte :

 CSV ouvert avec le bloc-note

 Toutefois, si nous ouvrons le fichier avec Excel, le support de l'UTF-8 n'est pas pris en charge :

 CSV ouvert avec le bloc-note

Pour résoudre ce problème, il faut ajouter le BOM suivant au début du fichier: EF BB BF

Ce qui donne :

<?php

$csv = fopen('file.csv', 'w');
fwrite($csv, "\xEF\xBB\xBF"); // Doubles quotes obligatoires !
fputcsv($csv, ['é', 'è', 'à']);
fclose($csv);

Résultat :

CSV ouvert avec le bloc-note

Quelques explications :

En Unicode, l'indicateur d'ordre des octets ou BOM (pour l'anglais byte order mark) est une donnée qui indique l'utilisation d'un encodage unicode ainsi que l'ordre des octets, généralement situé au début de certains fichiers texte. (Source: Wikipédia)

La séquence d'octets EF BB BF est utilisé comme marqueur pour indiquer que le texte est codé en UTF-8.

20 décembre 2019

Installer la dernière version de PHP sur Ubuntu pour Windows (WSL)

La dernière version de PHP n'est souvent pas disponible immédiatement dans les dépôts d'Ubuntu. Encore moins sous Ubuntu sur Windows (WSL: Windows Subsytem for Linux) où la version installée est souvent la version LTS (Long Term Support).

Pour installer la dernière version de PHP, il faut passer par le dépôt ondrej/php.

Ajout automatique du dépôt

Rien de compliqué, exécutons simplement la commande suivante:

$ sudo add-apt-repository ppa:ondrej/php

Si le dépôt s'est correctement ajouté, vous avez de la chance ! Vous pouvez vous rendre directement à la partie "Installation de PHP".

Si vous rencontrez l'erreur ci-dessous, il faut ajouter le dépôt manuellement.

Cannot add PPA: 'ppa:~ondrej/ubuntu/php'.
ERROR: '~ondrej' user or team does not exist.

Ajout manuel du dépôt

Il faut modifier le fichier /etc/apt/sources.list.

$ sudo vim /etc/apt/sources.list

Ajoutez les deux lignes suivantes à la fin du fichier:

deb http://ppa.launchpad.net/ondrej/php/ubuntu bionic main
deb-src http://ppa.launchpad.net/ondrej/php/ubuntu bionic main

Remarque: ces deux lignes sont à utiliser si vous utilisez Ubuntu 18.04 (Bionic) ou Ubuntu 18.10 LTS. Remplacez "bionic" par le nom de votre version Ubuntu. Il suffit de regarder dans les lignes déjà existantes du fichier /etc/apt/sources.list.

Sauvegardez la modification du fichier (:wq sur vim) et rafraichissez les dépôts:

$ sudo apt-get update

Encore une erreur !!

Hit:5 http://security.ubuntu.com/ubuntu bionic-security InRelease
Get:1 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease [20.8 kB]
Err:1 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4F4EA0AAE5267A6C

Pour résoudre ce problème, exécutez la commande suivante:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C

Vous remarquerez que le dernier paramètre de la commande correspond à la clé présente dans le message d'erreur (4F4EA0AAE5267A6C). Il faut donc modifier la commande en conséquence si votre message d'erreur contient une clé différente.

Si vous souhaitez plus d'informations sur ce problème, consultez cet article (en anglais): Fix apt-get update “the following signatures couldn’t be verified because the public key is not available”.

Une fois cette commande exécutée, rafraichissez une nouvelle fois les dépôts:

$ sudo apt-get update

Installation de PHP

Pour installer la dernière version de PHP (7.4 au moment où j'écris cet article), exécutez la commande suivante:

$ sudo apt-get install php7.4

Grâce au dépôt "ondrej/php", vous pouvez installer n'importe quelle version que vous souhaitez :

$ sudo apt-get install php7.3

$ sudo apt-get install php7.2

$ sudo apt-get install php7.1

Et voilà ! Vous pouvez vérifier la version de PHP avec la commande:

$ php -v

PHP 7.4.0 (cli) (built: Nov 28 2019 07:27:06) ( NTS )

9 septembre 2019

Nettoyer un site internet WordPress infecté qui redirige vers js.wiilberedmodels.com

Ces dernières semaines, des milliers de sites internet WordPress ont été infectés suite à la découverte de failles de sécurité dans des extensions WordPress. Je vous invite à lire cet article très complet (en anglais) concernant cette campagne.

Les sites WordPress infectés redirigent vers des noms de domaine malveillants, tels que :

  • greatinstagrampage.com
  • gabriellalovecats.com
  • jackielovedogs.com
  • tomorrowwillbehotmaybe.com
  • go.activeandbanflip.com
  • wiilberedmodels.com
  • developsincelock.com

Par conséquent, le site internet devient innaccessible.

Voici la procédure à suivre pour nettoyer votre site internet WordPress.

Connectez-vous à votre base de données. Si vous ne vous rappelez plus de vos identifiants, vous pouvez les retrouver dans le fichier wp-config.php à la racine de votre site internet.

Exécutez les deux requêtes suivantes :

UPDATE wp_options SET option_value = "https://www.monsiteinternet.com" WHERE option_id = 1;
UPDATE wp_posts SET post_content = REPLACE(post_content, " <script src=’https://js.wiilberedmodels.com/pystats.js?l=l&’ type=text/javascript language=javascript></script>", "");

Notes :

  • Dans la première requête, remplacez https://www.monsiteinternet.com par l'adresse de votre site internet WordPress.
  • Le nom de vos tables peuvent être différents si vous n'utilisez pas le préfixe par défaut wp_. Modifiez le nom des tables en conséquence.

Une fois ces deux requêtes exécutées, vous pouvez de nouveau vous connecter à l'espace d'administration de votre site internet (wp-admin). Connectez-vous et effectuez toutes les mises à jour (WordPress, extensions, thèmes).

 

25 juillet 2019

OVH: utiliser une version de PHP différente par sous-domaine

Sur les offres d'hébergements mutualisés OVH, il est possible de définir une version différente de PHP par sous-domaine.

Prenons par exemple l'arborescence suivante en indiquant les versions de PHP voulues:

/home
  |__ www (PHP 7.1)
  |__ sous-domaine1 (PHP 7.2)
  |__ sous-domaine2 (PHP 7.3)
  .ovhconfig

Vous devriez avoir à la racine de votre hébergement un fichier .ovhconfig qui ressemble à celui-ci:

app.engine=php
app.engine.version=7.3
http.firewall=none
environment=production
container.image=stable

Si ce n'est pas le cas, prenez cet exemple. Ce fichier reprend la configuration visible depuis votre manager OVH.

Il faut placer un fichier .ovhconfig à la racine de chaque sous-domaine en modifiant la valeur de la clé "app.engine.version" par la version de PHP voulue.

Si on reprend l'exemple précédent, il faut :

  • Placer dans le dossier www/ une copie du fichier .ovhconfig en modifiant app.engine.version=7.3 par app.engine.version=7.1
  • Placer dans le dossier sous-domaine1/ une copie du fichier .ovhconfig en modifiant app.engine.version=7.3 par app.engine.version=7.2
  • Placer dans le dossier sous-domaine2/ une copie du fichier .ovhconfig (dans notre cas sans modification car nous voulons la version 7.3)

Erreur "Not Implemented"

Si vous rencontrez une erreur "Not Implemented", rendez-vous dans la configuration de votre hébergement sur le manager OVH et choisissez la version de PHP la plus récente: