Bonjour,

Je cherche depuis plusieurs semaines à ajouter une barre de progression pour Symfony2.

A priori avec php 5.4 on peut récupérer la progression d'un upload.

Voici ma page de test:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
  /* File upload progress in PHP 5.4 */
 
  /* needs a 5.4+ version */
  $version = explode( '.', phpversion() );
  if ( ($version[0] * 10000 + $version[1] * 100 + $version[2]) < 50400 )
    die( 'PHP 5.4.0 or higher is required' );
 
  if ( !intval(ini_get('session.upload_progress.enabled')) )
    die( 'session.upload_progress.enabled is not enabled' );
 
  session_start();
 
  if ( isset( $_GET['progress'] ) ) {
 
    $progress_key = strtolower(ini_get("session.upload_progress.prefix").'demo');
 
    if ( !isset( $_SESSION[$progress_key] ) ) exit( "uploading..." );
 
    $upload_progress = $_SESSION[$progress_key];
    /* get percentage */
    $progress = round( ($upload_progress['bytes_processed'] / $upload_progress['content_length']) * 100, 2 );
 
    exit( "Upload progress: $progress%" );
  } 
?>
 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
 
<?php if ( isset($_GET['iframe']) ): /* thank you Webkit... */ ?>
<form action="" method="POST" enctype="multipart/form-data">
  <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="demo">
  <input type="file" name="uploaded_file">
  <input type="submit" value="Upload">
</form>
 
<script type="text/javascript">
window.location.hash = ""; /* reset */
jQuery("form").bind("submit", function() { window.location.hash = "uploading"; });
</script>
 
<?php else: ?>
 
<iframe src="?iframe" id="upload_form"></iframe>
<script type="text/javascript">
  jQuery(document).ready(init);
 
  function init() {
    /* start listening on submit */
    update_file_upload_progress();
  }
 
  function update_file_upload_progress() {
	if ( window.frames[0].document.location.hash != "#uploading" ) {
      setTimeout( update_file_upload_progress, 100 ); /* has upload started yet? */
      return;
    }
	alert('test2');
    $.get( /* lather */
      "?progress",
      function(data) {
        /* rinse */
        jQuery("#file_upload_progress").html(data);
        /* repeat */
        setTimeout( update_file_upload_progress, 500 );
      }
    ).error(function(jqXHR, error) { alert(error); });
  }
</script>
 
<div id="file_upload_progress"></div>
<?php endif; ?>

D'après ce que j'ai comprit on est sensé récupérer la progression en session.

Mon soucis est que je n'ai rien de stocké en session.
Sauriez vous d'ou viens le soucis?


Sinon si vous connaissez une autre méthode en jquery je suis preneur.
On doit pourtant savoir du côté client (donc en jquery) ou en est l'upload d'un fichier.