jeudi 23 mars 2017

Utiliser session_save_path sur les serveurs mutualisés d'OVH

La fonction session_save_path de Php ne fonctionne pas sur les serveurs mutualisés d'Ovh ou plutôt elle fonctionne mais son action n'est pas prise en compte.

Pour remédier à cela, la solution est toute simple mais pas vraiment documentée.
Il suffit de placer la directive suivante dans le fichier .ovhconfig de votre hébergement.

app.engine.flags=noforcetmp

mardi 7 février 2017

mPDF, une très bonne alternative à html2pdf pour produire des fichiers PDF en Php

Depuis 2013, j'ai beaucoup utilisé html2pdf pour produire des fichiers PDF à partir de mes applications Php.

Pendant longtemps je m'en suis servi pour publier des documents techniques à partir d'informations enregistrées dans des bases de données.
Puis j'ai eu un client dans le domaine de l'édition qui voulait produire des ouvrages de 300 - 400 pages avec des techniques de mise en page assez différentes de celles que j'utilisais jusqu'à présent et là j'ai dû faire face à plusieurs problèmes :

  • Le serveur de production était sous FreeBSD avec Php 5.2.17.
    Après pas mal d'efforts j'ai quand même réussi à installer html2pdf sans composer.
  • html2pdf permet bien de créer automatiquement une table des matières à la fin de l'ouvrage mais ses éléments ne sont pas cliquables.
    J'ai donc dû modifier la fonction qui génère la tables des matières pour arranger ça. Modification assez simple, sans risque d'effets de bord.
  • html2pdf n'intègre aucune balise de contrôle pour gérer les "pages impaires" (dans un livre, les chapitres doivent toujours commencer sur une page impaire).
    J'ai donc dû modifier la bibliothèque pour intégrer une nouvelle balise qui remplisse cette fonction.
  • La justification dans les paragraphes comportant du texte avec des styles différents donnait parfois des résultats très surprenants.
    Je me suis donc une fois de plus attaqué au code source de html2pdf pour corriger le problème. Au bout d'une semaine de travail tard dans la nuit, j'y suis enfin arrivé.

Après cette dernière modification, j'avais une solution qui fonctionnait vraiment bien mais j'avais eu tellement de mal à comprendre le code que j'avais un peu perdu confiance dans la bibliothèque.
Du coup, j'en ai cherché une autre qui permette elle aussi de créer des PDF en Php à partir d'un contenu en html. C'est là que j'ai découvert mPDF.

  • La version 6 de mPDF peut s'installer sans composer, ce qui n'a pas beaucoup d'importance en général mais qui me simplifiait bien la vie avec mon vieux serveur.
  • La table des matières générée par mPDF est cliquable ou plus exactement on peut dire à mPDF de générer une table des matières cliquable.
  • mPDF intègre des balises de contrôle pour gérer les pages paires/impaires et avec des subtilités bien pratiques que je n'avais pas implémentées lorsque j'avais modifié html2pdf.
  • La justification fonctionne à merveille et peut être paramétrée pour répartir les espacements entre les mots et/ou entre les caractères.
  • mPDF offre un bien meilleur support des balises html/css et (dans mon cas) est au moins deux fois plus rapide que html2pdf.
  • mPDF supporte les alphabets non latin et les langages qui s'écrivent de droite à gauche ou de bas en haut.
    C'est dans la doc mais je ne l'ai pas encore testé. J'espère que ça fonctionne car c'est important pour mon client.

Après avoir épluché le manuel et m'être laissé séduire par les fonctionnalités de cette nouvelle bibliothèque, j'ai fait quelques tests qui ont tous réussi du premier coup puis j'ai modifié mon application pour remplacer html2pdf par mpdf.
Ce dernier point m'a pris quelques heures mais depuis tout va vraiment bien et la diminution du temps de production des ouvrages est un vrai bonheur.

vendredi 6 janvier 2017

Menus et souris de Emacs quand on l'utilise à travers SSH

Quand j'ai besoin de configurer ou d'effectuer une autre intervention sur un serveur linux j'ouvre un terminal et je me connecte avec ssh.
Pour éditer des fichiers texte, j'utilise Emacs comme sur mes machines personnelles. Mais dans le terminal et à travers ssh il est difficile d'accéder aux menus de la barre supérieure et la souris ne fonctionne pas.

Accéder aux menus : M-x menu-bar-open ouvre le premier menu et on peut ensuite naviguer entre les options avec les flèches du clavier.

Activer le fonctionnement de la souris : M-x xterm-mouse-mod permet d'activer / désactiver la souris.
Cette configuration peut être enregistrée à l'aide du menu Options/Customize Emacs/All Settings Matching.
Taper par exemple xterm dans la barre de recherche puis un nouveau buffer apparaît affichant toutes les options correspondantes.
Utiliser le bouton Toggle pour changer l'état de la souris puis le bouton State et choisir l'option 1 = Save for future sessions.

samedi 18 juin 2016

CyanogenMod pour une tablette Google Nexus 7 Wifi 2012

Cela fait longtemps que j'utilise une tablette Nexus 7 version 2012 de chez Google. Je trouve que ce format reste assez pratique à transporter tout en offrant un écran assez confortable.
J'avais bien remarqué qu'elle était devenue un peu moins réactive au fil des évolutions d'Android mais j'en ai toujours été très content.

Cependant après une ultime mise à jour d'Android elle est devenue inutilisable : Extrême lenteur et surtout des plantages inopinés et très fréquents. Elle s'est mise à s'éteindre brusquement aussi bien lorsque je m'en servais que lorsqu'elle était en veille. J'ai cherché un peu et j'ai découvert que je n'étais pas le seul à rencontrer ce problème.

J'ai un peu tout essayé : Vidage des différents caches, désinstallation de certaines applications, limitation du nombre de tâches en arrière plan, réinstallation complète, etc.
Rien à faire, au bout de quelques minutes ou de quelques heures, le problème revenait.

Un peu en désespoir de cause, je l'ai déverrouillée et j'ai installé la dernière version stable disponible de CyanogenMod (12-1) avec Android 5.1.1.
C'était la première fois que je faisais ça mais tout est très bien expliqué ici et l'opération s'est déroulée sans problème.
Aussitôt ma tablette a retrouvé sa réactivité d'origine et n'a plus connu aucune panne.

J'ai attendu un peu avant de crier victoire mais cela fait maintenant deux mois que je n'ai plus aucun problème. Si toutefois ceux ci devaient réapparaître, je pense que je réinstallerai CyanogenMod avec Android 4.4 qui était la version installée d'origine.

lundi 6 juin 2016

Compiler Php pour mettre à jour une vieille distribution

Un des intérêts des logiciels Open Source c'est que l'on dispose des sources et que l'on peut donc les compiler.

Pour mes développements Php, j'utilise encore beaucoup une ancienne machine sous Debian/Lenny.
La dernière version de Php disponible dans les paquets Debian pour Lenny est la 5.2.
Il y a presque deux ans, j'expliquais comment j'avais pu installer la version 5.3 en utilisant les paquets fournis par dotdeb.

Il y a quelques mois, j'ai dû mettre à jour une nouvelle fois ce vieux serveur pour installer Php 5.5.
J'ai cherché un bon moment mais je n'ai pas trouvé de paquets disponibles pour Debian/Lenny. J'ai donc téléchargé les sources de la version 5.5.32 sur php.net et je les ai compilées.
Je n'ai rencontré aucun problème problème notable, j'ai juste dû recommencer deux ou trois fois pour installer des bibliothèques nécessaires au support de nouvelles options que je voulais installer alors que je ne les utilisais pas auparavant et depuis tout fonctionne très bien.

vendredi 6 mai 2016

Firefox 46, texte invisible dans la barre d'adresses

Je travaille le plus souvent sur une machine Ubuntu 12.10. Firefox est mon navigateur par défaut et jusqu'à la semaine dernière j'utilisais sans aucun problème la version 45.0.2 du navigateur avec l'option de mise à jour automatique activée.

Lorsque la version 46 de Firefox s'est installée, j'ai remarqué que le texte de la barre d'adresses était invisible, comme si on utilisait une police blanche sur un fond blanc.
Après quelques recherches dans le support de Mozilla, j'ai essayé de désactiver l'accélération matérielle de Firefox et aussi de passer à false la valeur de gfx.xrender.enabled (via about:config).
Ces essais n'ont rien changé, le problème était toujours là. Comme je n'avais pas vraiment le temps de chercher à en savoir plus, je suis revenu à ma dernière version stable : 45.0.2 et j'ai désactivé les mises à jour automatiques.

Hier soir, mon navigateur m'a signalé sans l'installer que la nouvelle version 46.0.1 était disponible.
J'ai effectué la mise à jour en pensant que le problème avait pu être corrigé mais non, toujours pas de texte dans la barre d'adresses.
En cherchant un peu, j'ai remarqué que le problème disparaissait lorsque j'abandonnais le thème par défaut de Firefox au profit de celui appelé Douce lumière. J'avais presque décidé de me mettre à utiliser ce nouveau thème lorsque je me suis rendu compte que si le texte de la barre d'adresses était bien visible, celui des fenêtres d'authentification http et celui de certains champs de formulaires étaient eux invisibles.
Je n'ai pas cherché à comprendre si ces problèmes que je venais de remarquer étaient liés au nouveau thème ou à la version de Firefox et je suis revenu une nouvelle fois à la version 45.0.2.

Note : A mon avis, la méthode la plus simple pour revenir à une ancienne version de Firefox est de sélectionner celle que vous souhaitez et de la télécharger à partir de http://ftp.mozilla.org/pub/firefox/

vendredi 11 mars 2016

Php, passthru une autre fonction pour exécuter des programmes externes

La méthode la plus connue lorsqu'il s'agit d'exécuter un programme externe en php est sans doute la fonction exec().
Passthru permet quelque chose de très similaire tout en envoyant directement au navigateur les sorties du programme externe exécuté.

Cela peut être très pratique et permet d'éviter des manipulations de fichiers temporaires sur le serveur, lorsque l'utilisateur doit télécharger du contenu généré de façon dynamique.
Par exemple, je m'en sers souvent pour le téléchargement de sauvegardes de bases MySQL.
Avec passthru, quelques lignes comme celles ci dessous suffisent.

<?php
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename=sauvegarde.sql');
passthru('mysqldump -host MonServeur -u Utilisateur -pMotDePasse MaBaseDeDonnees');
?>

dimanche 6 mars 2016

Html2pdf, n'oubliez pas d'utiliser composer pour installer les versions récentes

Dans un ancien article, j'indiquais que html2pdf est une très bonne solution, facile à mettre en oeuvre, pour générer des documents PDF en Php.

Il y a quelques jours, je travaillais sur une vieille application et j'en ai profité pour mettre à jour html2pdf.

Premier essai, vite fait mal fait, j'ai simplement téléchargé la dernière version et remplacé mon dossier html2pdf par celui que je venais de télécharger.
Résultat : un message d'erreur me prévient qu'il y a un problème de dépendance car tcpdf n'est pas installé.

Du coup, je creuse un peu dans ce que j'ai téléchargé, arborescence des dossiers, code source, etc et comme je ne voyais pas où installer et configurer tcpdf, j'ai fini par ouvrir le fichier LISEZMOI.md et je me suis rendu compte que les dépendances étaient gérées par composer.

Il suffisait donc :

  • De lancer php composer.phar install pour télécharger et installer correctement les dépendances.
  • De remplacer dans mon application
    require_once("include/html2pdf/html2pdf.class.php")
    par
    require_once("include/html2pdf/vendor/autoload.php")

Remarques :

lundi 25 janvier 2016

Linux, pidof pour vérifier qu'un script n'est pas en train de s'exécuter avant d'en lancer une nouvelle instance

Il arrive parfois que plusieurs instances du même programme ne doivent pas être exécutées simultanément. Par exemple pour assurer l'intégrité des ressources utilisées.
Dans ce cas, il est indispensable au démarrage du programme de vérifier qu'une autre instance n'est pas déjà en cours d'exécution.

Dans le cas de scripts bash très utiles pour automatiser certaines tâches il existe une solution simple et fiable : utiliser la commande pidof.

De façon générale la commande pidof nomprocess sert à retrouver les identifiants de tous les process portant le nom nomprocess.

Par défaut, cette commande ne prend pas en compte les scripts shell.
Pour corriger cela, il faut lui ajouter l'option -x de la façon suivante : pidof -x nomscript

Si dans le script nommé monscript j'utilise pidof -x monscript je vais bien récupérer les identifiants des éventuelles autres instances de monscript mais aussi celui de l'instance courante.
L'option -o identifiant_à_omettre permet de remédier à cela. En effet, cette option indique à pidof de ne pas retourner l'identifiant identifiant_à_omettre.
Sous bash, la variable $$ contient l'identifiant du script courant.
Donc, la commande pidof -x -o $$ monscript renvoie bien les identifiants de toutes les instances de monscript sauf celui de l'instance courante.

Pour être sûr que plusieurs instances de monscript ne soient pas exécutées en même temps, celui ci peut donc être écrit de la façon suivante :

#!/bin/bash
# dum verifie qu'il n'y a pas d'autres instances du script en cours d'execution
dum=$(pidof -x -o $$ monscript)
if test -z "$dum"
then
   actions à effectuer
fi

jeudi 24 septembre 2015

Find et wc pour calculer le nombre de lignes de code dans un projet Php

Je sors tout juste d'une longue période de refactoring d'anciennes applications Php et je me suis demandé combien de lignes de codes étaient impliquées dans certains projets.
J'ai obtenu la réponse assez facilement en combinant l'utilisation des deux commandes find et wc de la façon suivante :

find racinedemonprojet -type f -name "*.php" -exec wc -l {} \; > ~/resultat.txt

Find explore de manière récursive l'arborescence de dossiers à partir de racinedemonprojet à la recherche de tous les fichiers portant l'extension .php.
Chaque fichier trouvé est ensuite analysé par la commande wc -l qui affiche le nombre de lignes du fichier ainsi que son nom.

A la fin j'obtiens un fichier resultat.txt qui comporte autant de lignes qu'il y a de fichiers Php dans mon projet et qui indique pour chacun d'eux le nombre de lignes qu'il contient.
Il suffit donc d'ouvrir ce fichier avec un tableur et de faire la somme des valeurs de la première colonne pour connaitre le nombre total de lignes de codes Php dans le projet.

dimanche 23 août 2015

Migrer vers Php 5.4 depuis une version antérieure

On sait depuis quelques mois qu'Ovh va rendre obsolètes sur ses hébergements mutualisés toutes les versions de Php antérieures à 5.4.

Cela fait un peu plus de 15 ans que je développe des sites et des applications internet basées sur ce langage. Certaines tournent sur des serveurs locaux mais la plupart sont sur des hébergements mutualisés ou sur des VPS chez Ovh.
Pour les mutualisés on sait qu'ils passeront automatiquement à Php 5.4 en septembre.
Pour les VPS rien n'est annoncé concernant les serveurs en production mais pour les nouveaux, les distributions proposées semblent disposer au moins de Php 5.5.

Si mes scripts les plus récents sont déjà en Php 5.5, il en reste un certain nombre dans des versions antérieures et même en Php 4. Il adonc bien fallu que je me penche sérieusement sur le sujet et voici une petite liste non exhaustive des principaux changements et des choses à vérifier/corriger lorsque l'on migre vers Php 5.4 depuis une version antérieure.

  • La directive register_globals disparaît :

    A mon avis c'est le changement le plus important si vous ne l'avez pas anticipé. Il y a longtemps la valeur par défaut de register_globals était On. Avec Php 4.2 cette valeur par défaut est passée à Off mais jusqu'à la version 5.3 on pouvait encore la changer pour mettre à On. Depuis Php 5.4 cette directive disparaît et Php se comporte automatiquement comme si elle valait Off.
    Donc si malgré tous les avertissements à ce sujet vous avez encore des scripts dont les variables sont automatiquement initialisées avec les paramètres (GET ou POST) de la requête qui les appelle, ils ne vont plus fonctionner en Php 5.4.

  • Les magic_quotes disparaissent :

    Cela concerne aussi bien les magic_quotes_gpc que les magic_quotes_runtime donc pensez bien à vérifier comment sont traités les guillemets simples ou doubles dans vos données externes.

  • Attention à l'encoding des fonctions du type htmlspecialchars :

    Les principales fonctions concernées sont htmlspecialchars, htmlspecialchars_decode, html_entities, html_entity_decode, get_html_translation_table et il faut bien reconnaître que l'évolution de la valeur par défaut du paramètre optionnel encoding a de quoi prêter à confusion.

  • Obsolescence annoncée de l'extension MySQL :

    Si vous utilisez encore l'ancienne extension MySQL pour accéder à vos bases de données, il est grand temps de passer à MySQLi car MySQL est obsolète à partir de Php 5.5 et sera supprimée prochainement.

jeudi 4 juin 2015

Comment insérer plusieurs lignes d'un coup dans LibreOffice Calc

La fonction Insertion/Lignes de LibreOffice Calc ne présente pas de boîte de dialogue permettant de choisir le nombre de lignes à insérer. Ce n'est pas gênant tant que l'on se contente de rajouter une ligne de temps en temps dans une feuille de calcul mais ça devient vite fastidieux dès que l'on veut insérer plus d'une dizaine de lignes d'un coup.

La solution existe est toute simple : sélectionner autant de lignes que l'on souhaite en insérer puis utiliser Insertion/Lignes.

lundi 22 septembre 2014

Installer Php 5.3 sur une machine Debian Lenny

Le serveur que j'utilise principalement pour mes développements web est une ancienne machine sous Debian/Lenny que je n'ai jamais pris le temps de faire évoluer car elle héberge pas mal d'autres choses qu'un simple serveur web et que la migration va me demander pas mal de travail.
Jusqu'à aujourd'hui, la version de Php sur cette machine était la dernière distribuée par Debian pour Lenny : Php 5.2

Je pensais pouvoir continuer comme ça encore un moment, le temps d'installer une nouvelle machine sous un Linux plus récent et de procéder à une migration progressive des différents services. Mais comme tout ne se passe pas toujours comme on voudrait, un développement particulier et urgent m'impose d'utiliser Php 5.3.

Après quelques hésitations je suis parti à la recherche des paquets Php5.3 et de ses principales extensions (mysql, gd, imagick, etc). J'ai fini par atterrir sur dotdeb.org qui m'a paru être une source fiable.
J'y ai trouvé tous les .deb qui m'intéressaient, il ne restait qu'à les préparer pour une installation locale avec apt-get (voir le chapitre 2.2 de ce how-to).
Finalement, la mise à jour s'est déroulée sans aucun problème et ma machine Lenny exécute bien Php5.3.

Le détail des opérations que j'ai effectuées est le suivant :

Notes :

  • Si dpkg-scanpackages n'est pas présent sur votre système, vous l'obtiendrez en installant le paquet dpkg-dev.
  • Un grand, grand, grand merci à dotdeb pour ces paquets.

lundi 23 juin 2014

TheOldReader, un agrégateur pour lire vos flux RSS

Même si les réseaux sociaux sont à la mode et qu'ils offrent un côté convivial très attrayant, je trouve qu'ils ne sont pas toujours la meilleure solution pour suivre efficacement les sites qui nous intéressent et ce pour au moins deux raisons.

  • L'information intéressante est facilement noyée dans un bruit de fond qui fait souvent perdre du temps et la rend difficile à trouver. Par exemple on établit une connexion avec quelqu'un car à un moment donné il diffuse une information que l'on trouve pertinente et ensuite notre flux d'actualité est envahi par des sujets relatifs à sa vie personnelle.
  • On n'a aucun accès aux algorithmes des principaux réseaux sociaux et certains savent très bien filtrer et trier l'information qu'ils nous diffusent.

Personnellement, je suis donc un adepte convaincu et un lecteur assidu des flux RSS (ou autres) pour suivre l'actualité des blogs qui m'intéressent.
Après avoir essayé pas mal d'autres systèmes, j'utilise depuis assez longtemps TheOldReader comme agrégateur.

TheOldReader offre toutes les fonctions essentielles à ce genre d'applications  : abonnement aux flux et possibilité de créer des dossiers pour les classer par catégories, notification des articles non lus, signalement des flux inactifs, etc. L'interface web que certains trouveront peut être un peu vieillotte est simple et très efficace.

TheOldReader est accessible depuis un navigateur internet et permet également de retrouver ses flux à partir de plusieurs applications mobiles sous Android et iOs.

La version de base que j'utilise pour l'instant est gratuite et permet de suivre jusqu'à cent flux, des versions payantes sont aussi disponibles dont le principal avantage est l'augmentation du nombre d'abonnements autorisé.
Une fonction de bookmarks a récemment été ajoutée aux versions payantes qui doit permettre la mémorisation de n'importe quelle page comme le gestionnaire de favoris d'un navigateur. Si elle fonctionne comme je l'espère, je basculerai certainement vers une version payante.

mardi 6 mai 2014

DataTables, un plugin jQuery pour manipuler des tables en Javascript

Cela fait un peu plus d'un an que j'utilise DataTables dans un projet où les clients doivent manipuler de gros tableaux de données affichés dans des pages web.

DataTables est un plugin jQuery assez simple à configurer et à utiliser et qui permet d'éviter la plupart de la lourde programmation Javascript que ce type de développement peut impliquer.

Les principales fonctions de DataTables que j'utilise sont les suivantes :

  • Tri des tableaux en cliquant sur les noms des colonnes.
  • Recherche des lignes contenant des mots clés saisis dans un champ de texte.
Mais ce plugin permet bien d'autres choses comme par exemple de paginer des tableaux.

Dans sa configuration initiale, DataTables travaille uniquement en Javascript ce qui signifie que tous les traitements de données sont effectués sur le poste client. Personnellement je l'utilise avec des performances tout à fait convenables pour des tableaux contenant entre 500 et 1000 lignes de 6 ou 7 colonnes. Pour des données nettement plus lourdes, DataTables peut également être configuré pour effectuer des appels Ajax chaque fois que la table doit être redessinée permettant ainsi de déplacer la charge vers le serveur.

mardi 25 mars 2014

AquaMail pour mettre fin aux problèmes de synchronisation des mails sous Android

Depuis un an que j'utilise ma tablette Nexus 7, je n'ai jamais été vraiment satisfait de la lecture des mails avec l'application standard d'Android.

Je dispose de plusieurs comptes mails chez OVH que je consulte en POP sous Thunderbird sur ma machine Ubuntu.
C'est sur cette machine que je filtre les spams, supprime ce qui ne m'intéresse pas et archive ce qui doit être conservé.
Sur ma tablette, je veux juste voir ce qui arrive sur mes adresses principales pour éventuellement réagir à une urgence lorsque je ne suis pas au bureau.

L'appli standard d'Android pour les mails n'est vraiment pas pratique à utiliser dans ce contexte car :

  • La synchronisation fonctionne mal. Parfois les mails sont supprimés du serveur après suppression de la tablette, parfois non. Les mails reçus sur la tablette n'en sont pas automatiquement supprimés après lecture sous Thunderbird et vidage du serveur.
  • Il n'existe aucun moyen pour vider la corbeille en une seule fois. Tous les mails qui y sont placés doivent être effacés manuellement.

Un peu lassé de tester une à une toutes les combinaisons des différentes options de synchronisation, j'ai fini par chercher sur le net et par découvrir que je n'étais vraiment pas le seul dans cette situation et que personne n'avait de solution à proposer.
J'ai donc abandonné l'appli standard et installé Aquamail. Depuis, tous mes problèmes sont résolus :

  • La corbeille peut être vidée d'un seul coup.
  • Les mails supprimés de la tablette sont bien effacés du serveur.
  • Lorsque Thunderbird efface les mails du serveur après téléchargement, l'appli se synchronise bien et ses boîtes de réception sont automatiquement nettoyées.

Pour ceux que ça intéresse, une très bonne FAQ est disponible ici.

samedi 1 mars 2014

OVH Problème d'accents lors du passage d'un hébergement 90 Plan à Perso 2014

Il y a quelques jours j'ai rencontré un problème de disparition de certains caractères accentués du site d'un de mes clients lors d'un changement d'hébergement chez OVH.

Ce site était hébergé depuis une dizaine d'années sur une ancienne offre 90 Plan et je devais le transférer vers la nouvelle offre Perso 2014.

L'encodage des caractères utilisé était ISO-8859-1 et l'affichage du contenu du site faisait appel à la fonction Php htmlspecialchars.
La version de Php utilisée sur l'ancienne offre d'hébergement était PHP 4 alors que sur les mutualisés 2014, la version par défaut est actuellement PHP 5.4.

Avec PHP 4, la valeur par défaut du paramètre facultatif encoding de htmlspecialchars est ISO-8859-1 alors qu'avec PHP 5.4 cette valeur est UTF-8.

La solution la plus simple et la plus rapide pour retrouver mes caractères accentués a été de revenir à la version 5.3 de Php en plaçant à la racine du site le fichier .ovhconfig suivant :

app.engine=php
app.engine.version=5.3
http.firewall=none
environment=production

Remarque : Un autre problème courant pouvant survenir lors du passage de PHP 4 à PHP 5 est lié aux modifications de la directive Register_globals. Voir ici.

lundi 3 février 2014

Comment utiliser root sous Ubuntu

Après l'installation d'Ubuntu, l'utilisateur root n'est pas actif et on ne peut pas l'utiliser. L'utilisateur standard du système est sensé passer par la commande sudo lorsqu'il a besoin d'exécuter des commandes réservées à l'administrateur. Personnellement je trouve cela vraiment inconfortable et je préfère ouvrir un terminal et basculer sous root par su.

Pour activer l'utilisateur root, il suffit de lui affecter un mot de passe en passant par sudo :
sudo passswd root

samedi 4 janvier 2014

Une astuce toute simple pour renforcer la sécurité d'un serveur ssh sous linux

Ssh est un protocole permettant la connexion à des machines distantes en cryptant les données circulant sur le réseau.
Il est très utilisé pour l'administration de serveurs à distance et offre pour cela un niveau de sécurité supérieur à telnet, ce qui ne dispense pas de prendre quelques précautions :

Les serveurs reliés à internet sont presque inévitablement scannés à l'aide d'outils cherchant des ports ouverts pouvant éventuellement être exploités dans des intentions malveillantes.
Si un serveur ssh est installé sur votre machine, l'ouverture du port 22 sera rapidement découverte et des connexions en tant que root vont tout aussi vite être tentées.

Il va sans dire que le mot de passe de l'utilisateur root doit être sérieux mais deux précautions valent mieux qu'une :
Je conseille vraiment de configurer le serveur ssh de façon à ce qu'il interdise les connexions du root et n'autorise que les connexions d'un utilisateur prédéfini auquel on aura attribué un login improbable, un vrai mot de passe, les droits les plus restreints et que l'on aura exclu de la liste des sudoers.

De cette façon, vous pouvez établir la connexion en utilisant cet utilisateur puis utiliser la commande su pour travailler en tant que root. Par contre si une personne mal intentionnée arrive à entrer en possession des informations lui permettant de se connecter via ssh, il faudra encore qu'elle trouve le mot de passe du root pour disposer des droits d'administration sur la machine.

Cette configuration est simple à mettre en place dans le fichier /etc/ssh/sshd_config où il suffit d'indiquer :

  • PermitRootLogin no pour interdire les connections en tant que root
  • AlloUsers toto pour n'autoriser que les connections de l'utilisateur toto.