logo git

Git : Pull automatique du dernier push

Lorsque vous avez pratiqué suffisamment Git, à savoir pusher vos modifications et ensuite puller sur votre serveur de production, vous aurez un peu marre de ces manipulations répétitives que vous faites peut être une centaine de fois dans la journée.

La solution à votre problème si vous utilisez Github.com c’est d’utiliser les webhooks. Un prérequis à cette méthode est d’être en mode SSH pour pusher en ssh.

C’est quoi un webhook?

Un webhook est une page web (donc une url bien spécifique) qui sera appelée par Github. Elle sera appelée quand un événement se produit, en ce qui nous concerne c’est lorsqu’on push une branche vers Github, en ce qui  nous concerne c’est la branche master.

Comme cette page web est chargée, le script qu’il contient sera également exécuté, un peu comme les CRON job. Que doit contenir cette page? Je prends comme exemple un workflow où vous développez en php sous Windows, et que votre serveur de production est Linux. Ce que j’ai l’habitude de faire c’est quand j’ai mergé en local une branche feature avec ma branche master, je pousse la branche master vers Github. Ensuite je vais sur le serveur de production, je me connecte en tant que propriétaire du vhost en question (pas en root), et je fait un git pull pour avoir la dernière version du master.

Créer le webhook

C’est cette dernière étape qu’on va coder en php sur une page webhook que je vais appeler git.php, voici le code à l’intérieur:

<?php `git pull` ?>

Enregistrez votre fichier à la racine de votre serveur web de sorte qu’elle soit accessible de l’extérieur.

Les backticks (apostrophe inversés) servent à exécuter une commande shell dans un fichier php. Le fait d’appeler ce fichier php est équivalent à exécuter en mode console un git pull.

Configurer Github pour appeler cette page php

Allez sur votre répository sur Github.com, ensuite cliquez « Seeting », et puis sur la barre latérale « webhook ». L’exemple ci-dessous s’appuiera sur un événement de type push, c’est à dire que lorsque vous pusher vers votre repository, Github va envoyer une requête de type GET vers la page php que vous lui indiquez.

webhook avec Github

Bienb sûr vous pouvez faire plus de paramétrage, en cochant le dernier radio button, vous verrez tout un tas d’options, ce sont des choses plus sophistiquées que vous utiliserez sans doute avec un orchestrateur comme Jenkins.

logo git

Commentaire multiligne dans vos commits sous Windows

Pour aller au-delà d’une seule ligne de commentaire voici la syntaxe :

git commit -m « ligne 1″^

Plus?

Plus? « Ligne 2″^

Plus?

Plus ? « Ligne 3 »

Fin.

 

Syntaxe alternative :

git commit -m « blabla » -m « blabla »

La première ligne sera le titre et les suivante le corps de texte.

Monitorez l’exécution de votre code PHP avec XDEBUG Trace Log

PHP Avancé : Profilez l’exécution de votre page  Php.

 

Quand vous avez un certains niveau de Php ou quand vous travaillez avec des solutions open source comme Magento, et que tout rame, vous aurez envie de monitorer (on dit profiler) les performance de chaque script php.

XDEBUG est le programme souvent installé par défaut avec WAMP qui permet de profiler l’exécution d’un script.

Il génère un fichier texte avec les noms des fonctions et le temps d’exécution. Pour interpréter de façon plus lisible ces données, il faut sous Windows utiliser le programme Wincachegrind, et sous Linux c’est KCachegrind.

 

Pour télécharger Wincachegrind, attention ne plus aller le télécharger sur sourceforge, cette version pose problème car elle date. Voici le lien du fichier qui est compatible avec la dernière version des fichiers générés par XDEBUG.

 

Télécharger WincacheGrind

Procédure à suivre, tout d’abord il vous faut paramétrer le fichier php.ini, dans la section xdebug (faites CTRL + F pour le trouver).

[xdebug]

zend_extension =”c:/wamp64/bin/php/php5.6.25/zend_ext/php_xdebug-2.4.1-5.6-vc11-x86_64.dll”
xdebug.remote_enable = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = cachegrind.out.%u.%H_%R
xdebug.profiler_output_dir =”c:/wamp64/tmp”
xdebug.show_local_vars=0

 

la ligne importante à vérifier est xdebug.profile_enable_trigger = 1

donc allez sur votre page web que vous voulez profiler et ajoutez un paramètre dans l’url :

http://votresite.com/index.php?XDEBUG_PROFILE

chargez votre page et un fichier sera généré dans le répertoire c:/wamp64/tmp

Ouvrez votre programme Wincachegrind, et ouvrez le fichier généré, vous devriez avoir une fenêtre de ce style :

x

Vous pouvez naviguer dans la hiérarchie et regarder le temps d’exécution de chaque fonction. Cet outil est vraiment génial et vous permet de connaitre de manière intime le temps d’exécution de chaque script de régler les problèmes de lenteur.

sublimet text

Personnaliser Sublime Text pour plus de productivité

Raccourcis personnalisés dans SublimeText

[
 { "keys": ["f1"], "command": "reindent" },
 { "keys": ["shift+space"], "command": "move", "args": {"by": "characters", "forward": true} },
 { "keys": ["ctrl+space"], "command": "move", "args": {"by": "lines", "forward": true} },
 { "keys": ["shift+alt+space"], "command": "move", "args": {"by": "characters", "forward": false} },
 ]

Package Controller de SublimetText

Le package Controller est le point d’entrée à vos besoins de personnalisation de SublimetText, et je vous promets que pour augmenter cet IDE qui bien que performant, n’est pas un IDE intégré.

Lorsque vous avez installé SublimeText 2, la première chose à faire est de customiser le logiciel, non pas qu’il lui manque des fonctions cool, mais vous allez le trouver encore plus puissant !

Installer le package manager

Un peu comme Firefox, Sublimet Text accepte des plugins ou package. Pour faciliter la gestion de l’installation des package, il faut installer le Package Manager. Pour ce faire aller sur cette page de développement de ce package manager, et copier coller le bout de code fourni dans la ligne de commande. Pour faire apparaitre le prompt de la ligne de commande il faut aller dans View > Show Console.

Coller le texte dans le champs texte du bas (et non dans la fenêtre de log) et appuyez sur ENTREE, vous devez avoir un message qui vous invite à redémarrer SublimeText.

Pour faire apparaitre les packages dorénavant disponibles à l’installation (il y en a des tonnes) faite la commande CTRL + SHIFT + P dans Windows. Note : il faut fermer tous les fichier pour que ça marche et cliquer Discover PAackage.

Installer un package

C’est le but de cet article ! Il existe une multitude de package, pour ce faire faites apparaitre la fenêtre du Package Manager CTRL + SHIFT + P, et sélectionnez Install Package, une fenêtre à la Google Suggest fait apparaître des package, avec l’autocomplétion tapez le nom du package voulue, par exemple je vais installer le commenteur de fonction et classes pour PHP DocBlokr. (devant function tapez /** et ENTREE !)

Chaque package est souvent dans un repository Github, mais vous pouvez installer facilement en tapant une commande dans le champ commande de Discover PAckage et cliquer sur le nom du package. Utiliser un git clone permet d’avoir la toute dernière version.

C’est fait ! je vous invite à explorer les autres packages sur cette page (obtenue en cliquant sur Discover PAckage) :

Pour aller plus loin avec SublimeText:

Configurez SublimeText 2 (ST2 pour les intimes) pour développer en PHP.

Emmet pour le CSS et les tags HTML

Le meilleur plugin pour les développeur intégrteur front-end, il permet d’entrer les codes html et css beaucoup plus rapidement et vous pouvez faire vos raccourcis personnalisés.

Mettre à jour de vers php5.6 sous debian 7.x

Sur ce post j’avais décris comment installer Composer, mais les récentes version de composer ne marchent pas avec la version 5.4 de php, d’ou le besoin de mettre à jour vers php5.6

 

Lorsque vous faites une commande apt-get, l’OS va chercher dans une liste de dépôt sur Internet. Cette liste de sites de dépôt se trouve dna sun fichier sources.list, localisé dans /etc/apt/

Vous êtes connecté en tant qu’utilisateur root

Il vous faut renseigner ces deux lignes dans ce fichier en utilisant nano pour le plus simple:

deb http://packages.dotdeb.org wheezy-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 all

$ nano /etc/apt/sources.list

ensuite il vous faut ajouter la clé du dépôt :

$ wget http://www.dotdeb.org/dotdeb.gpg
$ apt-key add dotdeb.gpg

 

Ensuite la procédure de mise à jour proprement dite:

$ apt-get update
$ apt-get install php5

N’oubliez pas de redémarrer Apache

$ service apache2 restart

$ php -v

cette dernière commande affiche la version de php, sans que vous ayez à faire un fichier php avec phpinfo()

Exit Mandrill voici Mailgun !

Mandrill a donc décidé de basculer Mandrill en payant après une période d’expérimentation,

mon compte a été désactivé. Mandrill ne propose pas de plan tarifaire adapté à mes usages

personnels.

J’ai vu sur Twitter que Mailgun était l’alternative freemium idéale pour remplacer Mandrill.

J’ai donc créé un compte, sur Mailgun.com, et j’ai paramétré mon domaine pour pouvoir envoyer des emails de façoon programmatique.

Attention ici je ne parle pas d’envois massifs d’email, mais d’envois d’email individuel, qu’on appelle email transactionnel. Mon utilisation consiste en l’envoi d’un mot de passe sur demande.

Pourquoi ne pas utilise la fonction mail() de php me direz vous? He bien pour des raison de délivrabilité tout simplement. Avec mail(), vous avez de grandes chances de voir votre email se retrouver dans la boite de SPAM.

Donc à partir de maintenant, je vous en conjure, procédez avec une méthode beaucoup plus professionnelle pour l’envoi de vos email que ce soit massif ou transactionnel.

Paramétrage de Mailgun

Après la créationd e votre compte, vous ajoutez votre nom de domaine à partir duquel vous indiquez

envoyer vos emails, car bien sûr c’est Mailgun qui envoit vos email et non votre domaine. Il faut donc entrer quelques informations indiquant que votre onm de domaine et Mailgun sont liés.

 

  1. Entrez votre nom de domaine
  2. paramétrer les deux DNS type TXT pour activer l’envoi d’email
  3. (optionnel) paramétrer le CNAME pour tracker les ouvertures de email, click et désinscription
  4. (optionnel) paramétrer les champs MX pour recevoir les email, mais là c’est vraiment optionnel

 

Il vous faudra attendre un moment (heures ou jours) pour que Mailgun prennen en compte ce paramétrage s’il est bien fait), voussserez prévenus par email.

En ce qui me concernent c’est chez mon registrar que j’ai rentré tous ces champs.

Envoi d’un email

Envoyer avec Mailgun un mail transactionnel se fait en quelques lignes, voici le tuto ici, ce qu’il faut faire c’est installer avec Composer (le gestionnaire de packages de Php) les librairies pour faire aussi simple.

Il y a deux façons d’envoyer un email, soit via l’API de Mailgun, soit en SMTP, ce dernier étant plus rapide et pour l’envoi en volume mensuel plus grand. L’API me convient car je n’ai pas de gros volumes.

Ce que vous devez savoir faire en natif en CSS

Je sais qu’il y a beaucoup de framework CSS géniaux, mais si vous ne connaissez pas les fondamentaux de CSS, alors vous serez toujours une burne en CSS, et ne comprendrez jamais les dysfonctionnement d’un framework CSS.

Voilà pourquoi il est important pour vous de connaitre les fondamentaux, il y a  encore quelques années coder en CSS pour que ça s’affiche pareil sur tous les navigateurs était un chemin de croix. Heureusement aujourd’hui il y a une meilleur harmonisation dans l’interprétation des recommandations du W3C chez les différents éditeur de navigateurs internet.

Choses qu’il faut savoir faire en CSS pure

-Menu drop down simulé, le drop down natif des navigateurs est assez moche

-Sticky footer, quand vous n’avez pas assez de contenu sur votre page, ça se voit

-centrer verticalement une div (bizutage en vue)

-utiliser les pseudo sélecteurs

-créer des flèches sur une bordure

-créer une popup et la positionner

-créer une fenêtre modale et l’enlever quand on clique n’importe où ailleurs

Introduction à PHPUnit

Cette petite introduction à pour but de vous montrer comment installe PhpUnit afin de démarrer votre premier test unitaire.

Prérequis : connaissance en programmation orientée objet avec Php, connaissance optionnelle de Composer.

Pour faire simple téléchargez l’archive Phar (un seul fichier) dans le répertoire de test.

Aller sur cette page pour une petite introduction en anglais:

https://phpunit.de/getting-started.html

Vous écrivez vos tests dans un fichier php, et vous allez lancer ce fichier en mode console:

phpunit fichierContenantTest.php

 

 

Si vous avez installer avec Composer, un fichier phpunit.xml est généré, le fait de lance phpUnit sans argument suffira à lancer la série de test codé dans le fichier xml.

phpunit

serveur web apache php

Configurer un virtual host sous WAMP et le faire partager en réseau local

Pour cette manipulation simplifiée nous ne toucherons pas au fichier hosts qui se trouve dans le répertoire Windows/system32/drivers/etc/

On touchera seulement au fichier httpd.conf, qui est lu par Apache.

Attention, souvent le httpd.conf n’est pas seul en jeu, non pas parce qu’il doit y avoir plusieur fichiers mais que pour des raisons d’organisation on a fractionné en plusieurs petits fichiers qu’on va inclure dans le fichier principal qui reste httpd.conf.

Par exemple le fichier des virtual host sera inclu dans httpd.conf via :

Include conf/extra/httpd-vhosts.conf

1/Créer un point d’entrée vers le répertoire où se trouve votre solution web

Cela se fait avec la directive Directory.

Options Indexes Includes FollowSymLinks MultiViews
AllowOverride all
Require all granted

2/Créer un virtual host

DocumentRoot « C:\wamp64\www\monsite\public »
ServerName monsite

ServerName indique que vous pouvez accéder à votre application web en local en tapant http://monsite, plus de besoin de localhost.

 3/Permettre d’accéder depuis votre réseau local (en particuliers depuis le smartphone)

Super utile quend vous faite du responsive design.

Lien de l’article d’origine:Accès depuis smartphone sur WAMP

Là il faut manipuler le fichier hosts de windows mentionné plus haut. Ou l’éditer il vous faudra ouvrir votre IDE avec les droits Administrateur.

Rajoutez les lignes :

127.0.0.1 monsite
::1 monsite

Maintenant redémarez vos service Apache (vous devez le faire a chaque fois que vous modifiez un fichier
de configuration Apache)
Moi je suis sur une box Free, et l’IP du réseau est : 192.168.x.x
Pour connaitre l’IP de votre ordinateur, sous Windows faites : ipconfig
sous Linux : ip addr show
Notez l’adresse de votre ordinateur (qui est donc le serveur je le souligne !) et entrez dans le navigateur de
votre smartphone 192.168.x.x/monsite

Et Voilà !

Note : dans le 1/,     AllowOverride all et   Require all granted sont nécessaire pour que ça fonctionne.

Note concernant l’upload de fichiers trop gros dans PHPMyAdmin

Configurer les fichier php.ini (même le bon) ne suffira pas. ces varaibles ont été overridées. Il faut aller configurer les fichier phpmyadmin.conf :

<wamp_dir>/alias/phpmyadmin.conf

Lien de la solution

php

Introduction à PDO meilleure façon de requêter la base de données en Php

Si vous voulez minimiser les risques d’injection SQL il faut utiliser PDO, n’utilisez plus Mysqli. Dites lui non svp.

Connexion à la base de données:

On est en programmation orientée objet donc utilisez le mot clé new pour instancier une connexion à une base de données.

$pdo = new \PDO($dsn, $user, $pass)

$dsn est une chaine qui défini une ressource de base de données,

$dsn = 'mysql:host=localhost;dbname=votre_base';

Lancer une requête SQL:

$sql = 'SELECT * FROM table';
$stmt = $pdo->prepare($sql);

Avec PDO vous utilisez des requêtes préparées (prepared statement), et ensuite on exécute

$stmt->execute();

et pour retirer les résultats :

$result = $stmt->fetchAll();

Je sais que vous êtes un programmeur curieux, donc vous allez voir la tête de l’objet retourné. Les données ne sont pas bonnes mais c’est pour vous donner la structure du tableau retourné.

Array
(
    [0] => Array
        (
            [id_site] => 10
            [0] => 10
            [domaine] => www.google.fr
            [1] => www.google.fr
        )
)

On remarque que dans l’élément les informations sont doublées mais indexés de façon différent, on a les index numériques et les index alphanumériques.

PDO vous donne en fait le choix de travailler soit avec les tableaux associatifs soit les tableaux classiques.

Si ce sont les champs nommés du tableau associatif qui vous intéressent :

  $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // retourne un tableau associatif
 $result = $stmt->fetchAll(PDO::FETCH_CLASS); // retourne une classe

  $result = $stmt->fetch(PDO::FETCH_ASSOC);  // retourne un seul résultat

Les requêtes préparées avec PDO

Avec les requêtes préparées, vous devez écrire une requêtes SQL avec des paramètres à l’intérieur et pas des variable PHP. L’intérêt est qu’avec ce genre de requêtes, vous vous évitez la plupart des injections SQL et aussi accessoirement les problèmes d’échappement de caractères spéciaux.

Requête PDO SQL avec une clause WHERE

Regardons comment on fait une requête plus évoluée:

$stmt->prepare('SELECT * FROM table WHERE id = :id');
$stmt->bindParam(':id',$id,PDO::PARAM_INT);
$stmt->execute();

Ici on met un masque dans la clause where et ensuite on attribue une valeur au masque, c’est ici tout l’intérêt de PDO (il y en a d’autres),

paramétrer la requête SQL de cette façon évite les injection SQL. On indique aussi quel est le type de variable on passe

On peut passer aussi par valeur au lieu d’une variable php

$stmt->bindValue(':id',50);

Une autre façon de passer des paramètres est d’utiliser des points d’interrogation

$stmt->prepare('SELECT * FROM table WHERE id = ?');
$stmt->bindValue(1,50,PDO::PARAM_INT);

Ici l’indice 1 correspond au premier point d’interrogation, quand vous en avez deux vous aurez un sur le premier bind et deux sur le second bind.

Insertion avec les requêtes préparées

Le principe des requêtes préparées est de ne pas mettre les valeurs à insérer directement dans la requêtes SQL, mais de les remplacer par des alias (placeholder) que l’on va populer ensuite.

#la requête SQL modifiée
$sql = "INSERT INTO users (nom, prenom, age) VALUES (:nom, :prenom, :age)";
#les paramètres à insérer sont mis dans un tableau
$params = ['nom' => $nom,'prenom' => $prenom,'age' => $age];
#on exécute la requête
$stmt = $pdo->prepare($sql);
$stmt->execute($params);

#placeholder non nommé, dans ce cas respectez l'ordre
$sql = "INSERT INTO users (nom, prenom, age) VALUES (?,?,?)";


Mise à jour avec les requêtes préparées

$sql = "UPDATE users SET name=?, surname=?, sex=? WHERE id=?";
$stmt= $pdo->prepare($sql);
$stmt->execute([$name, $surname, $sex, $id]);

ou

$sql = "UPDATE users SET name=?, surname=?, sex=? WHERE id=?";
$pdo->prepare($sql)->execute([$name, $surname, $sex, $id]);

Avec les paramètres nommés

$data = [
    'name' => $name,
    'surname' => $surname,
    'sex' => $sex,
    'id' => $id,
];
$sql = "UPDATE users SET name=:name, surname=:surname, sex=:sex WHERE id=:id";
$stmt= $pdo->prepare($sql);
$stmt->execute($data);

ou 

$sql = "UPDATE users SET name=:name, surname=:surname, sex=:sex WHERE id=:id";
$pdo->prepare($sql)->execute($data);

Retourner le nombre d’occurences

$sql = "SELECT count(*) FROM `table` WHERE foo = bar"; 
$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn(); 

Retourner le dernier id de la clé primaire (auto généré)

C’est vraiment très pratique, pas la peine de refaire un SELECT qui n’a d’ailleurs aucune garantie de retourner l’id de votre insertion si il y a beaucoup d’opérations d’insertion.

    $sql = "INSERT INTO rendu (user_id,questionnaire_id) VALUES (:user_id,:questionnaire_id)";
    $params = [
        'user_id' => $user_id,
        'questionnaire_id' => $questionnaire_id,
    ];


    $stmt = $pdo->prepare($sql);
    $result =  $stmt->execute($params);
    $id = $pdo->lastInsertId();

Echo des erreurs

Comme il n’est pas possible de voir à quoi va ressembler la requête finale, vous devez afficher le résultat de la requête ou de la préparation

$stmt = $pdo->prepare($sql);
if(!$stmt){ print_r($pdo->errorInfo();}

#ou après l'exécution
$stmt = $pdo->prepare($sql)
$res = $stmt->execute($params);
print_r($stmt->errorInfo());

Configuration de Jenkins pour lancer un job

Installer Ant

configurer le path dans Windows, Jenkins, et project !

le build file est téléchargé depuis Git !

fichier de configuration build.xml

Faire essais des outils de QA en ligne de commande un par un pour voir de quoi il retourne.

Affiner le fichier build.

Pour débugger le build cliquer dans le lien du build et cliquer sur console output

Integration continue avec Jenkins

L’intégration continue est le processus d’automatisation des tâches de build appelé  « Job » (le build ce sont toutes les étapes entre le code et la mise à disposition du logiciel pour la production.

 

Jenkins est un programme écrit en java qui va effectuer ces tâches.

Il suffit de télécharger l’archive .war de le mettre dans un répertoire et de le démarrer :

$ java -jar jenkins.war

 

Pour télécharger c’est ici.

Une fois télécharger il démarrer, vous pourrez y accéder au port 8080 de votre localhost

localhost:8080

La première chose à faire est de créer un projet et de configurer Jenkins.

Installer Git

Je suppose que vous avez déjà installé Gitbash, sinon allez le chercher sur Github.com.

Je suppose qu’on travaille avec Git et qu’on est sous Windows.

Jenkins vient avec des plugins, et Git n’est pas installé par défaut. Installez le en allant vers Jenkins > Administrer Jenkins > Gestions des plugins, puis sur l’onglet Disponible, cocher Git OAuth. Choisissez t élécharger et installer au prochain démarrage. Cochez la case redémarrer après download.

Sinon vous devrez redémarrer manuellement. (CTRL + C)

Ensuite aller dans Jenkins > Administrer Jenkins > Configuration du système, et mettez le chemin COMPLET vers git.exe.

Puis dans la partie projet, configurez Git en mettant le repository que vous pouvez copier coller dans votre compte github.com, entrez les login et mot de passe, normalement vous n’aurez pas de messsage. (il y a beaucoup de question sur cette étape, et j’avoue que j’ai un peu nagé, ce que je peux vous dire, c’est dans un premier temps de*’éviter de lancer Jenkins en tant que service Windows).

 

Ce que fait Jenkins c’est qu’à chque build il va télécharger depuis Github.com vos fichiers.

 

Liens utiles :

http://jenkins-php.org/  Vous dit quels logiciels à installer pour mettre dans Jenkins. Jenkins se configure avec un fichier xml appelé template. Un exemple de template est misà disposition pour un projet php typique.

 

 

Note: Pour lancer un programme php de partout sous Windows, il faut mettre le répertoire ou

se trouve le fivhier bat correspondant dans la variable $PATH.

Connaitre les différentes configuration d Apache2

SI vous ne le savez pas encore, apache peut tourner sous différentes configurations. Et cela a des implication sur les performances de votree site web.

Le terme MPM revient souvent « multi processing method« , comment manager plusieurs connection simultanées à votre site web.

Apache en mode Prefork, à chaque nouvelle connexion, Apache crée un process.

Apache en mode Worker à chaque nouvelle connexion crée un nouveau thread dans un processus fils. En gros Worker est plus rapide.(mais certains modules peuvent être incompatibles.

C’est la plus ancienne, Apache n’a qu’un seul processus. Si deux pages web de votre site sont servies,

C’est à la compilation d’Apache que cela est décidé. Donc pour savoir comment est compilé Apache par rapport à son mode de fonctionnnement la commande à faire est :

$ apache2 -V

vous devez être sous root pour faire marcher la commande ci-dessus. le résultat peut être le suivant :

Server version: Apache/2.2.22 (Debian)
Server built:   Jun 16 2014 03:51:14
Server’s Module Magic Number: 20051115:30
Server loaded:  APR 1.4.6, APR-Util 1.4.1
Compiled using: APR 1.4.6, APR-Util 1.4.1
Architecture:   64-bit
Server MPM:     Prefork
threaded:     no
forked:     yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR= »server/mpm/prefork »
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT= »/etc/apache2″
-D SUEXEC_BIN= »/usr/lib/apache2/suexec »
-D DEFAULT_PIDLOG= »/var/run/apache2.pid »
-D DEFAULT_SCOREBOARD= »logs/apache_runtime_status »
-D DEFAULT_LOCKFILE= »/var/run/apache2/accept.lock »
-D DEFAULT_ERRORLOG= »logs/error_log »
-D AP_TYPES_CONFIG_FILE= »mime.types »
-D SERVER_CONFIG_FILE= »apache2.conf »

 

On voit bien que c’est prefork qui est utilisé.

Debugger sous WAMP

si votre serveur refuse de passer au vert, le mieux est de voir ce qui se passe sous le capot.

si votre Service Apache refuse de démarrer (pour ce faire aller dans Apache / Service et regardez si c’est le cas), ouvrez une fenetre DOS, et allez dans le répertoire du fichier httpd.exe (ce devrait être C:\wamp\bin\apache\apache2.4.9\bin changez la version Apache à votre convenance), et entrez l commande suivante :

$ httpd.exe -t

le flag -t va afficher le dump. La plupart du temps il s’agit d’un fichier vhost.conf mal configuré.

Utiliser PHPDocumentor

Installer PHPDocumentor

La méthode la plus simlpe est de télécharger le phar (archive PHP) et de l’invoquer en ligne de commande.

Installer GraphViz pour visualiser graphiquement vos classe

Autoloading en PHP

Qui n’a jamais fait d’include de fichiers externes en PHP? C’est même récurrent pour les programmeurs.

Avouez que c’est quand même lourd à la longue. Il existe une méthode depuis PHP 5.3 pour résoudre automatique le chemin des fichiers de classe, enfin presque. A condition de bien comprendre quelques notions fondamentales en PHP objet.

Autoloading qu’est ce que c’est?

Quand vous avez à instancier un objet:

myDeuche = new Voiture();

PHP doit trouver le chemin du fichier qui contient la déclaration de classe et le charger (Autoloading). Prenons soins de nommer le fichier de déclaration de classe avec le même nom que la classe. Et dans un fichier il y a une seule classe. Ces deux conditions sont nécessaires pour faire marcher l’autoloading.

Votre fichier peut être dans le même répertoire que celui contenant le script ci-dessus.

Ou il peut être dans un sous répertoire ou sous sous répertoire.

Comment lui faire savoir dans ce cas?

C’est là qu’interviennent les espaces de nom.

soit la déclaration suit:

//Voiture.php

namespace vehicule;

class Voiture{

 //....suite du code

}

Ce fichier est obligatoirement dans le répertoire vehicule.

Ainsi lorsqu’on instancie l’objet Deuche, PHP va aller dans le répertoire vehicule pour chercher le fichier Voiture.php grâce à la correspondance du nom de classe (vous comprenez pourquoi on ne doit déclarer qu’une seule classe par fichier)

Historique et Évolution

L’autoloading a évolué avec PHP, particulièrement avec l’introduction de spl_autoload_register() dans PHP 5.1, qui a simplifié l’enregistrement de fonctions d’autoload personnalisées.

Les différentes méthodes d’autoloading

__autoload() (déprécié depuis PHP 7.2.0)

Cette fonction magique permettait de définir une méthode globale pour charger automatiquement les classes. Exemple :

function __autoload($className) {
    include $className . '.php';
}

spl_autoload_register()

Il s’agit de la méthode recommandée pour enregistrer une ou plusieurs fonctions d’autoloading :

spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

Autoloading PSR-4

La norme PSR-4 de PHP-FIG spécifie une manière standardisée d’autoloading des classes à partir de leurs namespaces. Elle est largement utilisée et soutenue par Composer.

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Autoloading avec Composer

Composer, le gestionnaire de dépendances pour PHP, utilise l’autoloading version PSR-4 pour inclure automatiquement les bibliothèques externes. Il crée un fichier vendor/autoload.php qui gère l’autoloading des classes définies dans les packages installés. Composer n’est pas fourni avec PHP il faut l’installer.

require 'vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

$log->warning('Foo');
$log->error('Bar');
logo git

Git branch commandes utiles

Créer une branche dans Github

Vous utilisez sans doute Github seulement pour la gestion de version avec la branche master (celle qui va en production).

Github vous a changé la vie car il vou smémorise absolument toutes les version de votre code. Il vous permet de revenir à un état antérieur si vous avez fait une gaffe.

Branching

Le branching consiste à créer une variante du dépôt de référence (appelé Master), de travailler dessus sans le moindre risque de toucher au master puisque logiquement différent donc mutuellement exclusif). Quand vous aurez fini de travailler sur la branche, vous pourrez fusionner avec le dépôt de référence !

Bien sûr il risque d’avoir des conflits de fichier, dans ce cas le système Git vous demande de valider à la main.

Commander pour créer une branche à partir du dépôt de référence :

$git branch votre_branche
$git checkout votre_branche

ces commandes ci-dessus sont souvent résumées en une seule commande :

$ git checkout -b votre_branche

La commande checkout va pointer votre espace de travail vers la branche. Donc vous quittez la branche de référence (ou master).

où votre_branche est le nom de votre branche.

Quand vous  voulez commiter vos changement au code, vous faites vos commande habituelles:

$ git commit -m 'ajout fonction xyz'
$ git push origin votre_branche

Pour fusionner la branche votre_branche avec le master, revenez vers le master

$ git  checkout master
$ git merge votre_branche

et pour effacer votre_branche, faites la commande ci-dessous:

$ git branch -d votre_branche

Pour des explication plus en détail (en anglais) voir cette page.

Renommer une branch local

#allez à la branch que vous voulez renommer 
$ git checkout vieux_nom
$ git branch -m nouveau_nom

Renommer une branche distante

Si vous avez déjà poussé la branch dans le dépôt distant, il vous fautdra cette commande supplémentaire ensuite:

git push origin -u nouveau_nom
#simplement effacez l'ancienne branche
git push origin --delete vieux_nom
logo git

Git remote changer d’url pour votre repository

Dans l’article précédent je vous ai montré comment générer une clé SSH pour ne plus à avoir à taper de mot de passe.

Si vous avez commencé à utiliser Github en tapant votre identifiant et mot de passe, il y a de grandes chances que vous accédiez à votre repository via une url web de type https.

Accéder à votre repository en https ou en ssh

Sachez qu’il est possible d’accéder à votre repository depuis un autre chemin.

Supposons que votre repository soit actuellement sur:

https://github.com/votre_nom/repository.git

Pour vérifier à quelle url vous allez pusher faites la commande suivante :

git remote -v

En ayant activé vos clé SSH, vous avez sans doute eu un message du type « Github doesn’t offer shell access »

Si vous utilisez SSH il faut switcher sur une url du type:

git@github.com:votre_nom/repository.git

Sachez que cela n’est possible que si vous avez mis votre clé SSH sur le site de Github.com. Utilisez la commande suivante :

git remote set-url origin https://github.com/USERNAME/REPOSITORY2.git

refaites une commande

git remote -v

pour vérifier.

Pour revenir en mode https

git remote set-url origin git@github.com:USERNAME/REPOSITORY2.git

Utilisez Xdebug pour profiler votre code

Xdebug est un outil très utilisé pour profiler votre code PHP

Il vous génère un fichier de log qui exploité avec Wincachegrind (un analyseur de log dédié sous windows) ou Kcachegrin (sous Linux), vous pourrez voir les goulots d’étranglement de vos code PHP.

 

Pour installer sur Debian rien de plus simple, connecté sous root:

apt-get install php5-xdebug

Pour windows je ne vous fais pas la manip qui doit couler de source.

Ensuite ajoutez ces lignes dans le fichier php.ini :

[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = “cachegrind.out.%u.%H_%R”
xdebug.profiler_output_dir = “c:/wamp/tmp”
xdebug.show_local_vars=0
xdebug.max_nesting_level=250

Attention en fonction de votre installation de WAMP, le chemin eput être différent, c’est soit wamp pour les version avant 3, et wamp64 pour les version 3.

Ensuite une fois que tout est installé, allez sur une url que vous voulez profiler, et ajoutez à la fin de l’url :

?XDEBUG_PROFILE

s’il y a déjà un autre paramètre :

?id=5&XDEBUG_PROFILE

 

Le fichier est enregistré dans le répertoire tmp.

Comme vous pouvez le voir les fichiers de xdebug commencent par « cachegrind.out » plus une heure ou date.

Pour paramétrer l’output dir, c’est à vous de choisir le meilleur répertoire, vérifiez qu’il soit autorisé en écriture. Si c’est généré sur votre serveur web, il suffit de le télécharger sur votre ordinateur et de l’analyser avec Wincachegrind.

Pour analyser ces logs générés, il vous faut sous Windows le programme Wincachegrind, une fois installé, ouvrez le fichier log généré et vous pourrez explorer les goulots d’étranglement. En effet tous les fichiers php qui s’exécutent sont profilés et vous avez vraiment un détail exceptionnel sur les temps d’exécution du moindre script php ainsi que leur temps d’exécution, c’est en regardant ce dernier paramètre que vous pourrez identifier les coupables d’un site web lent.

logo git

Installer Git sur votre machine Linux Debian

Si vous êts déjà en Root:

apt-get install git-core

Si vous n’êtes pas en Root :

sudo apt-get install git-core

ou

su root

puis

apt-get install git-core

Créer un repository  à partir d’un projet existant

Aller dans le répertoir racine du projet, et faire

$ git init

$ git add .

$ git commit

Quelques commandes Git

Générer un fichier pour ignorer les fichiers à versionner :

Qu’est-ce qu’on n’a pas envie de versionner? Ce sont les fichier de configuration, les fichiers des vendor tierces.

Il faut générer un fichier gitignore et mettre dedans les fichiers et répertoires.

$ touch .gitignore

il suffit de créer un fichier .gitignore et d’y mettre les fichiers à exclure. Pour exclure un répertoire mettez dans le fichier gitignore:

folder/**

pour exclure un fichier ajouter dans le fichier gitignore

nom_fichier

Si vous avez des fichiers committés que vous voulez exclure, il faut les enlever de la staginf area

$ git rm --cached nom_fichier

$ git rm -r --cached repertoire

Dans le cas ci-dessus on a retiré un répertoire entier avec récursion (dna sle cas où il y aurait des sous-répertoires.

Ajouter le nom du repository pour un push initial

git remote add origin youruser@yourserver.com:/path/to/my_project.git

logo git

Github pusher sans mot de passe

Lorsque que vous êtes sous windows et que vous travaillez avec Github, au début c’est génial car cela vous permet de faire un grand bon en avant, le versionning rien de mieux pour faire des amélioration de votre logiciel de façon incrémental sans avoir à gérer les différentes version en renommand les nom de fichier avec les dates.

Seulement au bout d’un moment vous devez taper sans cesse votre login et mot de passe à chaque fois que vous voulez pusher ou puller vos modification

Les clés SSH à la rescousse !

Il est possible de se passer de taper le login et mot de passe à chaque fois que vous devez pusher ou puller.

Il faut simplement utiliser les clé SSH publiques et privées.

Si vous êtes sous Windows, vous utilisez sans doute Git Bash pour commiter vos modifications, c’est dans ce même git bash que vous allez générer vos clé publique et privée.

Tapez la commande :

ssh-keygen -t rsa -C "your_email@example.com"

(Sous Linux idem)

Quand vous aurez le message : Enter passphrase (empty for no passphrase):

entrez un mot de passe (ne l’oubliez pas vous en aurez besoin).

Vos clés sont générées et sauvée dans le répertoire .ssh, sous Windows allez dans le répertoire utilisateur pour le trouver.

Informer Github de votre clé RSA

Maintenant il faut copier le contenu de votre clé publique dans Github.com

  1. Allez dans Github.com Settings
  2. Barre à gauche cliquez sur SSH Keys
  3. Donnez une titre et collez le texte de votre clé publique et cliquez sur Add KEy

Voilà c’est tout !

Dernière astuce pour les plus paresseux :

Maintenant quand vous allez commiter il ne vous sera plus demandé l’identifiant et le mot de passe mais par contre vous aurez à rentrer la passphrase. Pour ne pas à avoir à entrer cette passphrase à chaque fois que vous commitez, vous allez devoir utiliser le ssh agent pour stocker l’information.

eval `ssh-agent`

ssh-add

vous aurez à entre de nouveau le passphrase. Mais vous n’aurez à entrer qu’une fois seulement  la passphrase à chaque nouvelle session de git bash.

Pour aller encore plus loin :

Pour n’avoir plus à entrer de passphrase du tout il vous faudra écrire un script shell qui se lance automatiquement à chaque démarrage de git bash.

le -s va le mettre en tâche de fond.

Pourquoi cela ne marche toujours pas?

En fait il faut changer de représentation d’url, ce post vous en dit plus sur les url chez Github.

Autre méthode pour ne pas avoir à retaper le mot de passe à chaque fois

Voici la commande pour ne pas avoir à retaper le mot de passe :

git config --global credential.helper store

La prochaine fois que vous allez faire un git pull, vous allez entrer votre identifiant et mot de passe. Mais les fois suivantes, vous n’aurez plus besoin de le faire.

Astuce si vous voulez que cette mémorisation ne dure qu’un certain temps, le timout est en secondes.

git config credential.helper cache <timeout>

Connaitre les variables de configuration du cache de Nginx

Je passe un peu en revue les directives utilisées dans le fichier de configuration du cache.

Nginx utilisé en reverse proxy sans le caching des pages ne rime à rien. On l’utilise pour servir du contenu statique afin d’accélérer grandement le temps de téléchargement, et croyez moi il est plutôt performant !

Un serveur proxy se met entre l’internaute et le serveur Apache par exemple (mais ça peut être n’importe quel serveur).

 

 

Directive Signification
proxy_cache définit une zone mémoire partagée pour stocker le cache
proxy_cache_bypass
proxy_cache_key  une valeur de type string, utilisée pour classer les parties du cache
proxy_cache_lock  si plusieurs requêtes demandent une page non cachée, la première crée le contenu caché avant que les autres puissent lire le cache évitant à toutes les requêtes de demander du contenu dynamique
proxy_cache_lock_timeout
proxy_cache_min_uses  nombre de fois qu’un contenu demandé avant d’être caché
proxy_cache_path  répertoire ou sera placé le contenu caché, on y place les clé (qui identifie les pages cachées) et le métadonnées
proxy_cache_use_stale  définit le cas de figure où l’on sert du contenu caché lorsque l’appel au serveur du backend (Apache) donne une erreur
proxy_cache_valid durée du vie du cache (la page web doit retourner 200,301 ou 301), ici cela veut dire que les page retournant un code cité ci-dessus sera caché, les pages 404 par exemple ne sont pas cachée

Installer virtualmin sur Debian

D’abord connectez vous n root vis SSH (avec Putty par exemple)

Ensuite en ligne de commande tapez la commande suivante :

wget http://software.virtualmin.com/gpl/scripts/install.sh

ensuite exécutez ce script shell :

sh install.sh et le processus se lance automatiquement, avant de démarrer l’installation, il va lister une série d’OS, le votre doit y figurer sinon l’installation se plante.

Retour en haut