Installer la bibliothèque ImageMagick pour WAMP 3

image magick

Je mets la méthode là qui marche car je me suis pas mal emmerdé pour l’installer.

ImageMagick c’est quoi?

C’est un bibliothèque de fonction pour manipuler les images, en gros tout ce que vous pouvez faire avec Photoshop, vous pouvez le faire avec ImageMagick. Cette bibliothèque est écrite en C/C++, elle est très répandue et vous la trouverez sur toutes les plateformes Windows, Linux et Mac.

Elle est aussi disponible dans tous les langages majeurs, dont le PHP. Elle est installable dans un environnement de production comme en développement. Pour la majorité d’entre nous, pour la production c’est souvent un serveur Linux, et pour le développement c’est en majorité un PC sous Windows.

Et comme solution de développement, sur Windows j’utilise WAMP. Télécharger sur Sourceforge gratuitement.

Pour cerner encore plus le cas de figure que je vais traiter, c’est sous PHP 5.6 et 7, mais il reste encore à vérifier deux choses : votre installation WAMP est elle en 32 ou 64 bits? et est elle installée en Thread Safe ou Non Thread Safe?

Pour le Thread Safe ou non, reportez vous au lien, pour ce qui est du 32 ou 64 bits, rien de spécial à savoir sur la technologie, mais vous devez savoir si votre installation WAMP est en 64 ou 32 bits.

Installer Imagemagick, les fichiers binaires

Ce sont les fichiers qui vont vraiment faire les manipulation des images, la bibliothèque Php va faire appel à eux. Il consiste en un fichier .exe à télécharger sur ce site.

Cliquez pour installer sur votre ordinateur, et allez voir les variables d’environnement (dans Windows tapez touche “WINDOWS” à côté de la touche controle, et “PATH”pour voir où c’est installé). Si PATH contient le chemin de ImgeMagick, normalement WAMP doit les voir.

Après l’installation de ImageMagick pour Windows, ouvrez une console DOS, tapez convert -version, vous avez normalement un message sur la version de convert. Cette manipulation sert à vérifier que c’est bien installé.

Installer la bibliothèque PHP qui va faire appel à ces exécutables

Télécharger  sur le site officiel, c’est là où il va falloir savoir si c’est en 32 ou 64 bits, et surtout si c’est en Thread Safe ou non en Thread Safe (voir le lien précédent pour le savoir)

Dézippez et copier le fichier vers le répertoire c:/wamp64/bin/php/ext et modifier votre fichier php.ini en ajoutant ces deux lignes :

[Imagick]
extension=php_imagick.dll

Redémarrez WAMP. Faites un phpinfo() et vous devriez voir cette portion d’information :

Si vous voyez ça bingo ! A noter que le menu de WAMP ci dessous ne l’affiche pas, ce n’est pas grave, ce qui compte c’est le phpinfo().

image magick

Je vous le dis car j’ai perdu des heures en essayant de me baser dessus !

Autre tuto plus ancien

Supplément :

Pour connaitre en ligne de commande la liste des modules chargés

$ php -m
Note : vous ne verrez pas Imagemagick

Utilisation de ImageMaick dans vos script PHP

Installer correctement la DLL pour en configurant dans le php.ini est u vrai challenge (je n’ai pas réussi pour ma configuration), cependant, pas de panique vous pouvez très bien utiliser dans vos scripts php  (après avoir redémarré votre ordinateur), en utilisant la fonction exec(), qui exécute les commande shell.

Exemple pour exécuter une conversion d’image d’un format à un autre :

exec('convert   image.gif  -negate  output.gif');

 

 

0 comments

Module PHP quelle version utiliser ? Thread Safe ou Non Thread Safe?

php

Tout pour bien sélectionner la version du module pour PHP

Le contexte technique fondamental en HTTP

Différents serveurs web mettent en œuvre différentes techniques pour traiter les requêtes HTTP entrantes en parallèle. Une technique assez populaire est d’utiliser des threads — c’est-à-dire, le serveur web va créer/dédier un thread unique pour chaque requête entrante. Le serveur web Apache HTTP supporte de multiples modèles pour traiter les requêtes, dont l’un (appelé MPM ouvrier) utilise des threads. Mais il supporte un autre modèle de simultanéité appelé MPM prefork qui utilise des processus — c’est-à-dire que le serveur web créera/dédiera un seul processus pour chaque requête.

Il existe également d’autres modèles de concurrence complètement différents (utilisant des connecteurs asynchrones et des E/S), ainsi que d’autres qui combinent deux ou même trois modèles. Pour répondre à cette question, nous ne nous intéressons qu’aux deux modèles ci-dessus, en prenant l’exemple du serveur HTTP Apache.

Connaissance nécessaire sur la façon dont PHP “s’intègre” avec les serveurs web

PHP lui-même ne répond pas aux requêtes HTTP réelles — c’est le travail du serveur web. Nous configurons donc le serveur web pour transférer les requêtes vers PHP pour traitement, puis nous recevons le résultat et le renvoyons à l’utilisateur. Il y a plusieurs façons de chaîner le serveur web avec PHP. Pour Apache HTTP Server, le plus populaire est “mod_php”. Ce module est en fait PHP lui-même, mais compilé comme un module pour le serveur web, et donc il est chargé directement à l’intérieur.

Il existe d’autres méthodes pour enchaîner PHP avec Apache et d’autres serveurs web, mais mod_php est le plus populaire et servira aussi à répondre à votre question.

Vous n’aviez peut-être pas besoin de comprendre ces détails auparavant, parce que les sociétés d’hébergement et les distributions GNU/Linux viennent avec tout ce qui est préparé pour nous.
Maintenant, quelle différence entre Thread Safe et non Thread Safe?!

Comme avec mod_php, PHP est chargé directement dans Apache, si Apache va gérer la simultanéité en utilisant son Worker MPM (c’est-à-dire, en utilisant Threads) alors PHP doit être capable d’opérer dans ce même environnement multi-thread — ce qui veut dire que PHP doit être thread-safe pour pouvoir jouer correctement avec Apache!

A ce stade, vous devriez penser “OK, donc si j’utilise un serveur web multi-threadé et que je vais intégrer PHP directement, alors je dois utiliser la version thread-safe de PHP”. Et ce serait une bonne idée. Cependant, il se trouve que la sécurité des threads de PHP est très contestée. C’est un terrain d’utilisation pour les initiés, si vous savez vraiment ce que vous faites.

Conclusion

Quand votre PHP est installé en CGI ou FastCGI, utilisez le Non Thread Safe, si c’est installé en tant que Module Apache, utilisez le Thread Safe

Au cas où vous vous poseriez la question, mon conseil personnel serait de ne pas utiliser PHP dans un environnement multi-threads si vous avez le choix!

Parlant seulement des environnements Unix, je dirais que heureusement, vous n’avez qu’ à penser à cela si vous allez utiliser PHP avec le serveur web Apache, auquel cas il vous est conseillé d’aller avec le MPM de préfork d’Apache (qui n’utilise pas de threads, et donc, thread-safe n’a pas d’importance) et toutes les distributions GNU/Linux que je connais prendront cette décision pour vous quand vous êtes Si vous allez utiliser d’autres serveurs web tels que nginx ou lighttpd, vous n’aurez pas la possibilité d’y intégrer PHP de toute façon. Vous allez voir comment utiliser FastCGI ou quelque chose d’égal qui fonctionne dans un modèle différent où PHP est totalement en dehors du serveur web avec plusieurs processus PHP utilisés pour répondre aux demandes à travers par exemple FastCGI. Dans ce cas, la sécurité des fils n’ a pas d’importance.

Comment savoir si PHP est installé en CGI ou en Module?

Pour voir quelle version de votre site web utilise, mettez un fichier contenant <? php phpinfo ();? > sur votre site et recherchez l’entrée API du serveur. Cela pourrait dire quelque chose comme CGI/FastCGI ou Apache 2.0 Handler.

fast CGI

Si vous regardez aussi la version en ligne de commande de PHP — la sécurité du thread n’a pas d’importance.

Enfin, si la sécurité du theading n’ a pas d’importance, quelle version devez-vous utiliser — Thread Safe ou Non Thread Safe? Je suppose que la version non-thread-safe est plus rapide et moins buggy, ou sinon ils auraient juste offert la version thread-safe et ne se seraient pas donné la peine de proposer ces deux alternatives !

 Supplément

Comment savoir si son installation php est Thread Safe ou non Thread Safe?

sur Linux
$ php -i | grep Thread

Sur Windows

$ php -i | find "Thread"

 

0 comments

Magento Comment créer une boutique en mode multiboutique

Je suppose que l’installation de Magento est terminée, et qu’il y a déjà la boutique de base. On va ajouter une nouvelle boutique.

Pour être plus précis, Magento fait la distinction entre le site web, la boutique et la vue. Pourquoi une telle distinction? C’est pour répondre à toutes les événtualités, tous les besoins, car Magento veut brosser large et être la solution pour beaucoup de commerçants.

{image magento multiboutique}

 

Créer le site web

System > Manage Stores, puis on va supposer que l’on va faire la totale, c’est à dire créer un site web, une boutique et une vue. Donc créer une site web, puis créez un Store, et enfin créez une vue.

ensuite la méthode rcommandée est de modificer le .htaccess et ajouter les lignes suivante :

SetEnvIf Host electronic\.domaine\.fr MAGE_RUN_CODE=electronic
SetEnvIf Host electronic\.domaine\.fr MAGE_RUN_TYPE=website

Ensuite allez dans la configuration de Magento, choisissez le scope dans la liste déroulante, une fois sur votre boutique nouvellement créée, General puis Web, changez l’url avec l’url dans Secure et Unsecure, par http://electronic.domaine.fr et https://electronic.domaine.fr.

 

Il vous faut créer un virtualhost dans le fichier de configuration d votre serveur (pour Apache c’est dnas httpd.conf).

Ensuite, par défaut il n’y a aucun produit dans votre nouvelle boutique, il faut brosser manuellement les produit que vous voulez voir figurer dnas votre nouvelle boutique, allez dans le produit, dans l’onglet website, cochez la case correspondant à votre boutique.

Comment régler des prix différents d’une boutique à l’autre dans Magento

PAr défaut les prix des produtis sont gérés de façon globalde. Pour gérer au niveau site, et permetre d’avoir des prix différents par site web, aller dans Configuration > Catalog > Price, mettre le Scope à website.

Comment cacher des catégories sans article dans le multiboutique?

Aller dans la catégorie pour la boutique en question, et mettre isActive à No.

 

 

0 comments

Comprendre le paramétrage de SuPHP

php

SuPHP est un module qui permet de d’exécuter des script php avec les permissions de leur propriétaire.

Par défaut, c’est l’utilisateur Nobody qui exécute les scripts php.

Le problème c’est que pour que Nobody puisse exécuter un script, il faut que le script php ait les droits 777, c’est à dire que tout le monde peut modifier le fichier, ce qui pose des risques de sécurité.

Donc SuPHP va interdire l’exécution des scripts php par le user nobody, et l’assigner en général au propriétaire du fichier.

Mais cela veut dire que chaque site web doit avoir un propriétaire?

En effet. Les panels d’administrations comme Virtualmin, lorsque que vous créez un virtual host, se chargent de créer un utilisateur sous Linux et donc un espace home pour ce même utilisateur. La racine site web est en général sous le répertoire /home/utilisateur/www.

0 comments

Un truc en PHP 5.3 que vous ne pouvez plus faire en PHP 5.4 multi define de la même constante

php

EN travaillant sur un script ecommerce ultra pourri mais qui est en prod et que je dois migrer vers un serveur avec une version PHP 5.4, je me suis aperçu qu’il y avait une erreur loggée dans error_log : il y avait deux définitions de la même constante. Et le scrit ne tournait donc pas sur le serveur, puisque après un test, avec un script php où je définissait deux fois la même constante, sur 5.3 ça tournait sans problème, la constante était aussi (presque) malléable qu’une variable, voici le script :

<?php
define('TO', "bonjour");
echo TO;
define('TO',"au revoir");
echo TO;
?>

sous PHP 5.3

$ php test.php
bonjourbonjour

Bien que la constante puisse être redéfinie, sa valeur  ne change pas.

sous PHP 5.4

$ php test.php
bonjourPHP Notice:  Constant TO already defined in /home/user/test.php on line 4
PHP Stack trace:
PHP   1. {main}() /home/user/test.php:0
PHP   2. define('TO', 'au revoir') /home/user/test.php:4

On voit que le premier echo est exécuté, mais que le second déclenche une notice (ça peut être une erreur fatale).

Je pense que c’est une bonne chose (absolument !), soyons logique une constante ne peut être changée alors pourquoi autoriser la redéclaration? Heureusement que ça a changé et que PHP soit un langage plus rigoureux.

 

Bonus :

En PHP 5.3 vous pouvez utiliser un index d’un tableau qui n’existe pas sans qu’il vous geule dessus,

ainsi :

<?php
echo $p[0];

ne vous avertira rien.

 

 

 

 

 

 

 

 

0 comments

Google Analytics Measurement protocole ou Google analytics côté serveur

Introduction au Measurement Protocol ou comment faire du Google Analytics côté serveur

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

Créer une visualisation d’une page

 

Google analytics Measurement protocol tutoriel

 

Allez ensuite sur votre interface Google Analytics dans le rapport temps réel pour voir le résultat.

 

Étant donné que vous avez envoyé vraiment une requête vers votre serveur Google Analytics, les données Google Analytics de votre site de production seront affectées. Mais en développement vous pouvez vous permettre d’envoyer quelques données de test sans vraiment polluer 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).

Envoyer un Hit de type événement

Cette fonction est intéressante car se déroule dans un cadre plus large. En effet un événement peut être général, comme un clic sur un bouton, un slider, une durée de visionnage. C’est applicable non seulement aux application web mais aussi toute application, comme une application pour smartphone ou une application Windows.

Event tracking Google Measurement protocol

Requêtes dans le Hitbuilder de type transactionnelle

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.

Envoi d’une 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

Envoi d’un item

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.

Measurement Protocol Validation Server

 

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

0 comments

Comment connaitre la base de donnée actuellement utilisée en Mysql

 

SELECT DATABASE() FROM DUAL
ou
SELECT DATABASE()

 

0 comments

CSS Grid introduction et tutoriel débutant

Aujourd’hui je vais vous présenter une technologie CSS émergence qu’on utilisera dans les années à venir pour faire du responsive design

La technologie s’appelle le CSS grid
Aujourd’hui pour faire du responsive design en a besoin d’un framework CSS
Le premier des frémoire CSS qui permet de faire du responsive design et bootstrap
Ensuite il y en a eu d’autres j’ai plus utilisé par exemple UIKIT et sémantiqueUI.

 

Mais le problème que je t’ai rencontré été que c’est vrai moi qui était en constante évolution, et passer de l’un à l’autre de ces framework était assez fastidieux, car j’ai utilisé pas la même syntaxe

Pourtant on peut faire du responsive design en CSS pure mais c’est assez fastidieux
il y a les media queries qui vous permettent de réaliser le responsive design.

Mais comme vous le savez le CSS c’est assez difficilement lisible.

 

Bien sûr il y a des solutions comme le sac que vous transpirer en CSS mais ce n’est pas encore la solution idéale

Sans parler que le CSS a beaucoup de hack il faut utiliser pour avoir le même design sur tout les navigateurs

Puis est apparu la technologie flexbox qui résout un peu le problème

Mais cette dernière technologie est unidimensionnel et notre page est à deux dimensions

C’est pour résoudre ses problèmes que le CSS grid a été inventé pour l’instant seulement Google Chrome et Firefox l’ont implémenté

0 comments

Magento comment mettre des produits sur la Homepage

A la différence des autres logiciels de ecommerce, avec Magento vous allez avoir du mal à mettre votre produit en page d’accueil, sans faire une manipulation bien particulière.

Afficher des produits d’une catégorie sur la page d’accueil

Allez sur la catégorie qui vous intéresse et regardez son ID vous en aurez besoin pour la suite.

Allez dans CMS > Pages > Home

Allez dans l’onglet Content et collez le bout de code suivant :

{{block  type="catalog/product_list" category_id="4"  template="catalog/product/list.phtml"}}

Update  !

Due à une mise à jour de sécurité, vous ne pouvez plus adopter cette méthode (plus exactement la SUPEE-6788), il faut toucher au xml du layout directement, donc dans la section Design de la page CMS, vous collez le bout de code suivant :


 

 

0 comments

Magento Création de compte impossible, page qui se recharge

Ce problème arrive lorsque vous mettez un thème personnalisé, mais pas que.

Magento pour tous ses formulaire utilise une clé invisible et générée aléatoirement pour éviter le CSRF (Cross Site Request Forgery). Imginez que vous faites un site sur un domaine au hasard qui n’est pas le domaine hébergeant Magento, mais don l’action est une url du site Magento, ceci permettra à tout le monde d’envoyer des données sans être sur votre site.

Cette clé appelé formkey, générée aléatoirement par Magento (donc qui change tout le temps) et connu donc seulement de Magento évite ce type de piratage.

Sur une installation Magento dont la création de compte marche, allezsur le code source de la page et recherchez le mot form_key, c’est une valeur cachée d’un attribut de la balise form.

 <?php


?>

J’ai rencontré le problème sur un thème dont la création de compte ne marchait pas, cet attribut n’était pas présent. Si malgré la présence de cette clé secrète, la  création de compte ne marche pas, c’est un autre problème.

Pour résoudre ce problème il faut insérer une ligne de php :


 

0 comments