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.