par
finipe » 25 avr. 2019, 15:39
Bonjour à tous,
J'essaye désespérément de faire fonctionner une barre de progression pendant l'upload d'un fichier, mais rien à faire ça coince.
Peut-être un oeil neuf parviendra-t-il à voir ce qui cloche ?
Voici les codes :
FORMULAIRE D'UPLOAD (fichier.php) :
Code : Tout sélectionner
echo "<FORM id='upload_form' action='_up.upload.php' method='POST' enctype='multipart/form-data' target='resultat'>";
echo "<input type='hidden' name='".ini_get('session.upload_progress.name')."' value='progression' />";
echo "<input type='file' name='fichier' id='file'>";
echo "<a onClick='Upload();'>TRANSFERT</a>";
echo "<iframe id='resultat' name='resultat' src='_up.upload.php'></iframe>";
echo "</FORM>";
echo "<div id='progress' class='progress'><div class='bar'></div></div>";
SCRIPT JS :
Code : Tout sélectionner
function Upload()
{
$('#progress .bar').html('0%');
$('#progress .bar').width('0%');
$('#upload_form').submit();
setTimeout('Avancee()', 450);
}
function Avancee()
{
$.get('_up.progress.php', function(data)
{
var texte = "Transfert : " + data + '%';
var pourcentage = data + '%';
$('#progress .bar').html(texte);
$('#progress .bar').width(pourcentage);
if(data < 100) setTimeout('Avancee()', 150);
});
}
PAGE D'UPLOAD (_up.upload.php) :
Code : Tout sélectionner
foreach($_FILES as $_FICHIER)
{
$_NOM_FICHIER = "un_nom_quelconque.extension";
/* Ici, des conditions pour vérifier le format, le poids, etc. */
// 4. Upload ok
else if(move_uploaded_file($_FICHIER['tmp_name'], "./Upload/".$_NOM_FICHIER))
{
echo "Transfert réussi";
// Redirection auto
echo "<script>top.location.href='fichiers.php';</script>";
}
// 5. Si échec de l'upload, affichage de l'erreur
else
{
/* Ici, des conditions pour vérifier le type d'erreur */
}
}
ET ENFIN, PAGE DE PROGRESSION DE L'UPLOAD (_up.progress.php) :
Code : Tout sélectionner
session_start();
$key = ini_get('session.upload_progress.prefix').'progression';
if(!empty($_SESSION[$key]))
{
$_ENCOURS = $_SESSION[$key]['bytes_processed'];
$_TOTAL = $_SESSION[$key]['content_length'];
$_POURCENTAGE = ceil(($_ENCOURS / $_TOTAL)*100);
}
else
{
$_POURCENTAGE = 100;
}
echo $_POURCENTAGE;
J'ai fait de trèèèèès nombreux tests, et ce qui ne fonctionne pas semble se situer dans le fichier _up.progress.php : il ne me récupère rien dans la variable $_SESSION[$key] qui reste désespérément vide, donc forcément je suis toujours à 100 du premier coup. La barre d'upload passe direct à 100, l'upload s'effectue parfaitement, mais je n'ai aucun track de la progression par $_SESSION[$key]['bytes_processed'].
L'upload fonctionne, le JS qui gère l'avancée de la barre aussi, c'est le $_SESSION[$key] qui reste vide.
Quelqu'un voit-il mon erreur ?
Merci de votre aide.
PS : j'ai testé, je suis bien en PHP > 5.4, et session.upload_progress.enabled est bien à TRUE.
Bonjour à tous,
J'essaye désespérément de faire fonctionner une barre de progression pendant l'upload d'un fichier, mais rien à faire ça coince.
Peut-être un oeil neuf parviendra-t-il à voir ce qui cloche ?
Voici les codes :
[b]FORMULAIRE D'UPLOAD (fichier.php) :[/b]
[code]echo "<FORM id='upload_form' action='_up.upload.php' method='POST' enctype='multipart/form-data' target='resultat'>";
echo "<input type='hidden' name='".ini_get('session.upload_progress.name')."' value='progression' />";
echo "<input type='file' name='fichier' id='file'>";
echo "<a onClick='Upload();'>TRANSFERT</a>";
echo "<iframe id='resultat' name='resultat' src='_up.upload.php'></iframe>";
echo "</FORM>";
echo "<div id='progress' class='progress'><div class='bar'></div></div>";[/code]
[b]SCRIPT JS :[/b]
[code]function Upload()
{
$('#progress .bar').html('0%');
$('#progress .bar').width('0%');
$('#upload_form').submit();
setTimeout('Avancee()', 450);
}
function Avancee()
{
$.get('_up.progress.php', function(data)
{
var texte = "Transfert : " + data + '%';
var pourcentage = data + '%';
$('#progress .bar').html(texte);
$('#progress .bar').width(pourcentage);
if(data < 100) setTimeout('Avancee()', 150);
});
}[/code]
[b]PAGE D'UPLOAD (_up.upload.php) :[/b]
[code]foreach($_FILES as $_FICHIER)
{
$_NOM_FICHIER = "un_nom_quelconque.extension";
/* Ici, des conditions pour vérifier le format, le poids, etc. */
// 4. Upload ok
else if(move_uploaded_file($_FICHIER['tmp_name'], "./Upload/".$_NOM_FICHIER))
{
echo "Transfert réussi";
// Redirection auto
echo "<script>top.location.href='fichiers.php';</script>";
}
// 5. Si échec de l'upload, affichage de l'erreur
else
{
/* Ici, des conditions pour vérifier le type d'erreur */
}
}[/code]
[b]ET ENFIN, PAGE DE PROGRESSION DE L'UPLOAD (_up.progress.php) :[/b]
[code]session_start();
$key = ini_get('session.upload_progress.prefix').'progression';
if(!empty($_SESSION[$key]))
{
$_ENCOURS = $_SESSION[$key]['bytes_processed'];
$_TOTAL = $_SESSION[$key]['content_length'];
$_POURCENTAGE = ceil(($_ENCOURS / $_TOTAL)*100);
}
else
{
$_POURCENTAGE = 100;
}
echo $_POURCENTAGE;[/code]
J'ai fait de trèèèèès nombreux tests, et ce qui ne fonctionne pas semble se situer dans le fichier _up.progress.php : il ne me récupère rien dans la variable $_SESSION[$key] qui reste désespérément vide, donc forcément je suis toujours à 100 du premier coup. La barre d'upload passe direct à 100, l'upload s'effectue parfaitement, mais je n'ai aucun track de la progression par $_SESSION[$key]['bytes_processed'].
L'upload fonctionne, le JS qui gère l'avancée de la barre aussi, c'est le $_SESSION[$key] qui reste vide.
Quelqu'un voit-il mon erreur ?
Merci de votre aide.
PS : j'ai testé, je suis bien en PHP > 5.4, et session.upload_progress.enabled est bien à TRUE.