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
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
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.
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)
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.
__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';
});
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/"
}
}
}
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');
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.
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.
#allez à la branch que vous voulez renommer $ git checkout vieux_nom $ git branch -m nouveau_nom
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
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.
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
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.
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
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
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
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.
Maintenant il faut copier le contenu de votre clé publique dans Github.com
Voilà c’est tout !
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.
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>
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 |
Un peu à la manière de l’installation de la librairie GD, pour installer CURL voici la commande à taper dans le shell
apt-get install php5-curl
Loggez vous sous mysql, sélectionnez la base de donnée avec :
use nom_base
ensuite voici la commande d’importation :
source /home/repertoire/fichier.sql
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.
Google analytic est un outil pour mesurer le trafic Web sur votre site web. Il nécessite de mettre un bout de code pour traquer les visites des internautes
Mais il est aussi possible d’envoyer les informations vers google analytics sans passer par un navigateur. Vous pouvez donc depuis un script côté serveur envoyer des informations vers Google analytic pour qu’il enregistre des informations
Pour ce faire nous devons utiliser une API qui s’appelle Measurement Protocol. Le principe est simple, il faut faire une requête de type POST vers le serveur de Google Analytics point
Je vais vous expliquer pourquoi connaître cet aspect de Google Analytics avec important, c’est relatif au tracking des achats sur votre site web. Dans le cas où le paiement s’effectue sur le site de la banque, et que le client revient sur votre site web, l’achat et suivi. Mais dans le cas où le paiement se finit et que la personne ne reviens pas sur votre site web, vous ne pouvez pas suivre les conversions.
Measurement protocol nous permet donc d’envoyer l’information comme quoi là ça a été réussi même si l’internat ne reviens pas sur votre site web après avoir payé sur le site de la carte bancaire
Le principe est simple, vous allez envoyer une requête vers le serveur de Google Analytics avec des paramètres bien défini, les paramètres doivent être au complet, sinon la requête échoue. Mais Google vous fournit à d’outils pour simuler et valider vos requêtes. cet outil c’est le Hitbuilder.
Mais d’abord nous allons voir un exemple très simple pour simuler une première requête vers le serveur de Google Analytics.
Il y a énormément de paramètres à envoyer car vous pouvez construire les mêmes requêtes que le script de Google Analytics sur le site web
Il vous faut vous référer à la page de documentation sur les paramètres pour voir la liste complète
Mais sans plus attendre faisant de notre première requête vers le serveur de Google Analytics
Il y a 4 paramètres obligatoire le premier paramètre concerne la version vous pouvez mettre ça n’a pas d’importance, le deuxième paramètre et le paramètre qui concerne le type de requêtes que vous allez vous allez faire , le plus simple c’est la pageview.
Le troisième paramètre est l’identifiant de votre compte Google Analytics et le dernier paramètres concerne le type de campagne pour simplifier nous allons mettre direct.
Voyons d’abord dans le HitBuilder comment nous allons construire à cette requête, dans un premier temps on construit les paramètres, en fait c’est la chaîne de paramètres que vous avez envoyer, ensuite vous allez cliquer sur le bouton Valider pour valider l’intégrité de cette requête et si tout se passe bien vous pouvez envoyer grâce à un bouton vers google Analytics la requête.
Pour visualiser le résultat de cette requête, basculer dans la vue temps réel de Google Analytics, vous aurez un retour immédiatement
Construire requêtes dans le Hitbuiler et cliquer sur Validate Hit
Allez ensuite sur votre interface Google Analytics dans le raport temps réel pour voir le résultat.
Étant donné que vous avez envoyé vraiment une requête vers votre serveur Google Analytics virgule les données Google Analytics de votre site de production seront affectés. Mais en développement vous pouvez vous permettre d’envoyer quelques données de test sont vraiment pollué les données de votre analytique.
Maintenant que l’on a réussi à envoyer une requête et à la visualiser grâce au graphique trafic temps réel de Google Analytics, on va essayer de faire une requête maintenant avec un script côté serveur. Attention, il y a un paramètre qui ne faut pas omettre et qui est le paramètre dp comme document path, je ne l’ai pas fait la première fois et aucune donnée n’a été envoyée, ce n’est pas évident car si vous en mettez ce paramètre dans le tuto le HitBuilder, il va dire que la chaîne de requête est valide alors que aucune donnée n’a été envoyée, alors que dans la documentation de référence il est bien dit que dp et dh sont obligatoires dh étant le Host (nom de domaine).
Bien que cet exemple soit très simple, le plus simple possible, il nous faut quand même 6 paramètres pour compléter la requête. Avant d’aller plus loin vers les scripts côté serveur, regardons quand même comment est fait une requête de type e-commerce et transactionnelle puisque c’est le but de cet article c’est-à-dire qu’on voudrait identifier les transactions e-commerce grâce à un script côté serveur.
Je prendrai l’exemple du logiciel de e-commerce PrestaShop. dans le logiciel Prestashop les transactions sont identifiées par le numéro de commande (et non le numéro de panier), par exemple pour une commande dont le numéro de panier est 3012, le numéro de transaction est 3012.
Dans Google Analytics, vous pouvez voir les transaction dans Conversion > Transaction.
ti : transaction id
ta : transaction affiliation, ou le nom de la boutique
tr : transaction revenue,
ts : transaction shipping, frais de port
tt : transaction tax
cu : currency
ti : transaction id, bien sûr si vous voulez que l’on sache dans quelle transaction cet item a été acheté !
in : item name
ip: item price
iq : item quantity
ic : item code (la référence de l’article)
iv : item category
cu : currency
Lorsqu’on envoie vers google analytics un item, il faut spécifier bien sûr le numéro de la transaction à laquelle il est associé vous spécifiez un sous-total, mais attention il faut que lorsque vous envoyez les items du panier, le total des items doit être cohérent avec le montant de la transaction, je vous laisse faire ça à côté serveur, tout ceci pour vous dire que vous pouvez avoir une incohérence entre la transaction le montant de la transaction est le total des items du palier, le système vous le permet.
Url de validation : https://www.google-analytics.com/debug/collect?tid=fake&v=1 Elle ne diffère de la véritable url que de /debug/ Url d'envoi de requêtes : https://www.google-analytics.com/collect?tid=fake&v=1
Lorsque vous forger une requête et de vous envoyer vers le serveur de Google analytic même si elle échoue n’aurait pas de message d’erreur en retour.
C’est pour cela que Google Analytics vous propose une adresse pour tester vos requêtes.
Attention j’ai noté que même si une requête est bien formatée et qu’elle ne retourne pas d’erreur en mode débogage, ceci ne veut pas dire que vous avez réussi votre requête. J’ai eu le cas où j’ai essayé pour une première fois d’envoyer une requête transaction où je n’ai pas inclu tous les paramètres « optionnels » , la requête n’a rien donné, j’ai vérifié en mode débogage j’ai eu un retour ok mais je n’avais toujours rien dans le rapport de Google Analytics.
Finalement j’ai relu la documentation j’ai pris l’exemple et j’ai réussi ma requête comme quoi il faut toujours se reporter à la documentation et bien la lire.
Beaucoup d’exemples de la documentation officielle pour aide mémoire des différentes type de requêtes.
Measurement protocol n’est pas limité au web, les applications Android peuvent utiliser l’API de Measurement Protocol. Les requêtes en POST ainsi que GET peuvent être utilisées.
J’espère vous avoir aidé dans votre quêtes du tracking intégrale de toutes les transactions, en particulier les transaction de clients pressé (souvent en BtoB) qui ne reviennent même pas vers le site d’origine, tellement ils ont confiance en leur fournisseur.
Il est absolument important de pouvoir tracker toutes les conversion afin de mesurer le retour sur investissement des campagnes de marketing. Sans mesure on ne peut rien améliorer.
Cliquer sur le bouton vert pour envoyer la requêteEnvoi d’une transactionEnvoi d’un item de transaction
Aujourd’hui le moteur de recherche Google veut faire de la vitesse de chargement d’un site web un critère de ranking dans les SERPs.
Ce n’est pas idiot, et de toute façon, sans même parler de moteur de recherche, il est important d’avoir un site web qui va vite.
Dans le domaine du e-commerce par exemple, il ne faut pas que la vitesse de chargement dépasse 4 secondes.(les puriste disent 2), mais on va dire 3 (coupons la poire en deux) c’est ok.
Le problème est quand le site de e-commerce devient grand, quand il y a beaucoup de gens qui visitent le site (forcément vous avez un site qui marche sinon), et de même il n’y a pas que des humains qui vous rendent visite il y a aussi les spiders !
Entre Google bot qui passe toutes les minutes ou toutes les 10 secondes, les bots de majesticSEO ou de Ahrefs, archive.org etc, votre Apache hé bien il est surchargé.
Vous aurez beau optimiser les facteurs suivants : compression GZIP, mise en place d’un cache, utilisation de serveur de médias, de CDN, de minification des scripts, de mise en place de javascript à la fin, ces solution ont une limite à la fin, cela ne suffira pas.
C’est quoi Nginx? c’est un serveur web comme Apache, écrit par un Russe, il est plutôt peu gourmand en ressource, et il est rapide pour servir des fichiers statique. Statique? vous dites Cache? hé bien c’est pas loin !
Le secret ici est de servir tout ce qui est statique par NGINX et ce qui est dynamique par Apache.
Nginx est dans ce cas ce qu’on appelle un reverse proxy, ou serveur frontal. Définition sur cette page.
Donc avec Nginx on peut faire ces 5 choses :
Nous allons donc dans les lignes qui suivent, installer Nginx sur un serveur dédié qui tourne déjà avec le serveur web Apache, ils seront donc sur la même machine.
Là je suppose que vous avez des connaissance en shell, c’est très simple, il faut installer Nginx avec la commande suivante :
$ apt-get install nginx
il faut que vous vous loggiez en root pour faire marcher cette commande.
Une fois que Nginx est installé, il y a déjà un fichier de configuration example. Sauvegardez ce fichier sur votre ordinateur pour le réutiliser si besoin, mais on n’aura pas besoin, cependant renommez ce fichier au nom de votre site web. J’utilise Winscp pour manipuler de manière sécurisée les fichiers depuis mon ordinateur en effet le faire en ligne de commande est assez fastidieux.
Le fichier de configuration de site web de Nginx doit être installé dans le répertoire (pour les Debian) , comme pour Apache 2, dans sites-available et sites-enabled.
« Available » veut disponible et « enable » veut dire activé. En fait si vous avez un fichier dans « enabled », ça veut dire que le site est en ligne.
Le fichier dans sites-enabled est un lien symbolique vers le fichier de configuration du répertoire site-available.
Nginx en ce qui concerne les webmasters a deux fonctions bien distinctes, soit vous l’utilisez pour remplacer Apache (ce dernier est donc à virer) soit vous l’utiliser comme reverse proxy (thème de cet article), donc il fonctionnera parallèlement à Apache !
Notion fondamentale : Si Nginx et Apache fonctionnement en même temps, pour éviter tout conflit, Apache qui écoute habituellement sur le port 80 doit changer de port, on le mettre sur le port 8080, et Nginx sur le port 80, ce qui suppose une modification du fichier de configuration d’Apache comme on le verra plus tard dans cet article.
Imaginons que je veuille proxier phpninja.fr
server {
listen 80; ## listen for ipv4
server_name phpninja.fr www.phpninja.fr;
access_log /var/log/nginx/localhost.access.log;
location / {
root /home/phpninja.fr/public_html/;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:8080
#
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://88.191.158.109:8080;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
Listen 80 : on dit à nginx d'écouter sur le port 80
Server name : on donne les sites à proxier
Un fichier de log est spécifié, utile quand vous voulez débugger.
Dans Location /, vous lui dites où se trouve la racine du site web, le fichier index, et try files sert à dire à Nginx de proxier toutes les requêtes, si Nginx ne peut pas, alors il va passer le requête à Apache.
Location ~ \.php$ est trè_s important, il dit qu’il faut passer les fichier php à Apache. Comme dit plus haut Nginx ne vient pas avec le support de php, donc il est logique que ce soit Apache qui le fasse.
Proxy pass indique l’adresse IP du serveur auquel les requêtes sont passée (adresse IP de votre virtual host Apache).
Enfin location ~ /\.ht sert à éviter tout conflit dans l’interprétation du fichier type htaccess, ht_password etc dans le cas ou Nginx et Apache en ont.
Il faut maintenant qu’Apache écoute sur le port 8080, c’est la seule modification que vous aurez à faire. Dans le cas de Debian, il faut modifier le fichier ports.conf comme suit:
Listen 88.191.158.109:8080 Listen 443
Il faut aussi modifier NameVirtualHost
NameVirtualHost 88.191.158.109:8080
Faire la manip sur tous les fichiers Vhost même si vous ne voulez pas les proxier. Dans tous les cas il faut le faire car Apache doit écouter sur 8080 au lieu de 80, sinon le démarrage de Nginx sera problématique.
ensuite il faut installer le module rpaf.
Il sert à envoyer à Apache l’IP du navigateur et non celui de Nginx, sinon vous perdrez cette information.
RPAFenable On RPAFsethostname On RPAFproxy_ips 213.246.45.34
spécifier l’adresse publique du proxy.
Redémarrer Apache et Nginx avec les commandes :
service apache2 restart service nginx restart
Si tout se passe bien, vous allez voir une accélération de votre site ! Et encore on n’a pas encore fait les optimisations de Nginx !
Pour vous amuser, vous pouvez mettre un fichier info.php avec l’instruction phpinfo().
Dans la page qui s’affichera, vous verrez la signature de Apache.
Par contre si vous avez Firebug, ou Httpfox, vous verrez la réponse du serveur le nom Nginx.
Voilà un problème que j’ai eu récemment que j’ai résolu en cherchant sur le net.
Lorsque je me connecte via SSH à mon dédié, après que le mot de passe soit entré, le temps d’attente peut être très long une minute ou plus pour accéder au shell.
J’ai jusque là contourné le problème en ouvrant une seconde fenêtre et en me connectant au même compte et fermer la première pour aller plus vite.
En fait il s’avère que le problème soit dû à un lookup DNs un peu long. Pour remédier à ce problème, il faut ajouter une directive dans le fichier de configuration du SSH.
Il faut ajouter cette ligne ou la décommenter :
UseDNS no
là votre connexion devrait être beaucoup plus rapide.
Il est souvent frustrant lorsqu’on débute en PHP d’avoir une erreur 500 suite à un script qui met du temps à s’exécuter.
Dans la littérature PHP, vous avez la fonction set_time_limit(int $secondes), qui permet d’aller au-delà de la valeur par défaut de 30 secondes. Mais il y a une exception, si votre installation PHP est en safe mode, ça ne marche pas. On vous recommande d’aller dans le fichier php.ini pour configurer la variable d’environnement max_execution_time.
Mais pour des raisons de configuration, il se peut que même cela ne marche pas. Il faut aller encore plus bas au niveau d’Apache, et triturer une autre variable d’environnement.
Si dans les logs Apache vous avez le message suivant :
mod_fcgid: read data timeout in 31 seconds
lisez ce qui suit si vous êtes sous Webmin mais à transposer pour d’autres panels:
Sous Webmin > Servers > Apache Webserver > Global configuration > Edit Config File
Il faut aller dans le fichier de configuration d’Apache et trouver la ligne qui contient :
IPCCommTimeout
au lieu de laisser la valeur par défaut à 31 passez la à 100 pour éviter des erreurs 500, dû à un dépassement des 31 secondes.
Pourquoi je vous dis ça? c’est parce que en googlant ce topic j’ai jamais réussi en runtime à lever cette limite, cette méthode est sûre.
Cette directive se trouve dans le le fichier de configuration Apache global ou sur chaque Vhost.
Mais devez vous toucher à cette varaible?
Il est des CMS ou l’on n’a pas envie de voir comment c’est fait, donc oui on va toucher à al configuration. Mais si vous êtes un peu plus aguerris, je vous propose en recvanche d’exévcuter vos script php en ligne de commande !
Si vous êtes sous Linux, vous pouvez exécuter n’importe quel script php de cette façon :
$ php monscript.php
En mode ligne de commande, (CLI : command line interface), vous n’avez pas de limite de durée comme en mode web. Pourquoi? parce qu’en mode web, vous avez une contrainte, en effet les internautes ne doivent pas poireauter devant votre site web, et il est donc considéré comme anormal que des scripts mettent des minute à s’exécuter.
Voici comment créer un lien qui va ouvrir un client email avec déjà le texte du email écrit dedans, utili si vous automatiser la création d’email personnalisés.
L’astuce consiste à mettre un lien mailto au lieu de http://, et de mettre le email cible.
Ensuite on introduit deux paramètres : Subject et body.
Le caractère esperluette doit être url encodé, en php c’est avec la fonction urlencode qu’on fait ça.
Le caractère %0A%0A est un retour chariot.
Vous aurez peut être envie un jour de pouvoir uploader des fichier dans un serveur web, afin de mettre en place une nouvelle version d’un script. Si vous pouvez automatiser cette tâche, vous aurez un grand gain de productivité. On peut imaginer que vous ayez déployé un CMs sur plusieurs serveurs web, et que vous vouliez mettre en place une mise à jour en trois fois rien de temps.
Ceci est possible en php, votre langage de programmation favori. Fini donc les laborieuses connexions à la main avec Filezilla, on va automatiser ça.
Ce n’est pas l’option la plus simple. En effet, il faut disposer de la bibliothèque CURL (pas si difficile que ça en fait), mais surtout écrier plusieurs lignes de php :
$ch = curl_init();
$localfile = 'test.txt';
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, 'ftp://login:password@www.monsite.com/public_html/'.$localfile);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);
if ($error_no == 0) {
$message = 'File uploaded successfully.';
} else {
$message = "File upload error: $error_no. Error codes explained here http://curl.haxx.se/libcurl/c/libcurl-errors.html.";
}
echo $message;
?>
ce script va charger le fichier test.txt de votre disque dur vers le serveur FTP et donc votre site web !
Mais comme toujours avec CURL, c’est fastidieux, il faut instancier l’objet CURL, injecter de paramètre et l’exécuter.
Nos allons voir que c’est plus intuitif avec les fonction FTP de PHP.
En effet pour faire la même chose que le script ci-dessus:
// Ouverture de quelques fichiers pour lecture $file = 'somefile.txt'; $fp = fopen($file, 'r');
// Mise en place d'une connexion basique $conn_id = ftp_connect($ftp_server);
// Identification avec un nom d'utilisateur et un mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Tente de charger le fichier $file
if (ftp_fput($conn_id, $file, $fp, FTP_ASCII)) {
echo "Chargement avec succès du fichier $file\n";
} else {
echo "Il y a eu un problème lors du chargement du fichier $file\n";
}
// Fermeture de la connexion et du pointeur de fichier
ftp_close($conn_id);
fclose($fp);
?>
Ici on crée une connexion FTP comme si on le faisait pour une connexion Mysql, on ouvre le fichier en local et on le met sur le serveur FTP. Avouez que c’est quand même plus lisible !
Il y a des moment où vous ne pouvez plus faire appel à Phpmyadmin, car l’interface web a des lilmite lorsque vous devez manipuler de larges portions de données (en Gigaoctet).
Il faut donc revenir au bon vieux shell Linux.
mysql -u root -p
Après cette commande, vous devez entrer votre mot de passe root (notez que n’importe quel compte peut être administrateur de votre base si vous l’avez créé comme tel.
Vous devez le faire sinon vous ne pouvez pas requêter sur votre base.
use `ma_base`;
N’oubliez pas de taper le point virgule qui indique la fin de la commande sql. Si vous avez tapé ENTRER déjà ce n’est pas grave vous pouvez le faire.
A partir de maintenant, vous allez être en terrain familier. Le sql n’a pas changé, se rappeler juste qu’il faut mettre le point virgule à la fin de la commande.
Maintenant que vous connaissez la base, et que vous pouvez requêter en ligne de commande comme les pro, vous allez vraiment apprécier la vitesse d’exécution sur de grosse bases de données, là où phpmyadmin rame, vous irez en vitesse normale !
Pour vous déconnecter
Taper exit;
Les webmasters ont besoin lors de leur migration de voir où en est le pointage des DNS.
Souvent on est confronté depuis son ordinateur de travail à l’ancienne version de son site après avoir pointé les DNS vers un nouveau serveur DNS.
Vous shootez une demande de soutien à votre hébergeur, la réponse est toujours du type attendez 24 à 48 heures.
Dans la plupart du temps, on n’a pas besoin d’attendre 24 heures que les DNS se propagent, c’est quelques heures.
Alors pourquoi en dépit de cela après 48 heurs, on est toujours sur l’ancienne version? voire une page d’erreur du nouveau serveur d’hébergement?
Si vous travaillez avec Firefox, cet explorateur possède un petit cache qu’on appelle cache DNS, qui mémorise l’information du DNS. C’est ce cahce qui pose problème, pour résoudre ce problème de cache, on vous conseille souvent de faire about:config dans la barre d’adresse, solution classique, ( faites une recherche dans Google, on vous expliquera ça) mais cela ne marche pas toujours !
Même en remettant network.dnsCacheEntries à 0 et network.dnsCacheExpiration à 0 aussi, cela ne marche pas !
J’en ai fait l’expérience, et j’ai dû pour résoudre ce problème en vidant l’historique de Firefox.
Allez dans Historique > supprimer historique récent, vous aurez une fenêtre pour cocher les élément à supprimer, vous pouvez laisser cookie et connexion active (cela vous évitera de vous relogger dansles services web, dans le cas échéant, videz tout !).
Et c’est une solution qui garantit de marcher !
Explode et Implode en PHP sont deux fonctions bien pratiques, qui permettent de transformer une chaine de caractères en tableau et vice et versa.
En javascript il existe des équivalents, split() et join() .
Leur usage est tout simple:
var str = "item1,item2,item3,item34";
str.split(',');
Ce qui va engendrer un tableau de type :
Array(item1, item2,item3,item4);
Et pour le cas de join() la syntaxe est la suivante
array tab = new Array(item1,item2);
var str = tab.join('.');
et on aura un string de type « item1.item2 »
C’est très simple, il faut vous logger sur votre shell via putty en mode root (pour pouvoir installer des extension sous Linux il faut être en mode root.
Et ensuite tapez cette commande :
$ apt-get install php5-gd
Ou alors si vous n’êtes pas connecté en root, tapez cette commande et vous serez invité à entrer le mot de passe root.
$ sudo apt-get install php5-gd
l’installation dur une trentaine de seconde le temps de reconfigurer (automatiquement) le serveur web Apache
Les requêtes lentes sont les slow queries, pour les voir il faut créer le fichier de log appelé slow query log.
Pour ce faire il faut éditer votre fichier my.cnf, le fichier de configuration de mysql et ajouter les lignes suivantes:
log_slow_queries = 1;
slow_query_log_file = ;
Toutes les requêtes qui prennent plus de 1 seconde seront loggées. Relancez le serveur mysql avec :
/etc/init.d/mysql restart en utilisateur root
Une fois que vous avez réussi à générer le fichier log des requêtes lentes, il faut l’analyser.
Vous pouvez le faire en lisant les logs brutes ou alors utiliser un programme installé d’office avec Mysql appelé mysqldumpslow.
Une fois que vous avez identifié et triés celles qui vous intéressent il faut lancer la requêtes dans un EXPLAIN.
http://stackoverflow.com/questions/11606972/how-can-i-enable-slow-query-log-on-my-server
une table fragmentée c’est comme un disque dur fragmenté, l’information est éparpillée.
Donc il faut la défragmenter. Le problème c’est comment trouver les tables fragmentée?
Cette petite requêtes sql devra faire l’affaire :
select TABLE_NAME,Data_free
from information_schema.TABLES
where TABLE_SCHEMA NOT IN ('information_schema','mysql')
and Data_free > 0;
Une fois que vous avez des tables listée exécutez la requête suivante sur chaque table :
optimize table la_table_fragmentee
Voici une commande linux pour connaitre le nombre de connexions simultanée acceptable par votre serveur:
#ab -c 5 -n 10000 http://www/domain.com/fichier.php
il est important de spécifier le fichier, http://www.domain.com/ ne marche pas
Pour installer mysqltuner sous Debian:
apt-get install mysqltuner
ensuite entrez
#mysqltuner
il est conseillé d’attendre d’avoir au moins 24 heure de stats mysql pour faire des analyses.
Mysqltuner est un premier pas pour dégrossir les optimisations les plus évidentes pour mysql.