<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yriase &#187; PHP</title>
	<atom:link href="http://www.yriase.fr/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yriase.fr</link>
	<description>Actu, Développement, Tutoriaux, Geek ...</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:33:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>QtBlogger : QtAmbassador et futur du projet</title>
		<link>http://www.yriase.fr/924-qtblogger-qtambassador-et-futur-du-projet.html</link>
		<comments>http://www.yriase.fr/924-qtblogger-qtambassador-et-futur-du-projet.html#comments</comments>
		<pubDate>Sun, 05 Feb 2012 15:33:22 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Yriase]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[qtblogger]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=924</guid>
		<description><![CDATA[Cela fait plusieurs mois que le projet n&#8217;a pas avancé, on peut même dire qu&#8217;il était en pause. Il faut dire que beaucoup d&#8217;évènements se sont enchaînés et qu&#8217;il n&#8217;a pas été facile pour moi de poursuivre les développements : déménagement, mémoire de fin d&#8217;études, entrée dans la vie active etc&#8230; Toutefois le projet n&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://qt.nokia.com/qt-in-use/ambassadors/qtambassador" title="QtAmbassador"><img class="right size-full wp-image-925" title="Qt Ambassador" src="http://www.yriase.fr/wp-content/uploads/2012/02/image_thumb.png" alt="Qt Ambassador" width="95" height="128" /></a></p>
<p><a href="http://www.qtblogger.net"><img class="alignnone size-full wp-image-847" title="QtBlogger" src="http://www.yriase.fr/wp-content/uploads/2010/09/logo-qtblogger.png" alt="Logo QtBlogger" width="190" height="70" /></a></p>
<p>Cela fait plusieurs mois que le projet n&#8217;a pas avancé, on peut même dire qu&#8217;il était en pause.<br />
Il faut dire que beaucoup d&#8217;évènements se sont enchaînés et qu&#8217;il n&#8217;a pas été facile pour moi de poursuivre les développements : déménagement, mémoire de fin d&#8217;études, entrée dans la vie active etc&#8230;</p>
<p>Toutefois le projet n&#8217;est pas mort ! Je compte bien poursuivre les développements et fournir un jour une première version de QtBlogger au téléchargement.</p>
<p>Pour rappel QtBlogger permet de gérer via une seule et même interface tous vos Blogs et CMS en s&#8217;interfaçant avec les différentes plates-formes existantes telles WordPress, Joomla, Drupal etc&#8230;<br />
Ajoutez à cela une API permettant le développement de plugins, de nombreuses fonctionnalités présentes de base comme l&#8217;édition ou la recherche directe d&#8217;images sur le Web et vous obtenez un logiciel polyvalent.</p>
<p>De plus QtBlogger a eu l&#8217;honneur de rejoindre le programme <a href="http://qt.nokia.com/qt-in-use/ambassadors/qtambassador" title="QtAmbassador">QtAmbassador</a> offert par Nokia ce qui est d&#8217;ores et déjà une première reconnaissance du travail effectué jusqu&#8217;à présent.</p>
<p>J&#8217;espère être en mesure de pouvoir fournir une première Beta très rapidement cela dépendra toutefois du temps que je pourrai consacrer au projet !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/924-qtblogger-qtambassador-et-futur-du-projet.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plugin pour Prestashop : Google Advanced Sitemap</title>
		<link>http://www.yriase.fr/876-plugin-pour-prestashop-google-advanced-sitemap.html</link>
		<comments>http://www.yriase.fr/876-plugin-pour-prestashop-google-advanced-sitemap.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 12:25:40 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[prestashop]]></category>
		<category><![CDATA[sitemap]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=876</guid>
		<description><![CDATA[EDIT 23/11 : Pas de nouveaux articles depuis un moment, le temps libre me manque, toutefois j&#8217;ai reçu beaucoup de demandes concernant des mises à jour où des évolutions pour le module. Il faut savoir que le module de base de Prestashop 1.4 (Google Sitemap) intègre de base le support des images, d&#8217;une manière plus [...]]]></description>
			<content:encoded><![CDATA[<div class="post-pic"><img src="http://www.yriase.fr/wp-content/uploads/2011/01/prestashop.png" alt="" title="Prestashop" width="670" height="100" class="alignnone size-full wp-image-877" /></div>
<p><strong>EDIT 23/11 : </strong> Pas de nouveaux articles depuis un moment, le temps libre me manque, toutefois j&#8217;ai reçu beaucoup de demandes concernant des mises à jour où des évolutions pour le module. Il faut savoir que le module de base de Prestashop 1.4 (Google Sitemap) intègre de base le support des images, d&#8217;une manière plus stable que mon module ce qui le rend obsolète.<br />
Si je trouve un jour le temps, je le mettrai peut-être à jour pour la version 1.4 avec le ping des autres moteurs et sûrement d&#8217;autres fonctionnalités.<br />
Merci à tous pour vos retours et suggestions.</p>
<p><strong>EDIT 17/02 : </strong>Mise à jour du module : ajout du ping des moteurs Bing et Yahoo. </p>
<p>Ayant travaillé récemment sur la solution e-commerce Prestashop, proposé par la société éponyme, j&#8217;ai cherché à mettre en place le classique fichier <em>sitemap</em>.</p>
<p>Il existe un module, intégré de base à la solution qui permet de générer un fichier avec tous les liens du sites : produits, catégories, CMS etc&#8230;<br />
Mais bizarrement, ce module appelé <em>Google Sitemap</em> ne gère pas les images, pourtant partie intégrante d&#8217;une boutique en ligne.</p>
<p>Qu&#8217;à cela ne tienne, j&#8217;ai modifié le module afin d&#8217;ajouter : </p>
<ul>
<li>le support des balises &lt;image:image&gt;</li>
<li>quelques statistiques en plus lors de la génération du fichier</li>
<li>la possibilité de pinger Google directement</li>
</ul>
<p>et ainsi est né <em>Google Advanced Sitemap</em> !</p>
<p>L&#8217;archive zip du module est téléchargeable via le lien ci-dessous. Il est bien évidemment distribué sous la licence GPL.</p>
Note: There is a file embedded within this post, please visit this post to download the file.
<p>Je le mettrai peut-être à jour avec quelques fonctionnalités en plus d&#8217;ici quelques temps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/876-plugin-pour-prestashop-google-advanced-sitemap.html/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Zend Framework : Une feuille de style par action</title>
		<link>http://www.yriase.fr/822-zend-framework-une-feuille-de-style-par-action.html</link>
		<comments>http://www.yriase.fr/822-zend-framework-une-feuille-de-style-par-action.html#comments</comments>
		<pubDate>Mon, 19 Jul 2010 19:29:10 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend_view]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=822</guid>
		<description><![CDATA[Je partage une petite astuce qui m&#8217;est venue en développant aujourd&#8217;hui. Quand on travaille sur des applications plutôt importantes, on peut être amené à vouloir segmenter le CSS. En effet un seul gros fichier avec toutes les classes dedans, c&#8217;est pas beau et c&#8217;est beaucoup plus difficile à maintenir que plusieurs fichiers, chacun contenant les [...]]]></description>
			<content:encoded><![CDATA[<p>Je partage une petite astuce qui m&#8217;est venue en développant aujourd&#8217;hui. Quand on travaille sur des applications plutôt importantes, on peut être amené à vouloir segmenter le CSS.</p>
<p>En effet un seul gros fichier avec toutes les classes dedans, c&#8217;est pas beau et c&#8217;est beaucoup plus difficile à maintenir que plusieurs fichiers, chacun contenant les classes et styles utilisées dans la vue.</p>
<p>Pour ajouter automatiquement une feuille de style correspondante à une action,  rien de plus simple, il suffit de placer le code suivant dans le(s) contrôlleur(s) souhaités :</p>
<pre class="brush: php">
  public function init()
  {
    $this-&gt;view-&gt;headLink()-&gt;appendStylesheet('/css/'.$this-&gt;getRequest()-&gt;getActionName().'.css');
  }
</pre>
<p>Ainsi, l&#8217;action index aura son fichier <em>index.css</em> et ainsi de suite !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/822-zend-framework-une-feuille-de-style-par-action.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ZendX_JQuery : view helper pour les bouttons</title>
		<link>http://www.yriase.fr/749-zendx_jquery-view-helper-pour-les-bouttons.html</link>
		<comments>http://www.yriase.fr/749-zendx_jquery-view-helper-pour-les-bouttons.html#comments</comments>
		<pubDate>Tue, 13 Apr 2010 13:49:11 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zendx_jquery]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=749</guid>
		<description><![CDATA[Après le view helper pour la progressbar de jQuery UI, je me suis amusé à coder un view helper pour les bouttons. Le principe reste le même, cependant j&#8217;ai ajouté un paramètre pour gérer le passage des évènements à la création du boutton. /** * Zend Framework * * LICENSE * * This source file [...]]]></description>
			<content:encoded><![CDATA[<p>Après le view helper pour la progressbar de jQuery UI, je me suis amusé à coder un view helper pour les bouttons. Le principe reste le même, cependant j&#8217;ai ajouté un paramètre pour gérer le passage des évènements à la création du boutton.</p>
<pre class="brush: php">
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category    ZendX
 * @package     ZendX_JQuery
 * @subpackage  View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license     http://framework.zend.com/license/new-bsd     New BSD License
 * @version     $Id: Slider.php 20165 2010-01-09 18:57:56Z bkarwin $
 */

/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * jQuery Button View Helper
 *
 * @uses 	   Zend_Json
 * @package    ZendX_JQuery
 * @subpackage View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class ZendX_JQuery_View_Helper_Button extends ZendX_JQuery_View_Helper_UiWidget
{
    /**
     * Create a jQuery button
     *
     * @link   http://docs.jquery.com/UI/Button
     * @param  string $id
     * @param  string $value
     * @param  array  $params
     * @param  array  $attribs
     * @param  array  $events
     * @return string
     */
    public function button($id, $value, array $params = array(), array $attribs = array(), array $events = array())
    {
        if(!isset($attribs['id'])) {
            $attribs['id'] = $id;
        }

        $jqh = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
        $params = ZendX_JQuery::encodeJson($params);
        $events = $this->getEvents($events);

        $js = sprintf('%s("#%s").button(%s)%s;', $jqh, $attribs['id'], $params, $events);
        $this->jquery->addOnLoad($js);

        $html = &quot;&lt;button &quot;.$this-&gt;_htmlAttribs($attribs).&quot; &gt;&quot;;
        $html .= $value;
        $html .= '&lt;/button&gt;';

        return $html;
    }

    public function getEvents($events)
    {
        if(!count($events)) return '';
        else {
            $retour = '';
            foreach ($events as $event => $function) {
                $retour .= '.'.$event.'('.$function.')';
            }
            return $retour;
        }
    }

}
</pre>
<p>Pour l&#8217;utiliser on place le fichier Button.php (avec le code ci-dessus) dans le dossier <em>ZendX/JQuery/View/Helper/</em> et pour l&#8217;utiliser : </p>
<pre class="brush: php">
echo $this->button("button1", "Mon Button", array('icons' => new Zend_Json_Expr("{primary: 'ui-icon-gear'}")),
        array(), array('click'=> "function(){ alert('Hello World !'); }" ));
</pre>
<p>Enjoy !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/749-zendx_jquery-view-helper-pour-les-bouttons.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zend Framework / jQuery : Exemple de &#171;&#160;view helper&#160;&#187;</title>
		<link>http://www.yriase.fr/686-zend-framework-jquery-exemple-de-view-helper-personnalise.html</link>
		<comments>http://www.yriase.fr/686-zend-framework-jquery-exemple-de-view-helper-personnalise.html#comments</comments>
		<pubDate>Mon, 29 Mar 2010 08:00:58 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zendx_jquery]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=686</guid>
		<description><![CDATA[Dans la continuité du précédent billet sur le Zend Framework et jQuery, j&#8217;ai codé un view helper pour la ProgressBar de jQuery UI. Je suis tout simplement parti du code du slider que j&#8217;ai bien rogné et un peu modifié pour arriver à un code fonctionnel. Sans plus attendre le voici : /** * Zend [...]]]></description>
			<content:encoded><![CDATA[<p>Dans la continuité du précédent billet sur le Zend Framework et jQuery, j&#8217;ai codé un view helper pour la ProgressBar de jQuery UI.</p>
<p>Je suis tout simplement parti du code du slider que j&#8217;ai bien rogné et un peu modifié pour arriver à un code fonctionnel.</p>
<p>Sans plus attendre le voici :</p>
<pre class="brush: php">
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category    ZendX
 * @package     ZendX_JQuery
 * @subpackage  View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license     http://framework.zend.com/license/new-bsd     New BSD License
 * @version     $Id: Slider.php 20165 2010-01-09 18:57:56Z bkarwin $
 */

/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * jQuery ProgressBar View Helper
 *
 * @uses 	   Zend_Json
 * @package    ZendX_JQuery
 * @subpackage View
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class ZendX_JQuery_View_Helper_ProgressBar extends ZendX_JQuery_View_Helper_UiWidget
{
    /**
     * Create a jQuery progressbar
     *
     * @link   http://docs.jquery.com/UI/Progressbar
     * @param  string $id
     * @param  string $value
     * @param  array  $params
     * @param  array  $attribs
     * @return string
     */
    public function progressBar($id, $value, array $params = array(), array $attribs = array())
    {
        if(!isset($attribs['id'])) {
            $attribs['id'] = $id;
        }

        $jqh = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();

        if(count($params) <= 0) {
            $params = ZendX_JQuery::encodeJson(array('value'=>$value));
        } else {
            $params = ZendX_JQuery::encodeJson($params);
        }

        $js = sprintf('%s("#%s").progressbar(%s);', $jqh, $attribs['id'], $params);
        $this->jquery->addOnLoad($js);

        $html = &quot;&lt;div &quot;.$this-&gt;_htmlAttribs($attribs).&quot; &gt;&quot;;
        $html .= '&lt;/div&gt;';

        return $html;
    }
}
</pre>
<p>C&#8217;est simple et ça fonctionne !<br />
Il suffit de créer le fichier : &laquo;&nbsp;<em>ZendX/JQuery/View/Helper/ProgressBar.php</em>&nbsp;&raquo; et d&#8217;y placer ensuite le code ci-dessus.</p>
<p>Ensuite pour l&#8217;utiliser c&#8217;est très simple dans vos vues : </p>
<pre class="brush: php">
echo $this->progressBar("progressBarId", 65);
</pre>
<p>Voilà en espérant que cela serve <img src='http://www.yriase.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/686-zend-framework-jquery-exemple-de-view-helper-personnalise.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My GMail : Encore un plugin pour WordPress</title>
		<link>http://www.yriase.fr/696-my-gmail-encore-un-plugin-pour-wordpress.html</link>
		<comments>http://www.yriase.fr/696-my-gmail-encore-un-plugin-pour-wordpress.html#comments</comments>
		<pubDate>Sun, 28 Mar 2010 12:47:20 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Yriase]]></category>
		<category><![CDATA[gmail]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=696</guid>
		<description><![CDATA[Et oui encore un plugin pour WordPress ! Faut dire que c&#8217;est tellement facile d&#8217;en faire un ! Originalement intitulé &#171;&#160;My GMail&#160;&#187; ce dernier ajoute un widget au Tableau de bord de l&#8217;administration qui affiche tous vos mails non lus de votre boîte GMail. Pour l&#8217;instant, vous choisissez juste le nombre de mails maximum à [...]]]></description>
			<content:encoded><![CDATA[<p>Et oui encore un plugin pour WordPress ! Faut dire que c&#8217;est tellement facile d&#8217;en faire un !</p>
<p>Originalement intitulé &laquo;&nbsp;<em>My GMail</em>&nbsp;&raquo; ce dernier ajoute un widget au <em>Tableau de bord</em> de l&#8217;administration qui affiche tous vos mails non lus de votre boîte GMail. Pour l&#8217;instant, vous choisissez juste le nombre de mails maximum à afficher mais je l&#8217;améliorerai très vite par la suite.</p>
<p>Il se <a href="http://wordpress.org/extend/plugins/my-gmail/">télécharge ici</a> et vous pouvez me laisser des commentaires pour l&#8217;améliorer <img src='http://www.yriase.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>EDIT</strong> : Un petit malin a, je ne sais pour quelle raison, mal noté le plugin et dit qu&#8217;il ne fonctionnait pas, et ce sans donner de détails ni expliquer le bug rencontré. Je suppose que c&#8217;est parce qu&#8217;il ne peut pas utiliser HTTPS, donc il est maintenant précisé que le plugin ne fonctionne qu&#8217;avec HTTPS pour récupérer les mails.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/696-my-gmail-encore-un-plugin-pour-wordpress.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework et jQuery une équipe qui gagne</title>
		<link>http://www.yriase.fr/656-zend-framework-et-jquery-une-quipe-qui-gagne.html</link>
		<comments>http://www.yriase.fr/656-zend-framework-et-jquery-une-quipe-qui-gagne.html#comments</comments>
		<pubDate>Sat, 27 Mar 2010 22:12:20 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=656</guid>
		<description><![CDATA[Si Zend a fait le choix d’intégrer Dojo à son Framework, il faut bien avouer qu’aujourd’hui jQuery a acquit une certaine popularité auprès des développeurs. Notamment grâce à sa modularité, qui est son principal atout, mais également par sa simplicité d’utilisation qui rend accessible à tous le développement d’applications évoluées en Javascript. Et bien sachez [...]]]></description>
			<content:encoded><![CDATA[<p>Si Zend a fait le choix d’intégrer Dojo à son Framework, il faut bien avouer qu’aujourd’hui jQuery a acquit une certaine popularité auprès des développeurs. Notamment grâce à sa modularité, qui est son principal atout, mais également par sa simplicité d’utilisation qui rend accessible à tous le développement d’applications évoluées en Javascript.</p>
<p>Et bien sachez qu’il est possible (i.e. déjà prévu) d’intégrer jQuery au Zend Framework. En effet un package existe et est fournit avec le framework dans le dossier “<em>extras/library/ZendX</em>”. </p>
<h4>Mise en place</h4>
<p>Pour pouvoir l’utiliser vous devez d’abord copier le dossier <em>ZendX</em> dans le même répertoire que le dossier <em>Zend.</em><br />
<br />Vous obtenez ensuite l’architecture suivante :<em>&#160;</em></p>
<p><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="zendx" border="0" alt="zendx" src="http://www.yriase.fr/wp-content/uploads/2010/03/zendx.jpg" width="242" height="50" /> </p>
<p>Ensuite il va nous falloir utiliser le “<em>view helper</em>” fournit par ZendX_JQuery. Plusieurs méthodes s’offrent à nous :</p>
<ul>
<li>Dans les contrôleurs/vues où l’on souhaite utiliser JQuery on ajoute
<pre class="brush: php">	$this-&gt;view-&gt;addHelperPath(&quot;ZendX/JQuery/View/Helper&quot;, &quot;ZendX_JQuery_View_Helper&quot;);
	// ou bien, et cela revient au même
	ZendX_JQuery::enableView($this-&gt;view);
	</pre>
</li>
<li>Pour l’utiliser dans toute l’application on ajoute à notre fichier <em>BootStrap</em>
<pre class="brush: php">      $view = new Zend_View();
      $view-&gt;addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');

      $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
      $viewRenderer-&gt;setView($view);
      Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    </pre>
</li>
</ul>
<p>Je préfère personnellement choisir les vues auxquelles je souhaite appliquer le “<em>view helper</em>” plutôt que de l’utiliser dans toute l’application.</p>
<p>Vous pouvez tout d’abord choisir entre utiliser les fichiers de jQuery et jQuery UI du CDN de Google ou bien utiliser vos propres fichiers.</p>
<ul>
<li>CDN de Google : utilisé par défaut, vous pouvez spécifier la version à charger avec
<pre class="brush: php">		$view-&gt;jQuery-&gt;setVersion('1.4.2');
		$view-&gt;jQuery-&gt;setUiVersion('1.8'); // pour jQuery UI
       </pre>
</li>
<li>Vos fichiers :
<pre class="brush: php">
	// Pour inclure vous-même les fichiers dans la balise head.
	$view-&gt;jQuery()-&gt;setRenderMode(ZendX_JQuery::RENDER_JAVASCRIPT | ZendX_JQuery::RENDER_JQUERY_ON_LOAD);
	// Pour indiquer le chemin de vos fichiers et laisser le framework gérer le tout
	$view-&gt;jQuery()-&gt;
	</pre>
</li>
</ul>
<p>Petite précision toutefois, les fichiers de thèmes de jQuery UI ne sont pas disponibles sur le CDN, vous devez donc les inclure vous-même avec par exemple la fonction <em>jQuery-&gt;addStylesheet($pathToFile);</em></p>
<h5>Utilisation</h5>
<p>Tout ceci ne nous dit pas comment faire pour utiliser jQuery dans notre application, rassurez-vous c’est on ne peut plus simple.</p>
<p>Imaginons par exemple un simple lien pour charger une partie de la page en Ajax : </p>
<pre class="brush: php">echo $this-&gt;ajaxLink(&quot;Get Index&quot;, &quot;/index&quot;,
                        array('update' =&gt; '#mydiv',
                              'method' =&gt; 'POST',
                              'beforeSend' =&gt; 'aCallbackFunction()',
                              'complete' =&gt; 'alert(data)')); ?&gt;</pre>
<p>Rien de bien compliqué ici, <em>#mydiv</em> indiquant la div au sein de laquelle il faut insérer le contenu, <em>/index</em> l&#8217;url de la page à récupérer, beforeSend et complete les callback à utiliser. </p>
<p>Pas plus de code à écrire, le code généré sera inséré à l&#8217;appel de <em>$this-&gt;jQuery();</em>. </p>
<p>Mais on peut utiliser jQuery pour plus que des simples liens. Ainsi on peut dans des formulaires : </p>
<pre class="brush: php">// Créé un input avec auto-complétion
echo $this-&gt;autoComplete(&quot;country&quot;, &quot;&quot;,
                             array('source' =&gt; array('France', 'United Kingdom', 'United States', 'Germany', 'Italy', 'Spain')));
// On peut donc facilement charger la source via une base de données

// Créé un input avec un calendrier
echo $this-&gt;datePicker(&quot;datePicker&quot;, '',
                        array('defaultDate' =&gt; date('d/m/Y', time()),
                                'onClose' =&gt; new Zend_Json_Expr('myFunction')));

// Créé un slider
echo $this-&gt;slider(&quot;slider&quot;, &quot;&quot;,
                        array('min'=&gt;'0', 'max'=&gt;'100', 'step'=&gt;'5'));</pre>
<p>On peut également utiliser le framework pour créer des <em>dialogs, tabContainer, accordionContainer.</em></p>
<p>Vous pouvez en apprendre plus avec <a href="http://framework.zend.com/manual/fr/zendx.jquery.html">la documentation</a>, attention toutefois car des <em>helpers</em> sont toujours disponibles tels que <em>ZendX_JQuery_View_Helper_ColorPicker </em>ou<em> ZendX_JQuery_View_Helper_Spinner </em>alors que jQuery UI ne supporte plus les éléments.</p>
<p>Avec cette gestion de jQuery, ce dernier devient une bonne alternative à Dojo pour développer avec le Zend Framework.<br />
  <br />Je l’ai personnellement adopté, et vous comptez-vous un jour passer à jQuery grâce à cette utilisation simplifiée ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/656-zend-framework-et-jquery-une-quipe-qui-gagne.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programmer un envoi de SMS avec le Zend Framework et Google Agenda</title>
		<link>http://www.yriase.fr/642-programmer-un-envoi-de-sms-avec-le-zend-framework-et-google-agenda.html</link>
		<comments>http://www.yriase.fr/642-programmer-un-envoi-de-sms-avec-le-zend-framework-et-google-agenda.html#comments</comments>
		<pubDate>Mon, 22 Mar 2010 15:05:29 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=642</guid>
		<description><![CDATA[Si vous développez déjà avec le Zend Framework vous devez connaître ou avoir entendu parler de Zend_Gdata. C&#8217;est, comme son nom l&#8217;indique, un ensemble de classes qui permettent l&#8217;accès aux services en ligne de Google (Google Data API). On a ainsi accès à : Google Spreadsheets Google Documents Youtube Picasa Google Calendar &#8230; Aujourd&#8217;hui je [...]]]></description>
			<content:encoded><![CDATA[<div class="post-pic"><img class="aligncenter size-full wp-image-643" title="google_agenda" alt="Google Agenda" src="http://www.yriase.fr/wp-content/uploads/2010/03/google_agenda.jpg" width="670" height="100" /></div>
<p>Si vous développez déjà avec le Zend Framework vous devez connaître ou avoir entendu parler de Zend_Gdata. C&#8217;est, comme son nom l&#8217;indique, un ensemble de classes qui permettent l&#8217;accès aux services en ligne de Google (Google Data API). On a ainsi accès à :</p>
<ul>
<li><a href="http://framework.zend.com/manual/en/zend.gdata.spreadsheets.html">Google Spreadsheets</a> </li>
<li><a href="http://framework.zend.com/manual/en/zend.gdata.docs.html">Google Documents</a> </li>
<li><a href="http://framework.zend.com/manual/en/zend.gdata.youtube.html">Youtube</a> </li>
<li><a href="http://framework.zend.com/manual/en/zend.gdata.photos.html">Picasa</a> </li>
<li><a href="http://framework.zend.com/manual/en/zend.gdata.calendar.html">Google Calendar</a> </li>
<li>&#8230; </li>
</ul>
<p>Aujourd&#8217;hui je vais expliquer comment se servir de Zend_Gdata pour communiquer avec Google Agenda. Si vous en connaissez le fonctionnement, vous savez qu&#8217;on peut définir des rappels pour les rendez-vous de trois façons : Email, Pop-up ou SMS.<br />
<br />C&#8217;est au SMS que nous nous intéresseront, en effet, utiliser Google Agenda pour l&#8217;envoi de SMS ne vous coutera pas un centime !</p>
<h4>Pré-requis</h4>
<p>Vous devez avant tout disposer de :</p>
<ul>
<li>Un compte Google </li>
<li>Un agenda activé dans Google Agenda </li>
<li>Un numéro de portable associé au compte Google Agenda et vérifié </li>
<li>La dernière version du Zend Framework disponible <a href="http://framework.zend.com/download/latest">ici</a> </li>
<li>Un serveur HTTP avec le support de PHP (peut-être pas besoin de le préciser mais on ne sait jamais :p ) </li>
</ul>
<h4>Mise en situation (enfin essai ^^)</h4>
<p>C’est bien joli d’écrire ce tutoriel mais sans un exemple pratique il peut être difficile d’en voir l’intérêt.<br />
<br />Imaginez que vous développez pour une entreprise qui installe et gère le fonctionnement de panneaux solaires (vous pouvez remplacer panneaux solaires par chaudières, fenêtres, voire même par l’adoption de poissons rouges birmans, si si ça marche aussi !).</p>
<p>Imaginez maintenant que vos clients aient la possibilité via une interface web de créer des “tickets”, ou “alertes” comme vous le sentez, dès lors qu’ils rencontrent un problème auquel ils ne peuvent faire face seuls !<br />
<br />C’est alors que par malheur, vous n’êtes pas joignable au bureau et le client n’a pas votre numéro de portable (si si c’est possible) ! Drâme ! Horreur ! Comment faire ?</p>
<p>Et bien tout simplement en créant un évènement sur votre Google Agenda avec l’option “reminder by SMS” !</p>
<h4>Formulaire</h4>
<p>Vous créez donc un formulaire pour que vos clients puissent expliquer en quelques lignes ce qui se passe avec en bonus une liste pour choisir la priorité du ticket.</p>
<pre class="brush: php">
class Default_Form_Ticket extends Zend_Form
{
    public function __construct($sitesList, $options = null)
    {
        parent::__construct($options);
        $this->setName('ticket_form');
        $this->setAction('/tickets/new')
     	->setMethod('post');
     	$this->setDecorators(array(
	    'FormElements',
	    array('HtmlTag', array('tag' => 'table')),
	    'Form',
		));

        $title = new Zend_Form_Element_Text('title');
        $title->setLabel('Sujet : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->setAttrib('size', '50')
        ->addValidator('NotEmpty');
        $title->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $priority = new Zend_Form_Element_Select('priority');
        $priority->setLabel('Priorité : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');
        $priority->addMultiOptions(array('Basse'=>'Basse', 'Normale'=>'Normale', 'Haute'=>'Haute', 'Urgente'=>'Urgente'));
        $priority->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $message = new Zend_Form_Element_Textarea('message');
        $message->setLabel('Message : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->setAttrib('cols', '50')->setAttrib('rows', '15')
        ->addValidator('NotEmpty');
        $message->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $submit = new Zend_Form_Element_Submit('Soumettre');
        $submit->setAttrib('id', 'submitbutton');
        $submit->setValue('Soumettre');
        $submit->setDecorators(array(
	    'ViewHelper',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-submit')),
	    array(array('label' => 'HtmlTag'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $this->addElements(array($title, $priority, $message, $submit));
    }
}
</pre>
<p>Ensuite dans le contrôlleur on instancie le formulaire et on l&#8217;ajoute à la vue et dans le même temps on met en place le code pour la création de l&#8217;évènement.</p>
<pre class="brush: php">
    public function newAction() {
        $form = new Default_Form_Ticket($sitesList);

        if($this->_request->isPost() &#038;&#038; $form->isValid($_POST)) {
            try {
	    /*
		Vous pouvez enregistrer le ticket dans une base de données.
		Nous nous contenterons simplement de l'ajout de l'évènement.
	    */

            $title = 'New Ticket - '.$this->view->user->mail.' - ' . $_POST['title'];
            $message = $_POST['message'];

            $this->createAgendaEvent($title, $message);

            $this->_redirect('/tickets');
            } catch(Exception $e) {
                $this->view->error = 'Une erreur est survenue pendant la création du ticket.';
            }

        }
        $form->populate($_POST);
        $this->view->form = $form;
    }
</pre>
<p>Il ne nous reste plus qu&#8217;à implémenter la fonction <em>createAgendaEvent</em>. Un petit détail toutefois avant de commencer, le reminder se déclenche au minimum 5 min avant le début de l&#8217;évènement. Nous créerons donc un évènement à H+6min.</p>
<pre class="brush: php">
    public function createAgendaEvent($title, $message) {
	// On charge toutes les classes qui vont nous servir
        Zend_Loader::loadClass("Zend_Gdata");
        Zend_Loader::loadClass("Zend_Gdata_ClientLogin");
        Zend_Loader::loadClass("Zend_Gdata_Calendar");
        // On récupère le nom du service
        $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

        // On s'authentifie
        $client = Zend_Gdata_ClientLogin::getHttpClient('IDENTIFIANT_COMPTE_GOOGLE', 'PASSWORD_COMPTE_GOOGLE', $service);

        // On crée un nouvel objet Calendar
        $calendar = new Zend_Gdata_Calendar($client);

        // On lui ajoute un évènement
        $event = $calendar->newEventEntry();

        // On met en place le reminder
        $reminder = $calendar->newReminder();
        $reminder->method = "sms";
        $reminder->minutes = "5";

        // Date de début à H+6min
        $startDate     = date("Y-m-d");
        $startTime     = date("H:i", time() + 6*60);
        // Date de fin à H+7min
        $endDate     = date("Y-m-d");
        $endTime     = date("H:i", time() + 7*60);
        // Offset GMT+01 pour Paris
        $tzOffset     = "+01";

        // On assigne tout ça au calendrier
        $when = $calendar->newWhen();
        $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
        $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
        $when->reminders = array($reminder);
        $event->when = array($when);

        // Enfin on ajoute le titre et le message
        $event->title = $calendar->newTitle($title);
        $event->content = $calendar->newContent($message);

        // Et on envoit le tout à Google Calendar
        $newEvent = $calendar->insertEvent($event, "http://www.google.com/calendar/feeds/IDENTIFIANT_COMPTE_GOOGLE/private/full");
    }
</pre>
<p>Et là, comme par magie vous recevrez une minute plus tard (oui H+6min &#8211; 5min = 1min !) un gentil SMS de Google avec le titre de l&#8217;évènement.<br />
Si c&#8217;est pas beau ça <img src='http://www.yriase.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>J&#8217;espère que ce tutoriel vous aura plu et/ou servi, je continue avec d&#8217;autres articles sur le Zend Framework très bientôt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/642-programmer-un-envoi-de-sms-avec-le-zend-framework-et-google-agenda.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>jQuery : poster un formulaire simplement avec AJAX</title>
		<link>http://www.yriase.fr/617-jquery-poster-un-formulaire-simplement-avec-ajax.html</link>
		<comments>http://www.yriase.fr/617-jquery-poster-un-formulaire-simplement-avec-ajax.html#comments</comments>
		<pubDate>Thu, 18 Mar 2010 16:54:22 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=617</guid>
		<description><![CDATA[jQuery, ce merveilleux framework qui nous permet de faire tellement de choses &#8230; Bien souvent je suis passé à côté de fonctionnalités on ne peut plus simple à utiliser mais tellement utiles. Du genre, je dois envoyer ce formulaire avec AJAX, il contient plein de champs différents, comment faire pour que ce soit le plus [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://docs.jquery.com/Main_Page">jQuery</a></strong>, ce merveilleux framework qui nous permet de faire tellement de choses &#8230; Bien souvent je suis passé à côté de fonctionnalités on ne peut plus simple à utiliser mais tellement utiles.</p>
<p>Du genre, je dois envoyer ce formulaire avec AJAX, il contient plein de champs différents, comment faire pour que ce soit le plus simple et rapide possible ?</p>
<p>Tout d&#8217;abord imaginons un formulaire regroupant plusieurs champs sur toute la page.</p>
<pre class="brush: php">
<form method="post" id="formulaire">
<h3>Coordonnées</h3>

<label>Mail :
<input type="text" name="mail" value="" /></label>

<label>Téléphone :
<input type="text" name="tel" value="" /></label>

...

<label>Newsletter :
<input type="checkbox" name="newsletter" /></label>

...
<input type="submit" value="Envoyer" />
</form>
<div id="post"></div>
</pre>
<p>Rien de bien compliqué jusque là mais n&#8217;oubliez pas d&#8217;inclure la librairie jQuery !<br />
On créé ensuite la page qui va traiter nos données, appelons-la post.php : </p>
<pre class="brush: php">
<ul>
  &lt;?php
    foreach($_POST as $key => $value)
      echo "
<li>$key => $value</li>

";
  ?&gt;
 </ul>
</pre>
<p>Il ne nous reste plus que la partie qui nous intéresse ici, le code javascript : </p>
<pre class="brush: jscript">
$(document).ready(function(){
	$("#formulaire").submit(function(){
		$.ajax({type:"POST", data: $(this).serialize(), url:"post.php",
			success: function(data){
				$("#post").html(data);
			},
                        error: function(){
			        $("#post").html('Une erreur est survenue.');
			}
		});
		return false;
	});
});
</pre>
<p>Tout ce qu&#8217;on a à faire c&#8217;est ré-implémenter la fonction submit du formulaire et sérialiser ses champs avec la fonction <em>&#8216;serialize()&#8217;</em> pour envoyer les données.<br />
C&#8217;est tout bête mais je ne connaissais pas cette fonction et on ne développe pas toujours avec un IDE qui liste pour nous les fonctions à utiliser !<br />
Enfin comme dit le vieil adage : RTFM !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/617-jquery-poster-un-formulaire-simplement-avec-ajax.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Accélerer et optimiser son intallation PHP avec eAccelerator</title>
		<link>http://www.yriase.fr/602-accelerer-et-optimiser-son-intallation-php-avec-eaccelerator.html</link>
		<comments>http://www.yriase.fr/602-accelerer-et-optimiser-son-intallation-php-avec-eaccelerator.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 14:26:34 +0000</pubDate>
		<dc:creator>
<img alt="" src="http://0.gravatar.com/avatar/8d419a54322fb4b031f344a82a2f58ea?s=12&amp;d=identicon&amp;r=G" class="avatar avatar-12 photo" height="12" width="12" style=" border: 1px solid; border-color: #000000;"/>
seiyar81</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[eaccelerator]]></category>
		<category><![CDATA[opcode]]></category>

		<guid isPermaLink="false">http://www.yriase.fr/?p=602</guid>
		<description><![CDATA[Quand on doit gérer un serveur Web, on doit s&#8217;occuper avant tout de la sécurité de l&#8217;installation, de sa stabilité, etc mais il ne faut pas pour autant négliger les performances. Car oui l&#8217;utilisateur final ne se préoccupe pas vraiment de savoir si le serveur risque de tomber à la moindre attaque, et si l&#8217;application [...]]]></description>
			<content:encoded><![CDATA[<p>Quand on doit gérer un serveur Web, on doit s&#8217;occuper avant tout de la sécurité de l&#8217;installation, de sa stabilité, etc mais il ne faut pas pour autant négliger les performances. Car oui l&#8217;utilisateur final ne se préoccupe pas vraiment de savoir si le serveur risque de tomber à la moindre attaque, et si l&#8217;application est trop longue à répondre il ira voir ailleurs s&#8217;il peut ou alors va commencer à s&#8217;énerver.</p>
<p>J&#8217;ai déjà présenté quelques modules pour accélérer Apache, mais aujourd&#8217;hui je vais expliquer comment installer très simplement un système de cache d&#8217;opcode : eAccelerator.<br />
Avant cela quelques explications.</p>
<h4><strong>Qu&#8217;est-ce que l&#8217;<em>opcode</em> ?</strong></h4>
<p>Comme vous le savez tous sûrement, PHP n&#8217;est pas un langage compilé, mais interprété. C&#8217;est à dire qu&#8217;à chaque exécution le code est parcouru puis PHP génère ce qu&#8217;on appelle l&#8217;<em>opcode </em>qui est en réalité un code compréhensible par la machine qui pourra donc l&#8217;exécuter.<br />
Ce processus peut très vite devenir lourd pour la machine dès lors que l&#8217;application fait face à un nombre important de clients et les temps de réponses n&#8217;en sont que plus long.</p>
<h4><strong>Quelles solutions ?</strong></h4>
<p>C&#8217;est pourquoi on va s&#8217;intéresser aux systèmes de cache d&#8217;<em>opcode</em>. Ces derniers améliore grandement les performances de PHP en plaçant dans un système de cache ces fameux <em>opcodes</em>.<br />
Il existe plusieurs solutions dont voici une courte liste (non exhaustive) : </p>
<ul>
<li>IonCube: http://www.ioncube.com/sa_encoder.php</li>
<li>Zend Platform: http://www.zend.com/en/products/platform/</li>
<li>XCache: http://xcache.lighttpd.net/</li>
<li>APC: http://pecl.php.net/packages/APC</li>
<li>EAccelerator: http://www.eaccelerator.net/</li>
</ul>
<p>Nous nous intéresserons ici à eAccelerator.<br />
Attention toutefois, eAccelerator ne fonctionne pas si PHP est CGI, il est seulement utilisable avec mod_php ou PHP en FastCGI.</p>
<p>On commence par récupérer la dernière version : </p>
<pre class="brush: plain">
cd /usr/src
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
tar -xf eaccelerator-0.9.6.tar.bz2
cd eaccelerator-0.9.6
</pre>
<p>Ensuite il nous faut compiler les sources, donc dans le dossier entrez les commandes suivantes : </p>
<pre class="brush: plain">
phpize
./configure
make
</pre>
<p>Si le programme <em>phpize</em> n&#8217;est pas trouvé, il faut le télécharger : </p>
<pre class="brush: plain">
sudo apt-get install php5-dev
</pre>
<p>Si tout s&#8217;est bien passé, on lance l&#8217;installation : </p>
<pre class="brush: plain">
make install
</pre>
<p>Il nous faut maintenant configurer PHP pour qu&#8217;il charge l&#8217;extension, on modifie donc le fichier <em>/etc/php5/conf.d/eaccelerator.ini</em> :</p>
<pre class="brush: plain">
zend_extension="/usr/lib/php4/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
</pre>
<p>Enfin on créé le dossier dans lequel eAccelerator va stocker son cache : </p>
<pre class="brush: plain">
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
</pre>
<p>Enfin on vérifie que tout fonctionne bien : </p>
<pre class="brush: plain">
/etc/init.d/apache2 reload
php5 -v
...
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
...
</pre>
<p>Et voilà votre installation de PHP est maintenant plus rapide et plus stable.<br />
J&#8217;expliquerais prochainement comment mettre en place très simplement un reverse proxy afin de soulager le serveur Web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yriase.fr/602-accelerer-et-optimiser-son-intallation-php-avec-eaccelerator.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

