“Damien, au lieu de Twitter écris des posts sur Australopitech … Damien fais un billet sur Australopitech … Damien tu ne montre pas l’exemple …“, gnia, gnia, gnia.
Et bien soit, je vous propose donc de commettre une série de posts sur Magento et son API.
Pour commencer par le commencement, voyons comment créer un batch Magento qui servira à nos futurs articles sur l’API Magento …

Un fichier batch est en général exécuté en ligne de commande ou par crontab. Fonctionnant dans l’environnement PHP CLI, il bénéficie de son propre php.ini et à l’énorme avantage de ne pas être dépendant d’Apache.
On peut exécuter un fichier CLI de 2 façons :
- En appelant la commande PHP et en lui passant le fichier exécuté en paramètre (fonctionne aussi sous Windows)
- En rendant le fichier directement exécutable
J’opte en général pour la deuxième solution. Pour ce faire il faut d’abord créer le fichier et lui donner les droits en exécution dans un dossier non exposé en HTTP :
> mon_batch.php chmod +x mon_batch.php
Où créer mon fichier batch ? Evidement, exposer le fichier batch dans un dossier accessible par Apache serait une erreur grossière. Il est d’usage de le positionner juste au dessus des fichiers Magento, un niveau au dessus du DocumentRoot Apache ou dans un sous dossier de Magento protéger par un HTaccess.
En éditant le fichier -avec son Notepad++ ou VIM- préféré on indique au système avec quel interpréteur exécuté le fichier (sur une Debian avec Zend Server backporté « /usr/local/zend/bin/php »), cette première ligne s’appel le shebang :
#!/usr/local/zend/bin/php < ?php // mon code batché echo "Hello world ! \n" ;
Le fichier est maintenant exécutable. Bootstrapons l’environnement Magento avec les trois lignes suivantes :
define('MAGENTO', realpath(dirname(__FILE__) . '/html')); require_once MAGENTO . '/app/Mage.php'; Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
A ce stade le script dispose dans son contexte global de l’ensemble des ressources offertes par l’API Magento.
Les deux lignes suivantes permettent d’avoir une meilleure visibilité de l’exécution du script en affichant les erreurs PHP et en désactivant la bufferisation de sortie :
ini_set('display_errors', 1); ob_implicit_flush(true);
Enfin, si le batch doit créer des fichiers (ex. : importation d’images produits, exportation de fichiers CSV, …) il est utile de s’assurer que le umask appliqué par PHP aux nouveaux fichiers sera le bon :
umask(0);
Et voilà, le fichier est prêt à être exécuté. Pour ce faire il suffit de l’appeler comme n’importe quel exécutable Linux :
./mon_batch.php
Il est toujours utile de loger les événements ou erreur d’exécutions capturées par le programme, voir simplement de tracer les actions en phase de débogage. Rien de plus simple :
// ma logique par là Mage::log($message); // suite de ma logique par là ...
Ce qui nous donne :
#!/usr/local/zend/bin/php < ?php define('MAGENTO', realpath(dirname(__FILE__) . '/html')); require_once MAGENTO . '/app/Mage.php'; Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); ini_set('display_errors', 1); ob_implicit_flush(true); umask(0); Mage::log("It works !");
Voilà pour cette introduction qui servira de cadre rapide aux snippets à venir, à bientôt.

















[...] Le code proposé ci-dessous est exécuté dans un batch PHP créer sur le modèle décris dans l’article Comment créer un batch Magento. [...]
[...] Le code proposé ci-dessous est exécuté dans un batch PHP créer sur le modèle décrit dans l’article Comment créer un batch Magento. [...]
[...] Le code proposé ci-dessous est exécuté dans un batch PHP créé sur le modèle décrit dans l’article Comment créer un batch Magento. [...]
[...] Le code proposé ci-dessous est exécuté dans un batch PHP basé sur le modèle décrit dans l’article Comment créer un batch Magento. [...]
Un umask(0); n’est il pas un peut violent ?
Es ce que ça donne les droits en 777 pour tous les fichiers crées (sans paramètre en plus) ou es ce que je me trompe ?
Répondre
@Mr.MoOx,
Le umask(0) est donné à titre d’exemple bien sûr et doit être modifié en fonction des besoins spécifiques du batch.
http://php.net/manual/fr/function.umask.php
Répondre