<?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>Blogouille &#187; PHP</title>
	<atom:link href="http://blog.bafouille.fr/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bafouille.fr</link>
	<description>Le blog de la bafouille</description>
	<lastBuildDate>Tue, 24 Aug 2010 19:17:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Utilisation de Flash pour suivre le chargement (upload) d&#8217;un fichier avec Ajax et PHP</title>
		<link>http://blog.bafouille.fr/web/utilisation-de-flash-pour-suivre-le-chargement-upload-dun-fichier-avec-ajax-et-php/</link>
		<comments>http://blog.bafouille.fr/web/utilisation-de-flash-pour-suivre-le-chargement-upload-dun-fichier-avec-ajax-et-php/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 21:09:07 +0000</pubDate>
		<dc:creator>Bafouille</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[applet]]></category>
		<category><![CDATA[chargement]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://blog.bafouille.fr/?p=148</guid>
		<description><![CDATA[Étant donné qu&#8217;il n&#8217;est pas possible d&#8217;installer l&#8217;extension APC sur certaines configurations serveur (hébergement dédié ou gratuit par exemple), la seule possibilité pour afficher la progression du chargement reste dans ce cas là de recourir à un applet (flash, java&#8230;). L&#8217;inconvénient d&#8217;un applet est qu&#8217;il nécessite des connaissances en java ou actionscript pour flash (en [...]]]></description>
			<content:encoded><![CDATA[<p>Étant donné qu&#8217;il n&#8217;est pas possible d&#8217;installer l&#8217;<a title="Article de ce blog sur l'utilisation d'APC pour suivre le chargement d'un fichier" href="http://blog.bafouille.fr/?cat=9">extension APC</a> sur certaines configurations serveur (hébergement dédié ou gratuit par exemple), la seule possibilité pour afficher la progression du chargement reste dans ce cas là de recourir à un applet (flash, java&#8230;).</p>
<p>L&#8217;inconvénient d&#8217;un applet est qu&#8217;il nécessite des connaissances en java ou actionscript pour flash (en plus du logiciel payant dans ce dernier cas).</p>
<p>Toutefois, il existe plusieurs solutions gratuites qui permettent des upload multiples en flash :</p>
<ul>
<li>Nas Uploader (<a title="Page d'accueil du site de Nas Uploader" href="http://www.nasuploader.com">http://www.nasuploader.com</a>) : C&#8217;est certainement le plus simple mais aussi le moins souple côté configuration. Du coup, il est très bien adapté pour celui qui veut une solution simple et rapide.</li>
<li>SWF Upload (<a title="Page d'accueil du site de SWF Upload" href="http://swfupload.org">http://swfupload.org</a>) : C&#8217;est peut-être le plus connu. Il est entièrement paramétrable ce qui le rend également difficile à prendre en main.</li>
<li>Fancy Upload (<a title="Page d'accueil du site de Fancy Upload" href="http://digitarald.de/project/fancyupload">http://digitarald.de/project/fancyupload</a>) : Le plus esthétique à mon sens. Son seul &laquo;&nbsp;défaut&nbsp;&raquo; est de s&#8217;appuyer sur le framework javascript Mootools pour fonctionner ce qui peut poser des problèmes si vous en utilisez un autre (par exemple prototype <img src='http://blog.bafouille.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<p>Côté serveur, le script PHP n&#8217;a rien de révolutionnaire puisque le traitement du fichier chargé reste identique.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.bafouille.fr/social.gif" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.bafouille.fr/web/utilisation-de-flash-pour-suivre-le-chargement-upload-dun-fichier-avec-ajax-et-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connaître la progression d&#8217;un chargement (upload) de fichier en PHP</title>
		<link>http://blog.bafouille.fr/web/ajax-web/connaitre-la-progression-dun-chargement-upload-de-fichier-en-php/</link>
		<comments>http://blog.bafouille.fr/web/ajax-web/connaitre-la-progression-dun-chargement-upload-de-fichier-en-php/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 23:11:55 +0000</pubDate>
		<dc:creator>Bafouille</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[fichiers]]></category>
		<category><![CDATA[formulaire]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://blog.bafouille.fr/?p=37</guid>
		<description><![CDATA[Lorsque l&#8217;on conçoit un formulaire permettant l&#8217;upload de fichier, il est souvent souhaité de pouvoir indiquer à l&#8217;utilisateur la progression du chargement que ce soit sous forme graphique ou texte.Seul hic, PHP ne permet pas dans sa version &#171;&#160;standard&#160;&#187; une telle approche. Lors du traitement d&#8217;un upload de fichier, la variable superglobale _FILES n&#8217;est renseignée [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque l&#8217;on conçoit un formulaire permettant l&#8217;upload de fichier, il est souvent souhaité de pouvoir indiquer à l&#8217;utilisateur la progression du chargement que ce soit sous forme graphique ou texte.Seul hic, PHP ne permet pas dans <a title="Gestion des téléchargements sur PHP.net" href="http://fr2.php.net/manual/fr/features.file-upload.post-method.php">sa version &laquo;&nbsp;standard&nbsp;&raquo;</a> une telle approche.  Lors du traitement d&#8217;un upload de fichier, la <a title="La variable _FILES" href="http://fr2.php.net/manual/fr/reserved.variables.files.php">variable superglobale <code>_FILES</code></a> n&#8217;est renseignée qu&#8217;une fois le fichier complètement chargé sur le serveur et au chaud dans le répertoire temporaire.  Impossible donc de l&#8217;utiliser pour accéder aux informations du fichier en cours de chargement, et notamment du nom qui lui a été affecté dans le répertoire temporaire.</p>
<h4>C&#8217;est très bien, mais ne peut-on rien y faire ?</h4>
<p>Plusieurs solutions sont possibles :</p>
<ul>
<li>Utiliser un autre language de <a title="Common Gateway Interface, ce sont des scripts qui traitent les données côté serveur et renvoient éventuellement quelque chose au client">CGI</a> pour récupérer et afficher les informations du téléchargement</li>
<li>Utiliser un applet java ou Flash (il y en a des très biens)</li>
<li>Utiliser PHP (et ajax bien sûr pour mettre à jour l&#8217;affichage)</li>
</ul>
<p>Oui, vous avez bien lu, on peut utiliser PHP. Pour les vieilles versions, il est nécessaires d&#8217;appliquer un patch à l&#8217;installation PHP, mais à partir de la version 5.2.0, le support pour le module <a title="Alternative PHP Cache">APC</a> est intégré dans la distribution. Pour les plus courageux, <a href="http://www.phpclasses.org/blog/post/61-File-upload-progress-meter-for-PHP-4-at-last.html">le suivi est possible en PHP4</a>, mais je trouve quand même plus simple de passer à PHP 5.2. Un italien a aussi décrit <a href="http://www.devpro.it/upload_progress/">une méthode sans installer APC</a>. L&#8217;inconvénient est qu&#8217;elle se base sur un suivi de l&#8217;apparition de fichiers temporaires ce qui la rend complètement inutilisable lorsque de nombreux fichiers sont créés quasi simultanément.</p>
<p>La suite du message décrit comment utiliser APC pour récupérer les informations sur le déroulement d&#8217;un upload.<br />
<span id="more-37"></span></p>
<h4>Installer APC</h4>
<p>APC est un package PECL qui n&#8217;est pas installé par défaut dans PHP. Vous trouverez  un guide d&#8217;installation sur <code><a href="http://fr.php.net/manual/fr/apc.installation.php">http://fr.php.net/manual/fr/apc.installation.php</a></code> Pour les utilisateurs de Windows qui ne pourraient pas compiler la bibliothèque, voici un <a href="http://kromann.info/download.php?strFolder=php5_2-Release_TS&amp;strIndex=PHP5_2">lien alternatif</a> pour trouver des modules compilés dans l&#8217;attente du retour de pecl4win.</p>
<h4>Configurer APC pour suivre l&#8217;upload de fichiers</h4>
<p>Par ailleurs, il faut encore activer l&#8217;option d&#8217;APC permettant de récupérer des informations sur le chargement en cours. Pour cela, il suffit de rajouter <code>apc.rfc1867 = on</code> dans le fichier <code>php.ini</code>. Il faut aussi charger l&#8217;extension dans le <code>php.ini</code> grâce à <code>extension="apc.so"</code> ou <code>extension=php_apc.dll</code> sous Windows</p>
<h4>Récupérer les informations sur le chargement en cours</h4>
<p>Une fois le module APC et son extension rfc1867 fonctionnels, il est possible de <a href="http://fr.php.net/manual/fr/apc.configuration.php#ini.apc.rfc1867">récupérer les information du chargement en cours</a>.  Vous trouverez de nombreux scripts sur la toile permettant d&#8217;exploiter cette fonctionnalité :</p>
<ul>
<li><a href="http://pecl.php.net/package/uploadprogress">Uploadprogressmeter</a> : un autre package PECL avec <a href="http://www.nata2.org/2007/04/16/pecl-uploadprogress-example/">un exemple</a>.</li>
<li><a href="http://sourceforge.net/projects/megaupload/">Megaupload</a> : Très complet, il peut aussi utiliser Perl et JSP.</li>
</ul>
<p>Si vous êtes un acharné du code, voici quelque explications basé sur l&#8217;utilisation d&#8217;un iframe (voir <a href="http://blog.bafouille.fr/?p=16">http://blog.bafouille.fr/?p=16</a> pour plus d&#8217;informations sur l&#8217;upload de fichier).  Il nous faut tout d&#8217;abord un formulaire avec un champ caché nommé <code>APC_UPLOAD_PROGRESS</code> et une id unique. Nous utiliserons pour cela la fonction PHP <code>uniqid()</code>. Comme il ne faut pas recharger la page suite à la soumission du formulaire, la cible de celui-ci sera un <code>IFRAME</code> caché. Enfin, il nous faut lancer en parallèle un javascript pour interroger le serveur et mettre à jour les informations de chargement.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37code3'); return false;">View Code</a> HTML4STRICT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p373"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p37code3"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt; ?php $id_for_apc <span style="color: #66cc66;">=</span> uniqid<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; ?&gt;</span>;
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;leForm&quot;</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;traitement.php&quot;</span> <span style="color: #000066;">enctype</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;multipart/form-data&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pcost&quot;</span> <span style="color: #000066;">onsubmit</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pollProgress(&lt;?php echo $id_for_apc ?&gt;</span></span>)&quot;&gt;
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;?php echo $id_for_apc ?/&gt;</span></span>&quot; name=&quot;APC_UPLOAD_PROGRESS&quot; type=&quot;hidden&quot; value=&quot;<span style="color: #009900;">&lt; ?php echo $id_for_apc ?&gt;</span>&quot; /&gt;
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;leFichier&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;leFichier&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Charger le fichier&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span>
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span>Total du fichier : <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;total&quot;</span>&gt;</span>Inconnu<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span>
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span>En cours : <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;current&quot;</span>&gt;</span>0<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span></pre></td></tr></table></div>

<p>Tout ce qu&#8217;il y a de plus simple. Le script <code>traitement.php</code> est quant à lui tout ce qu&#8217;il y a de plus classique pour traiter des fichiers téléchargés. Son résultat va s&#8217;afficher dans l&#8217;Iframe caché, il faudra donc y récupérer les informations pour afficher le résultat final de l&#8217;upload.</p>
<h4>Direction le javascript maintenant</h4>
<p>Lors de la soumission du formulaire, la fonction <code>pollProgress</code> est appelée avec en paramètre la valeur du champ <code>APC_UPLOAD_PROGRESS</code>. Personnellement, je préfère cette méthode car il est plus sûr de passer l&#8217;id en argument que d&#8217;aller la chercher dans le document Html de départ qui peut avoir changé ou qui possède des frames (argh !).</p>
<p>Le but de <code>pollProgress</code> est d&#8217;interroger le serveur en utilisant l&#8217;objet <code>XMLHttpRequest</code>. Pour cela, soit on programme tout de zéro, soit on utilise un framework javascript. Personnellement, j&#8217;utilise <a href="http://prototypejs.org/">Prototype</a> car, d&#8217;une part, il est également utilisé par <a href="http://script.aculo.us/">script.aculo.us</a>, bibliothèque d&#8217;effets javascript et, d&#8217;autre part, il permet des manipulations du DOM en gérant lui-même les spécificités d&#8217;Internet Explorer.</p>
<p>Notre fonction <code>pollProgress(upload_id)</code> pourrait ressembler à ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p37code4'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p374"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p37code4"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> pollProgress<span style="color: #009900;">&#40;</span>upload_id<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Request</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'getUploadProgress.php?upload_id='</span><span style="color: #339933;">+</span>upload_id<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
                     method <span style="color: #339933;">:</span> <span style="color: #3366CC;">'GET'</span><span style="color: #339933;">,</span>
                     onSuccess<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>transport<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                   <span style="color: #003366; font-weight: bold;">var</span> upload_info <span style="color: #339933;">=</span> transport.<span style="color: #660066;">responseJSON</span><span style="color: #339933;">;</span>
                                   <span style="color: #006600; font-style: italic;">/* Les informations retournés par le serveur
                                      sont disponibles dans l'objet upload_info
                                      (total, current, filename, name et done) */</span>
                                   <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>upload_info.<span style="color: #660066;">done</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                      $<span style="color: #009900;">&#40;</span>current<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span>upload_info.<span style="color: #660066;">current</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                      $<span style="color: #009900;">&#40;</span>total<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span>upload_info.<span style="color: #660066;">total</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                      <span style="color: #009966; font-style: italic;">/* Si le chargement n'est pas fini, on relance la fonction */</span>
                                      <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>upload_info.<span style="color: #660066;">done</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> pollProgress<span style="color: #009900;">&#40;</span>upload_id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                    <span style="color: #009900;">&#125;</span>
                                  <span style="color: #009900;">&#125;</span>
                                <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>C&#8217;est évidemment l&#8217;approche a minima car on se contente d&#8217;actualiser la valeur de la taille du fichier (total) et de la quantité d&#8217;octets chargés (current). Enfin, en divisant l&#8217;un par l&#8217;autre, on a un taux de progression que l&#8217;on peut représenter graphiquement&#8230;</p>
<p>Le grand avantage de Prototype est qu&#8217;il simplifie fortement le code et, en exploitant le format JSON, on peut récupérer directement les informations sous forme de variables javascript.</p>
<p>En attendant, il manque le script PHP qui va gentiment nous donner ces informations au format JSON :</p>
<p>Pas bien sorcier. Toute la magie repose sur <code>apc_fetch</code> qui va renvoyer un tableau associatif <code>$ret[index]</code> où index possédant les valeurs suivantes :</p>
<ul>
<li><strong>total</strong> : taille du fichier en octets</li>
<li><strong>current</strong> : nombre d&#8217;octets déjà reçus</li>
<li><strong>filename</strong> : nom du fichier tel que transmis dans l&#8217;input file</li>
<li><strong>name</strong> : valeur de l&#8217;attribut name de l&#8217;input file</li>
<li><strong>start-time</strong> : timestamp du début du chargement</li>
<li><strong>done</strong> : statut du chargement (0 : en cours, 1 : fini)</li>
</ul>
<p>Une fois le chargement fini, la fonction renvoie également ces valeurs d&#8217;index :</p>
<ul>
<li> <strong>temp_filename</strong> : chemin vers le fichier temporaire</li>
<li> <strong>rate</strong> : Taux de transfert en b/s</li>
<li> <strong>cancel_upload</strong> : Information sur le résultat de l&#8217;upload (0 : succès, 1 : la taille du fichier excède upload_max_file_size, 2 : la taille excède MAX_FILE_SIZE, 3 : chargement partiel, 4 : pas de fichier chargé, 5 : le répertoire temporaire est absent, 6 : impossible d&#8217;écrire le fichier, 7 : chargement annulé)</li>
</ul>
<p>Fort heureusement, l&#8217;annulation d&#8217;un chargement change malgré tout la valeur de l&#8217;index <code>"done"</code> en 1 sinon nous aurions une jolie boucle infinie dans le script ! A noter que les informations fournies à la fin du chargement sont également disponibles dans <code>$_FILES</code>.</p>
<p>Enfin, la fonction <code>json_encode</code> nous permet de passer le tableau de retour au format JSON pour la fonction javascript.</p>
<p>Le script est loin d&#8217;être complet mais je pense que c&#8217;est une bonne base de départ pour celui qui veut se lancer.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.bafouille.fr/social.gif" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.bafouille.fr/web/ajax-web/connaitre-la-progression-dun-chargement-upload-de-fichier-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
