8722 sujets

Développement web côté serveur, CMS

Bonjour,

je travaille actuellement sur une barre de progression d'upload de fichiers en PHP avec APC.
J'ai suivi la méthode décrite par de nombreux tutos (par exemple, http://www.miasmatech.net/scripts/article/article_content.php?article_id=8),
et j'ai beau retourner le problème dans tous les sens, j'arrive toujours à la situation suivante :

quand je fais un apc_fetch(key), ca me renvoie toujours false tant que l'upload n'est pas terminé... mais une fois l'upload terminé, ca me renvoie bien les informations sur l'upload... ce qui ne m'avance pas pour faire une barre de progression.

Quelqu'un a une idée de l'origine du problème ?

Merci d'avance
Christophe
D'après la documentation, apc_fetch() retourne false si une erreur survient. On peut donc en déduire que la variable n'est pas retrouvée dans le cache APC.
Il faut donc regarder du côté du processus d'upload du fichier où cette variable doit être instanciée.
Oui, il est fort probable que la variable ne soit pas retrouvée par APC... sauf qu'une fois l'upload terminé, il la retrouve... c'est ca que je ne comprends pas.

Ci-dessous mon code de formulaire, ca peut aider :


<form id="formId" method="post" action="/formValid" enctype="multipart/form-data">
 <table class="tablewhite">
  <tr>
   <td colspan='2' class='title'>Nom du fichier</td>
  </tr>
  <tr>
   <td><input name="textField" value="" /></td>
  </tr>
  <tr>
   <td>Votre fichier</td>
   <td class="element">
    <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<? echo $progressKey; ?>"/>
    <input id="file" type="file" name="file" />
   </td>
  </tr>
  <tr id="submitTr">  
   <td colspan="2" class="center"> 
    <input type="button" value="Envoyer" onclick="submitVideo();" />
    <input type="hidden" name="MAX_FILE_SIZE" value="2147483648">
   </td>
  </tr>
 </table>
</form>
J'aurai plutôt tendance à penser que l'erreur se situe plus au niveau de la classe d'upload. Je dirai que la variable APC de suivit du niveau d'upload n'est pas créée à l'inverse de celle indiquant la fin de l'upload (même nom de variable en l'occurrence).

Si tu as moyen de toucher au code où sont générée ces variables je te conseil d'y tester quelques var_dump() pour en vérifier le fonctionnement.
J'ai du mal à te suivre là.
Qu'appelles-tu classe d'upload ?

Après, oui probablement que la clé d'upload n'est créée qu'une fois l'upload terminé... mais le problème c'est de savoir pourquoi.
Bien sûr que non, je n'ai pas la possibilité d'accéder au code d'APC où il crée son cache, et donc encore moins d'y caser des var_dump.

Ce qui est étrange, c'est que l'application se comporte exactement comme si j'avais mis le champ APC_UPLOAD_PROGRESS après le champ file.
Or ce n'est pas le cas... ou alors cela peut-il être dû au fait que j'utilise jQuery/ajaxForm (qui modifierait l'ordre des paramètres à l'envoi du formulaire) ?
Mais ca serait quand même fort surprenant...