{"id":87,"date":"2014-04-17T13:15:30","date_gmt":"2014-04-17T13:15:30","guid":{"rendered":"https:\/\/www.dafap.fr\/blog\/?p=87"},"modified":"2016-05-02T12:33:03","modified_gmt":"2016-05-02T12:33:03","slug":"wampserver-et-zendframework","status":"publish","type":"post","link":"https:\/\/www.dafap.fr\/blog\/developpement-php\/wampserver-et-zendframework","title":{"rendered":"WampServer et ZendFramework"},"content":{"rendered":"<p>Je d\u00e9veloppe plusieurs projets sous <em>Zendframework<\/em> 1 et 2. Par commodit\u00e9 j'ai choisi de mettre en place un\u00a0<em>virtualhost<\/em> par projet afin ce coller au mieux \u00e0 la configuration de production propre \u00e0 chacun de mes\u00a0clients.<\/p>\n<p>Jusqu'\u00e0 maintenant, j'utilisais pour le d\u00e9veloppement un <em>Zend Server Community Edition 5.6<\/em>\u00a0(licence gratuite) mais je n'ai pas trouv\u00e9\u00a0comment faire \u00e9voluer gratuitement les versions de <em>Php<\/em>. Aussi je viens d'installer <em>WampServer 2.4<\/em> comme serveur de d\u00e9veloppement, sous <em>Windows 7<\/em>. Il est compos\u00e9 de :<\/p>\n<ul>\n<li>Apache 2.4.4<\/li>\n<li>MySql 5.6.12<\/li>\n<li>Php 5.4.12<\/li>\n<li>PhpMyAdmin 4.0.4<\/li>\n<li>SqlBuddy 1.3.3<\/li>\n<li>XDebug 2.2.3<\/li>\n<\/ul>\n<p>Si les mises \u00e0 jour de <em>WampServer<\/em> semblent plus faciles \u00e0 g\u00e9rer, ce service semble l\u00e9g\u00e8rement plus lent (pas grave en d\u00e9veloppement) et sa configuration diff\u00e8re sensiblement de celle de Z<em>end Server<\/em>.<\/p>\n<p>Cet article d\u00e9taille les configurations que j'ai faites.<\/p>\n<h2>Configuration de MySql<\/h2>\n<p>Avant d'installer <em>WampServer<\/em>, il faut s'assurer que le service <em>MySql<\/em> n'est pas d\u00e9marr\u00e9, sinon l'installation risque \u00e0 bloquer au moment de la mise en place de <em>MySql<\/em>.<\/p>\n<p>Un <em>dump<\/em> des bases de donn\u00e9es est fait avant l'arr\u00eat du service <em>MySql<\/em> pr\u00e9c\u00e9dent.<\/p>\n<p>Une fois l'installation de <em>WampServer<\/em> termin\u00e9e, je constate que le service <em>MySql<\/em> fonctionne :<\/p>\n<p>&nbsp;<\/p>\n<pre>shell>mysql -uroot\r\nWelcome to the MySQL monitor. Commands end with ; or g.\r\nYour MySQL connection id is 6\r\nServer version: 5.6.12-log MySQL Community Server (GPL)\r\n\r\nCopyright (c) 2000, 2013, Oracle and\/or its affiliates. All rights reserved.\r\n\r\nOracle is a registered trademark of Oracle Corporation and\/or its\u00a0affiliates. \r\nOther names may be trademarks of their respective\u00a0owners.\r\nType 'help;' or 'h' for help. Type 'c' to clear the current input statement.\r\n\r\nshell><\/pre>\n<p>Reste quelques op\u00e9rations \u00e0 faire :<\/p>\n<ul>\n<li>cr\u00e9er un mot de passe pour root. J'utilise la console pour plus de facilit\u00e9 :\n<pre>shell> mysqladmin -u root password [votre mot de passe]<\/pre>\n<\/li>\n<li>s'assurer que le path de l'ordinateur\u00a0pointe bien sur le r\u00e9pertoire <em>bin<\/em> de la bonne version de <em>MySql<\/em> (chez moi, il pointait toujours sur la version pr\u00e9c\u00e9dente ce qui fait que <em>mysqladmin<\/em> et <em>mysqldump<\/em> ne correspondaient pas \u00e0 la bonne version).<br \/>\n<a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/variables-d-environnement.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-89 colorbox-87\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/variables-d-environnement-300x226.png\" alt=\"variables-d-environnement\" width=\"300\" height=\"226\" srcset=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/variables-d-environnement-300x226.png 300w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/variables-d-environnement-624x471.png 624w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/variables-d-environnement.png 757w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\n<\/a>(On en profite aussi pour rajouter le chemin de <em>php.exe<\/em> qui sera utile par la suite)<\/li>\n<li>recharger en premier le <em>dump<\/em> de la base <em>mysql<\/em> et ensuite ceux des autres bases.<\/li>\n<\/ul>\n<h2>\u00a0Configuration d'apache<\/h2>\n<p>Comme toujours, la configuration d'apache se trouve dans son r\u00e9pertoire <em>conf<\/em>, dans le fichier <em>httpd.conf<\/em>. On aura besoin de charger le module rewrite et de faciliter la cr\u00e9ation des <em>virtualhosts<\/em>. Pour cela, j'apporte les modifications suivantes :<\/p>\n<ul>\n<li>d\u00e9commenter la ligne suivante :\n<pre>LoadModule rewrite_module modules\/mod_rewrite.so<\/pre>\n<\/li>\n<li>ajouter la ligne suivante :\n<pre># Virtual hosts\r\n#Include conf\/extra\/httpd-vhosts.conf\r\nInclude \"C:\/Program Files\/wamp\/vhosts\/vhost_*.conf\"<\/pre>\n<p>Ainsi, chaque <em>virtualhost<\/em> sera configur\u00e9 dans un fichier ind\u00e9pendant du r\u00e9pertoire <em>vhosts<\/em> de <em>wamp<\/em>\u00a0et il n'y aura plus \u00e0 retoucher ce fichier <em>httpd.conf<\/em>. Le nom du fichier doit commencer par <em>vhost_<\/em> et l'extension est <em>.conf<\/em>.<\/li>\n<li>cr\u00e9er un <em>virtualhost<\/em> pour <em>localhost<\/em>.<br \/>\nEn effet, lorsqu'on cr\u00e9e un <em>virtualhost<\/em>, l'alias <em>localhost<\/em> ne fonctionne plus. Pour r\u00e9gler ce probl\u00e8me, je cr\u00e9e le\u00a0fichier <em>vhosts\/vhost_localhost.conf <\/em>suivant :<\/p>\n<pre># Virtual Hosts\r\n#\r\n# Required modules: mod_log_config\r\n\r\n\r\n    ServerAdmin webmaster@localhost\r\n    DocumentRoot \"C:\/Program Files\/wamp\/www\"\r\n    ServerName localhost\r\n    ServerAlias 127.0.0.1\r\n    ErrorLog \"C:\/Program Files\/wamp\/logs\/apache_error.log\"\r\n    CustomLog \"C:\/Program Files\/wamp\/logs\/access.log\" common\r\n<\/pre>\n<p>La d\u00e9finition des droits de ce r\u00e9pertoire est contenue dans <em>httpd.conf<\/em> donc on n'a pas besoin d'y retoucher.<\/li>\n<li>exemple d'un <em>virtualhost<\/em> pour un projet <em>jobeet<\/em> utilisant <em>Zendframework<\/em> 2 :\n<pre># Virtual Hosts\r\n#\r\n# Required modules: mod_log_config\r\n\r\n\r\nServerAdmin webmaster@jobeet.dev\r\nDocumentRoot \"D:dafapDeveloppements Eclipseexemple_jobeetpublic\"\r\nServerName www.jobeet.dev\r\nServerAlias jobeet.dev\r\nErrorLog \"C:\/Program Files\/wamp\/logs\/jobeet_error.log\"\r\nCustomLog \"C:\/Program Files\/wamp\/logs\/jobeet_access.log\" common\r\nSetEnv APPLICATION_ENV \"development\"\r\n<Directory \"D:dafapDeveloppements Eclipseexemple_jobeetpublic\">\r\nDirectoryIndex index.php\r\nAllowOverride All\r\nRequire all granted\r\n\r\n<\/pre>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-95 colorbox-87\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important-150x150.jpg\" alt=\"important\" width=\"150\" height=\"150\" title=\"important\" srcset=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important-150x150.jpg 150w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important.jpg 256w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>Passant de la version 2.2 \u00e0 la version 2.4 d'apache, on notera ici la n\u00e9cessit\u00e9 de se r\u00e9f\u00e9rer \u00e0 la <a href=\"http:\/\/httpd.apache.org\/docs\/2.4\/upgrading.html#run-time\" target=\"_blank\">documentation d'Apache<\/a> pour remplacer les directives <em>Order<\/em>, <em>Allow<\/em> et <em>Deny<\/em> par la directive <em>Require<\/em>.<\/p>\n<p>Il peut \u00eatre int\u00e9ressant pour les projets qui n'utilisent pas <em>Zendframework<\/em> de rajouter dans le bloc <strong>&lt;Directory&gt;<\/strong> la ligne :<\/p>\n<pre>Options Indexes Multiviews<\/pre>\n<p>afin de pouvoir lister le contenu des r\u00e9pertoires (nous sommes sur un serveur de d\u00e9veloppement). Cela n'a pas d'utilit\u00e9 avec <em>Zendframework<\/em> puisque tout d\u00e9marre de\u00a0<em>public\/index.php<\/em>.<\/p>\n<h2>Configuration de PHP<\/h2>\n<p>La sp\u00e9cificit\u00e9 de <em>WampServer \u00a0<\/em>est d'utiliser deux fichiers <em>php.ini,<\/em> l'un \u00a0pour la console (pour moi dans le dossier <em>phpphp5.4.12<\/em>) et l'autre pour le serveur web (pour moi dans <em>apacheApache2.4.4bin<\/em>). Or l'activation d'une extension par l'outil d'administration de <em>wamp<\/em> n'intervient que sur le fichier <em>php.ini<\/em> d'<em>apache<\/em> ... et encore, de fa\u00e7on imparfaite.<\/p>\n<p>Pour activer une extension, il faut d\u00e9commenter la ligne de cette extension dans les deux fichiers <em>php.ini<\/em>.<br \/>\n<a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-95 colorbox-87\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important-150x150.jpg\" alt=\"important\" width=\"150\" height=\"150\" title=\"important\" srcset=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important-150x150.jpg 150w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/important.jpg 256w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>Pour l'extension <em>intl<\/em>, il faut en outre copier les fichiers <em>icu*.dll<\/em> du dossier <em>phpphp5.4.12<\/em> dans le dossier <em>apacheApache2.4.4bin<\/em>. Sans cela, <em>apache<\/em> ne charge pas cette extension dans <em>php<\/em>.<\/p>\n<p>Ne pas oublier de red\u00e9marrer les services apr\u00e8s toute modification de <em>php.ini<\/em>.<\/p>\n<h2>Installation de PEAR<\/h2>\n<p>Bien \u00e9videmment, on aura besoin de <em>pear<\/em>, ne serait-ce que pour effectuer des tests unitaires avec <em>PhpUnit<\/em>... et <em>pear<\/em> n'est pas\u00a0dans le paquet d'installation de <em>WampServer<\/em>.<\/p>\n<p>Voici la proc\u00e9dure \u00e0 suivre :<\/p>\n<ul>\n<li>t\u00e9l\u00e9charger <a href=\"http:\/\/pear.php.net\/go-pear.phar\" target=\"_blank\"><em><strong>go-pear.phar<\/strong><\/em><\/a> et l'enregistrer dans le r\u00e9pertoire de la version de <em>php<\/em> (celui qui contient <em>php.exe<\/em> - ici, j'ai le dossier <em>php5.4.12<\/em> au moment o\u00f9 je r\u00e9dige cet article).<\/li>\n<li>ouvrir une console (d\u00e9marrer \/ cmd) et se placer dans ce r\u00e9pertoire et lancer la commande :\n<pre>php go-pear.phar<\/pre>\n<p><a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-dossier-php.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-105 colorbox-87\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-dossier-php.png\" alt=\"console-dossier-php\" width=\"676\" height=\"339\" srcset=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-dossier-php.png 676w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-dossier-php-300x150.png 300w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-dossier-php-624x312.png 624w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/a> R\u00e9pondre <em>local<\/em> et valider.<\/li>\n<li>Il y a maintenant 12 param\u00e8tres \u00e0 fournir pour l'installation. Valider tous les r\u00e9pertoires propos\u00e9s par d\u00e9faut (chez moi de 1 \u00e0 11). Compl\u00e9ter \u00e9ventuellement (pour le 12e param\u00e8tre - <em>Path to CLI php.exe<\/em> - j'indique le chemin <em>C:Program Fileswampbinphpphp5.4.12<\/em>).<\/li>\n<li>Autoriser la modification de <em>php.ini<\/em> pour prendre en compte le chemin des extensions de <em>pear<\/em> (ici,\u00a0<em>C:Program Fileswampbinphpphp5.4.12pear<\/em>) dans la variable <em>include_path<\/em>.<\/li>\n<li>Il semble qu'il y ait 2 fichiers <em>php.ini<\/em>, l'un dans le dossier de la version de <em>php<\/em> (ici php5.4.12) et l'autre dans le dossier d'<em>Apache<\/em>. Le gestionnaire de\u00a0<em>WampServeur<\/em> propose de modifier le fichier <em>php.ini<\/em>. Il s'agit de celui contenu dans le dossier d'<em>Apache<\/em>, alors que la proc\u00e9dure d'installation de <em>pear<\/em> modifie celui du dossier de la version de <em>php<\/em>. On va donc rapporter la modification r\u00e9alis\u00e9e dans le <em>php.ini<\/em> d'<em>Apache<\/em> :\n<pre>;***** Added by go-pear\r\ninclude_path=\".;C:Program Fileswampbinphpphp5.4.12pear\"\r\n;*****<\/pre>\n<\/li>\n<li>Il reste \u00e0 surcharger les variables d'environnement de l'ancienne installation de pear avec Zend Server :\n<ul>\n<li>PHP_PEAR_BIN =\u00a0C:Program Fileswampbinphpphp5.4.12<\/li>\n<li>PHP_PEAR_DAT =\u00a0C:Program Fileswampbinphpphp5.4.12data<\/li>\n<li>PHP_PEAR_DOC =\u00a0C:Program Fileswampbinphpphp5.4.12docs<\/li>\n<li>PHP_PEAR_INSTALL_DIR =\u00a0C:Program Fileswampbinphpphp5.4.12pear<\/li>\n<li>PHP_PEAR_PHP_BIN =\u00a0C:Program Fileswampbinphpphp5.4.12php.exe<\/li>\n<li>PHP_PEAR_SYSCONF_DIR =\u00a0C:Program Fileswampbinphpphp5.4.12<\/li>\n<li>PHP_PEAR_TEST_DIR =\u00a0C:Program Fileswampbinphpphp5.4.12tests<\/li>\n<\/ul>\n<\/li>\n<li>Maintenant on v\u00e9rifie que <em>pear<\/em> fonctionne.\u00a0<a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-pear-list.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-110 colorbox-87\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-pear-list.png\" alt=\"console-pear-list\" width=\"674\" height=\"339\" srcset=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-pear-list.png 674w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-pear-list-300x150.png 300w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-pear-list-624x313.png 624w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" \/><\/a><\/li>\n<\/ul>\n<h2>\u00a0Installation de PhpUnit<\/h2>\n<ul>\n<li>Ajout des <em>channels<\/em> n\u00e9cessaires :\n<pre>pear channel-discover pear.phpunit.de\r\npear channel-discover components.ez.no\r\npear channel-discover pear.symfony.com<\/pre>\n<\/li>\n<li>Installer <em>PhpUnit<\/em> :\n<pre>pear install --alldeps phpunit\/PHPUnit<\/pre>\n<\/li>\n<li>Pour le bon fonctionnement de <em>PhpUnit<\/em>, notamment <em>phpunit --self-update<\/em>, on doit pouvoir charger l'extension <em>openssl<\/em>. L'outil d'administration qui permet de charger les extension ne suffit pas parcequ'il n'intervient que sur le fichier <em>php.ini<\/em> d'Apache alors que <em>phpunit<\/em> sera lanc\u00e9 en console. Il faut donc modifier manuellement\u00a0le fichier <em>php.ini<\/em> du r\u00e9pertoire de la version de php (ici <em>wamp\/bin\/php\/php5.4.12\/php.ini<\/em>).<br \/>\nDans ce fichier, d\u00e9commenter la ligne :<\/p>\n<pre>extension=php_openssl.dll<\/pre>\n<p>puis red\u00e9marrer les services de wamp. On v\u00e9rifiera \u00e0 partir d'une console (cmd) que l'extension openssl est charg\u00e9e en lan\u00e7ant la commande :<\/p>\n<pre>php -m<\/pre>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-phpunit-channels.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-113 colorbox-87\" src=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-phpunit-channels.png\" alt=\"console-phpunit-channels\" width=\"672\" height=\"342\" srcset=\"https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-phpunit-channels.png 672w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-phpunit-channels-300x152.png 300w, https:\/\/www.dafap.fr\/blog\/wp-content\/uploads\/2014\/04\/console-phpunit-channels-624x317.png 624w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/a><\/p>\n<h2>\u00a0Installation de Zendframework 1<\/h2>\n<p>Etant donn\u00e9 que ces projets \u00e9volueront peu, j'ai choisi de placer la librairie de <em>Zendframework 1<\/em> dans un seul r\u00e9pertoire qui sera disponible pour tous les projets. J'y ai rajout\u00e9 la documentation.<\/p>\n<pre>ZF1\r\n  \u2514ZendFramework-1.12.6\r\n    \u251cbin\r\n    \u251cdemos\r\n    \u251cdocumentation\r\n    \u251cexternals\r\n    \u251cextras\r\n    \u251clibrary\r\n    \u251cpuppet\r\n    \u251cresources\r\n    \u2514tests<\/pre>\n<p>&nbsp;<\/p>\n<p>Cela n\u00e9cessitera de r\u00e9f\u00e9rencer ce dossier <em>library<\/em> dans l'<em>include_path<\/em> de <em>php<\/em>. Toutefois, afin de pouvoir facilement faire \u00e9voluer les versions de <em>Zendframework<\/em>\u00a0et de rester ind\u00e9pendant de le configuration, j'ai d\u00e9cid\u00e9 de placer cette r\u00e9f\u00e9rence\u00a0dans le <em>.htaccess<\/em> du projet et de modifier le fichier <em>public\/index.php<\/em> des projets.<\/p>\n<p>Voici le <em>.htaccess<\/em> :<\/p>\n<pre>SetEnv ZEND_PATH \"C:Program Files (x86)ZendZF1ZendFramework-1.12.6library\"\r\nRewriteEngine On\r\nRewriteCond %{REQUEST_FILENAME} -s [OR]\r\nRewriteCond %{REQUEST_FILENAME} -l [OR]\r\nRewriteCond %{REQUEST_FILENAME} -d\r\nRewriteRule ^.*$ - [NC,L]\r\nRewriteRule ^.*$ index.php [NC,L]<\/pre>\n<p>A noter qu'il sera sans doute n\u00e9cessaire de supprimer de l'affichage les alertes de compatibilit\u00e9 que <em>PHP 5.4<\/em> envoie. Pour cela, il faut rajouter dans <em>.htaccess<\/em> la ligne :<\/p>\n<pre>php_value error_reporting 30711<\/pre>\n<p>Voici l'ent\u00eate de mes\u00a0fichiers\u00a0<em>index.php<\/em> :<\/p>\n<h2>Installation de Zendframework 2<\/h2>\n<p>Pour ZF2, j'utilise <em>composer.phar<\/em> qui installe une librairie ZF2 dans chaque projet et met \u00e0 jour les fichiers <em>autoloader<\/em>. Je n'ai donc pas trouv\u00e9 utile d'installer la librairie du framework.<\/p>\n<p>Soit on part du projet <em>Zend Skeleton<\/em>, soit on installe <em>composer.phar<\/em>\u00a0dans le dossier racine du projet par la commande :<\/p>\n<pre>shell>curl -s http:\/\/getcomposer.org\/installer | php<\/pre>\n<p>\u00e0 condition que <em>curl<\/em> soit install\u00e9, bien \u00e9videmment.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je d\u00e9veloppe plusieurs projets sous Zendframework 1 et 2. Par commodit\u00e9 j&rsquo;ai choisi de mettre en place un\u00a0virtualhost par projet afin ce coller au mieux \u00e0 la configuration de production propre \u00e0 chacun de mes\u00a0clients. Jusqu&rsquo;\u00e0 maintenant, j&rsquo;utilisais pour le d\u00e9veloppement un Zend Server Community Edition 5.6\u00a0(licence gratuite) mais je n&rsquo;ai pas trouv\u00e9\u00a0comment faire \u00e9voluer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,15],"tags":[17,26,24,19,25,18,21,16,12,23],"class_list":["post-87","post","type-post","status-publish","format-standard","hentry","category-developpement-php","category-zendframework2","tag-apache","tag-curl","tag-httpd","tag-mysql","tag-pear","tag-php","tag-phpunit","tag-virtualhost","tag-zendframework","tag-zf2"],"_links":{"self":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts\/87","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":42,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"predecessor-version":[{"id":392,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/posts\/87\/revisions\/392"}],"wp:attachment":[{"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dafap.fr\/blog\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}