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 :