{"id":2801,"date":"2016-11-17T14:16:14","date_gmt":"2016-11-17T12:16:14","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=2801"},"modified":"2016-11-19T15:22:06","modified_gmt":"2016-11-19T13:22:06","slug":"renforcement-de-la-lecture-des-objets","status":"publish","type":"post","link":"http:\/\/blog.nebule.org\/?p=2801","title":{"rendered":"Renforcement de la lecture des objets"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans la <a title=\"librairie\" href=\"http:\/\/blog.nebule.org\/?page_id=2478\" target=\"_blank\">biblioth\u00e8que<\/a> <a title=\"nebule\" href=\"http:\/\/www.nebule.org\" target=\"_blank\">nebule<\/a> en <a title=\"php\" href=\"http:\/\/php.net\" target=\"_blank\">PHP<\/a> orient\u00e9 objet et dans certaines applications, un certain nombre de fonctions lisent le contenu des objets soit directement soit via la fonction <code>getContent()<\/code> de l&rsquo;instance\u00c2\u00a0<code>Object<\/code> des objets. Toutes les lectures de contenus d&rsquo;objets et de liens se font via la classe <code>io<\/code> de la biblioth\u00e8que et non directement par des fonctions de PHP de lecture de flux, de lecture directe. Les fonctions de la classe\u00c2\u00a0<code>io<\/code> ne font pas d&rsquo;op\u00e9rations cryptographiques, donc aucune v\u00e9rification n&rsquo;est possible \u00e0 ce niveau.<\/p>\n<p style=\"text-align: justify;\">Dans la biblioth\u00e8que se trouve aussi la fonction <code>checkConsistency()<\/code> pour v\u00e9rifier le contenu d&rsquo;un objet. Deux diff\u00e9rences existent entre les deux fonction :<\/p>\n<ol>\n<li style=\"text-align: justify;\">La fonction <code>getContent()<\/code> lit des donn\u00e9es et v\u00e9rifie si l&#8217;empreinte est bonne sauf si l&rsquo;objet est trop grand. Si l&rsquo;objet est trop grand, un argument <code>$permitTruncate<\/code> permet de ne pas rejeter le contenu de l&rsquo;objet si il est trop grand. Pour les petits objets la v\u00e9rification se fait dans tous les cas. La limite d&rsquo;un objet petit ou grand est d\u00e9finie par l&rsquo;option <code>ioReadMaxData<\/code>. Si l&#8217;empreinte ne correspond pas, le contenu n&rsquo;est pas conserv\u00e9 et un contenu vide est renvoy\u00e9 \u00e0 la fonction appelante. La fonction\u00c2\u00a0<code>checkConsistency()<\/code> ne renvoie pas de donn\u00e9es mais v\u00e9rifie juste l&#8217;empreinte, le r\u00e9sultat bool\u00e9en renvoy\u00e9 et n\u00e9gatif ou positif.<\/li>\n<li style=\"text-align: justify;\">La fonction\u00c2\u00a0<code>getContent()<\/code> ne supprime pas un objet si l&#8217;empreinte n&rsquo;est pas bonne. La fonction\u00c2\u00a0<code>checkConsistency()<\/code> v\u00e9rifie l&#8217;empreinte et, si l&#8217;empreinte n&rsquo;est pas bonne, supprime l&rsquo;objet via une fonction de la classe <code>io<\/code>.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Il est difficile de prendre une d\u00e9cision de suppression d&rsquo;un objet parce que peut-\u00eatre que l&rsquo;algorithme de prise d&#8217;empreinte n&rsquo;est pas reconnu par la machine sur laquelle tourne l&rsquo;instance serveur. En cas d&rsquo;absence de possibilit\u00e9 de v\u00e9rification comme un type d&#8217;empreinte inconnu ou un objet trop grand, il faut renvoyer un contenu vide ou r\u00e9sultat n\u00e9gatif mais il ne faut pas supprimer l&rsquo;objet. Quoique dans un mode parano\u00efaque, il faut peut-\u00eatre pr\u00e9voir de supprimer tout objet non v\u00e9rifiable, \u00e0 voir.<\/p>\n<p style=\"text-align: justify;\">Pour commencer l&rsquo;argument\u00c2\u00a0<code>$permitTruncate<\/code> n&rsquo;a pas de raison d&rsquo;\u00eatre, il est contre productif parce qu&rsquo;il affaibli l&rsquo;ensemble du syst\u00e8me. Il va \u00eatre supprim\u00e9 et les applications qui affichaient un objet avec un message comme quoi l&rsquo;objet est trop gros vont afficher un message d&rsquo;erreur sans le contenu.<\/p>\n<p style=\"text-align: justify;\">Ensuite, la fonction\u00c2\u00a0<code>getContent()<\/code> fait appel \u00e0 une fonction priv\u00e9e <code>_getProtectedContent()<\/code> pour lire le contenu d&rsquo;un objet prot\u00e9g\u00e9. Elle va maintenant sous-traiter aussi la lecture des objets non prot\u00e9g\u00e9s \u00e0 une fonction priv\u00e9e <code>_getUnprotectedContent()<\/code>. Cette nouvelle fonction sera tr\u00e8s similaire \u00e0 la fonction\u00c2\u00a0<code>checkConsistency()<\/code> mais renverra un contenu complet ou vide au lieu d&rsquo;un r\u00e9sultat bool\u00e9en. Et bien s\u00fcr l&rsquo;objet sera supprim\u00e9 en cas d&#8217;empreinte invalide. Et la fonction\u00c2\u00a0<code>_getProtectedContent()<\/code> utilisera la fonction\u00c2\u00a0<code>_getUnprotectedContent()<\/code> pour la lecture de tous les objets accessibles non prot\u00e9g\u00e9s.<\/p>\n<p style=\"text-align: justify;\">La suppression de l&rsquo;argument\u00c2\u00a0<code>$permitTruncate<\/code> va poser un gros probl\u00e8me pour l&rsquo;affichage des gros objets. Ceux-ci via le navigateur peuvent \u00eatre affich\u00e9 dans certains cas parce que le navigateur les t\u00e9l\u00e9charge sur le serveur web pour les afficher au fur et \u00e0 mesure. C&rsquo;est le cas des vid\u00e9os non prot\u00e9g\u00e9es. Une des options pour r\u00e9soudre ce probl\u00e8me est peut-\u00eatre d&rsquo;utiliser le lien de type <code>s<\/code> jusque l\u00e0 inexploit\u00e9 par la biblioth\u00e8que&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans la biblioth\u00e8que nebule en PHP orient\u00e9 objet et dans certaines applications, un certain nombre de fonctions lisent le contenu des objets soit directement soit via la fonction getContent() de l&rsquo;instance\u00c2\u00a0Object des objets. Toutes les lectures de contenus d&rsquo;objets et de liens se font via la classe io de la biblioth\u00e8que et non directement par &hellip; <a href=\"http:\/\/blog.nebule.org\/?p=2801\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Renforcement de la lecture des objets<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[55,3,4,371,88,7,96,13,116,110,19,20,24,35,38],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/2801"}],"collection":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2801"}],"version-history":[{"count":9,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/2801\/revisions"}],"predecessor-version":[{"id":2819,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/2801\/revisions\/2819"}],"wp:attachment":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2801"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}