Upload fichier et barre de progression

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Upload fichier et barre de progression

Re: Upload fichier et barre de progression

par saveus » 10 mai 2019, 17:06

hello , non non , je n ai pas oublier , juste que quand je teste en local , les envois sont quasi instantané... donc pas facile a débugguer

Re: Upload fichier et barre de progression

par finipe » 29 avr. 2019, 12:59

Wow, ça c'est du service après vente ! Les codes que j'ai mis au début sont quasi complets (sauf les inclusions de la bibliothèque jquery, les entêtes et démarrages de session, et les quelques conditions que j'ai supprimées pour plus de clarté)

Re: Upload fichier et barre de progression

par saveus » 29 avr. 2019, 12:20

mmm si possible donne moi tes trois pages (complete) et les eventuelles pages de présentation qui contiennent les iframes ou autre méthode qui appellent ces 3 pages , je vais te débugger ca sur mon poste .

Re: Upload fichier et barre de progression

par finipe » 28 avr. 2019, 13:26

Merci de te préoccuper de moi Saveus :D

Mais ça fonctionne pas. En GET, en POST, en tout ce que je veux ou peux.

Cela dit, je suis quand même perplexe, parce que j'ai suivi à la lettre la doc de php.net, et il n'y est nulle part fait mention de cette redéfinition de la variable. Et d'ailleurs, si la page _up.upload.php est appelée dans une iframe, la variable n'est-elle pas déjà définie dans son contenant fichier.php ?

Parce que sinon je suis tombé sur ça : https://abciweb.developpez.com/tutoriel ... x-php.html

Un système différent, d'après ce qui est dit accessible à tous sans effort, mais qui me paraît toutefois bien compliqué et assez obscur. Et bien que n'étant pas une star de la prog (loin s'en faut) je ne suis pourtant pas non plus un débutant :D

Re: Upload fichier et barre de progression

par saveus » 28 avr. 2019, 12:21

tu n as pas vraiment de les redéfinir , tu as surtout besoin de passer les variable vers la page _up.progress.php
sois en post mais le mieux serrais sois de passer la variable en $_GET sois en $_SESSION

du style

dans _up.upload.php

Code : Tout sélectionner

$keyname=$_POST[ini_get("session.upload_progress.name")] echo '<iframe name="xxxx" src="_up.progress.php?keyname='.$keyname.'"></iframe>';

et dans up.progress.php

Code : Tout sélectionner

$key = ini_get("session.upload_progress.prefix") . $_GET["keyname"];


ou



dans _up.upload.php

Code : Tout sélectionner

session_start(); $_SESSION["keyname"]=$_POST[ini_get("session.upload_progress.name")]

et dans up.progress.php

Code : Tout sélectionner

$key = ini_get("session.upload_progress.prefix") . $_SESSION["keyname"];

Re: Upload fichier et barre de progression

par finipe » 28 avr. 2019, 12:00

Nope. Nope nope nope. Je commence à envisager de laisser tomber #-o

Re: Upload fichier et barre de progression

par finipe » 28 avr. 2019, 11:18

Ah si pardon... il faut que je redéfinisse dans _up.upload.php :

Code : Tout sélectionner

$prefix = ini_get('session.upload_progress.prefix'); $name = ini_get('session.upload_progress.name'); $key = $prefix.$_POST[$name];
??

Je vais essayer.

Re: Upload fichier et barre de progression

par finipe » 28 avr. 2019, 11:14

Eeeeuh je suis un peu lent comme garçon, j'ai pas compris 8-|

Re: Upload fichier et barre de progression

par saveus » 27 avr. 2019, 23:32

oui ça parait logique
vu que tu as 3 pages
et que tu défini

Code : Tout sélectionner

echo "<input type='hidden' name='".ini_get('session.upload_progress.name')."' value='progression' />";
dans page fichier.php

cette valeur est passé a la page : _up.upload.php

sauf que si tu ne redéfini pas la variable dans cette page pour la reposter a la page 3 ... c'est normal que ca ne retourne rien ;-)

Re: Upload fichier et barre de progression

par finipe » 27 avr. 2019, 23:00

Merci pour ta réponse Saveus.

J'ai fait de multiples tests, et je crois que c'est la variable $_POST[ini_get('session.upload_progress.name')] qui reste vide, quoique je fasse. Donc évidemment à partir de là le reste ne fonctionne pas

Re: Upload fichier et barre de progression

par saveus » 27 avr. 2019, 21:40

hello , j ai répondu un peu trop vite je pense , il semble que la syntaxe soit effectivement correcte.
et

Code : Tout sélectionner

$key = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
genere un nom de variable présent dans la session.

pour débugger ton problème
déja essaye de coller un

Code : Tout sélectionner

session_start()
au début de ta page d'upload (_up.upload.php)
car si la session est démarré après le début de l'upload ça peu, peu être poser problème.
ensuite fait un

Code : Tout sélectionner

print_r($key);exit;
juste après $key=...
et regarde ce que ça te retourne.
ensuite fait un

Code : Tout sélectionner

print_r($_SESSION);exit;
ce qui va t'afficher toute les variables de session.
dans le style :
Array ( [fav] => oui [new] => non [pagin] => 7 [type] => 99 [nbaff] => 200 [sort] => delta [visit] => oui [hideq] => non )


pour que ca marche le nom de variable que te retourne l'affichage de $key doit correspondre a un nom de variable dans l'affichage des variables de sessions

Re: Upload fichier et barre de progression

par finipe » 27 avr. 2019, 16:38

J'ai suivi à la lettre la page https://www.php.net/manual/fr/session.u ... ogress.php mais sans succès, décidément.

Il y a d'ailleurs quelque chose qui m'échappe, en rapport avec la remarque de Saveus ci-dessus. La page précitée affirme la chose suivante :
"Lorsque PHP détecte une requête POST de ce type, il remplira un tableau dans $_SESSION, où l'index est une valeur concaténée des options de configuration session.upload_progress.prefix et session.upload_progress.name. La clé est typiquement récupérée en lisant ces configurations INI."


Puis elle donne le code :

Code : Tout sélectionner

$key = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")]; var_dump($_SESSION[$key]);


La seconde partie de $key serait donc $_POST[ini_get("session.upload_progress.name")].

Mais par la suite, la page donne l'exemple suivant, avec un formulaire HTML organisé comme suit :

Code : Tout sélectionner

<form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" /> <input type="file" name="file1" /> <input type="file" name="file2" /> <input type="submit" /> </form>


...et la variable SESSION qui serait censée ressembler à ça :

Code : Tout sélectionner

$_SESSION["upload_progress_123"] = array( /* ...... */);


Il me semble donc qu'il y a un truc qui ne colle pas, entre :
- d'un côté : la concaténation de ini_get("session.upload_progress.prefix") avec $_POST[ini_get("session.upload_progress.name")]
- de l'autre : l'exemple $_SESSION["upload_progress_123"] qui ne me semble pas correspondre exactement à ça...

Bref, je suis perplexe, et je galère depuis une semaine là-dessus :lol:

Re: Upload fichier et barre de progression

par finipe » 26 avr. 2019, 13:30

Je vois... mais alors du coup quelle serait cette valeur à affecter à $_SESSION[$key] ?

Ça se joue dans la variable $_POST peut-être ? $_POST['quelque_chose_qui_recupere_le_tracking'] ?

Re: Upload fichier et barre de progression

par saveus » 25 avr. 2019, 20:06

au vu du code il me semble normal que $_SESSION[$key] sois vide vu que nulle part tu as un :

Code : Tout sélectionner

$_SESSION[$key]="quelque_chose";

c'est comme si tu disais

Code : Tout sélectionner

$my_variable="toto"; echo $my_array[$my_variable];
le "echo" va ne va rien te retourner.
il faut que tu définisse quelque part avant

Code : Tout sélectionner

$my_array["toto"]="quelque_chose"; $my_variable="toto"; echo $my_array[$my_variable];
ou

Code : Tout sélectionner

$my_variable="toto"; $my_array[$my_variable]="quelque_chose"; echo $my_array[$my_variable];
ce qui dans les 2 cas remplira la meme clé dans l'array

Upload fichier et barre de progression

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.