Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/04/2007, 00h36   #1
Invité régulier
 
Inscription : avril 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 31
Points : 7
Points : 7
Par défaut [Upload] Envoyer des paramètres à un popup automatiquement ?

Bonjour à toutes et à tous ! Je suis nouvelle dans la section PHP et j'ai besoin de vos lanternes bien éclairées (parce que la mienne est en panne ) !

Voici mon problème. Je cherche à mettre en place une jolie barre de progression pour un formulaire d'upload d'un fichier local sur un serveur FTP. Je sais qu'il existe bien des façons plus faciles à mettre en place que la mienne mais je suis sur le point d'y arriver (et j'ai mis du temps !).

Voici le code d'upload :

Code :
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
$upload = ftp_nb_put($connection_ftp, $newFileName, $fichier, FTP_BINARY);
 
while ($upload == FTP_MOREDATA) { 
 
if(!isset($connection_ftp2)) {
           $connection_ftp2 = @ftp_connect("$ftp_server");
		   $login_to_ftp2=@ftp_login($connection_ftp2, $ftp_user, $ftp_pass);
 
    }
 
        // Retreive size of uploaded file.
        if(isset($connection_ftp2)) {
            clearstatcache(); // <- this must be included!!
            $remote_file_size = ftp_size($connection_ftp2, $newFileName);
 
        }
 
 
       // Calculate upload progress
       $local_file_size  = filesize($fichier);
       if (isset($remote_file_size) && $remote_file_size > 0 ){
           $i = ($remote_file_size/$local_file_size)*100;
 
		   echo $i.'<br>';	
 
           flush();
       }  
 
       $upload = ftp_nb_continue($connection_ftp);
}
Pour résumer, je gère deux connections FTP (une qui exécute le travail et l'autre qui récupère la taille du fichier envoyé).

J'aimerai passer la variable $i à une fenêtre qui la récupère et qui me dessine la barre de progression correspondante :

Code :
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
<?  
$pourcentage=$_GET['pourcent']; 
?> 
 
<html>
<head>
    <title>Test de barre</title>
 
<style type="text/css">
 
.graphe {
     position: relative; /* IE hack */
     width: 200px;
     border: 1px solid #B1D632;
     padding: 2px;
     margin: 0 auto;
}
 
.graphe .barre {
     display: block;
     position: relative;
     background: #B1D632;
     text-align: center;
     color: #333;
     height: 2em;
     line-height: 2em;
}
 
</style>
 
</head>
 
<div class="graphe">
    <strong class="barre" style="width: <?php echo $pourcentage;?>%;"><?php echo $pourcentage;?>%</strong>
</div>
Pour l'instant, cette page n'a pas de refresh mais ça ne saurait tarder.

Mon problème, c'est que je ne sais pas comment lui envoyer ma variable $i !
Quelqu'un peut-il m'aider s'il vous plait ? Je vous en serai très reconnaissante !
pinggu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 09h26   #2
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Bonjour,
Pour la lanterne, la solution est toute simple, changer la bougie (je suis pas encore passé à l'électricité ^_^) ... Ah, c'est pas ça la question ...

Il serait plus simple d'ouvrir la Pop-up lors de l'envoi du formulaire ... Car il me semble qu'ouvrir une fenêtre via PHP est utopique ^_^. (ou pas, qui sait xD)

Donc lors de l'envoi de ton fichier, tu met un action="tapagedetraitement.php" et ensuite tu met un onclick="dujavascript" qui va t'ouvrir une pop-up qui elle va chercher le fichier affichagedelabarredupload.php .

Ceci n'est qu'une idée ^_^.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 09h30   #3
Invité régulier
 
Inscription : avril 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 31
Points : 7
Points : 7
Merci pour cette idée

Le truc, c'est que l'ouverture de la popup n'est pas un souci en soi.

Je cherche un moyen de pouvoir envoyer ma variable $i à la popup. Comme l'histoire des paramètres ne fonctionne pas du tout, j'ai tenté d'écrire ce $i dans un fichier que lit la popup toutes les secondes.

Sauf que la seule valeur qui s'affiche dans la popup est la dernière écrite dans le fichier. C'est bizarre quand même, non ?
pinggu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 09h40   #4
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Donc dans ceci n'est pas une réponse en soit, mais une idée à exploiter, éventuellement.

La fonction flush(); va forcer l'envoi des echo, print, etc ... AVANT que le cache du navigateur soit plein.

Tu peux donc faire une fonction du style :
Code :
1
2
3
4
5
function truc($poucentage)
{
   echo 'truc en javascript qui va envoyer le pourcentage';
   flush(); // Va envoyer le echo qui comportera du js.
}
Ensuite tu fais une boucle de 1 à 100. et tu fais un affichage de truc($i).
Maintenant une boucle de 100 ... ça passe en claquant des doigts, tu peux donc faire ceci :
Code :
1
2
3
4
5
for ($f=0; $f <= 100; $f++)
{
    truc($i);
    sleep($x); // Stop le script pendant $x
}
Tu détermine $x en fonction du poids de ton fichier.

Voilà, c'est très brouillon, mais je pense que l'idée est là.

Sinon tu peux utiliser l'AJAX.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 09h43   #5
Invité régulier
 
Inscription : avril 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 31
Points : 7
Points : 7
Lol merci !
Bon petit dej...de mon côté, je me penche sur les connexions asynchrones...
pinggu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h10   #6
Membre régulier
 
Inscription : avril 2006
Messages : 177
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 177
Points : 80
Points : 80
Envoyer un message via MSN à Samyhijodelaluna
Parce qu'on peut pas passer un paramètre à une popup????
Samyhijodelaluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h14   #7
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Citation:
Envoyé par Samyhijodelaluna
Parce qu'on peut pas passer un paramètre à une popup????
Gni ???
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h27   #8
Membre régulier
 
Inscription : avril 2006
Messages : 177
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 177
Points : 80
Points : 80
Envoyer un message via MSN à Samyhijodelaluna
Citation:
Envoyé par pinggu
Je cherche un moyen de pouvoir envoyer ma variable $i à la popup. Comme l'histoire des paramètres ne fonctionne pas du tout, j'ai tenté d'écrire ce $i dans un fichier que lit la popup toutes les secondes.
??
Samyhijodelaluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h29   #9
Invité régulier
 
Inscription : avril 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 31
Points : 7
Points : 7
Citation:
Envoyé par Samyhijodelaluna
Parce qu'on peut pas passer un paramètre à une popup????
Enfin quand je dis passer un paraètre à une popup, je veux dire ouvrir (ou actualiser) une fenetre avec une adresse du style

pinggu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h31   #10
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Oups ^_^, ceci va stoper ton script pendant ... 1000 secondes, normal que tu trouves que ça tourne dans le vide ^_^.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h33   #11
Membre régulier
 
Inscription : avril 2006
Messages : 177
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 177
Points : 80
Points : 80
Envoyer un message via MSN à Samyhijodelaluna
J'crois que je bug lol...! T'arrive à ouvrir ta popup, et ce que tu veux c'est pas passer une variable à ta popup, mais passer une variable plusieurs fois de suite? C'est ça ou j'retourne dormir?
Samyhijodelaluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h36   #12
Invité régulier
 
Inscription : avril 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 31
Points : 7
Points : 7
Citation:
Envoyé par SpiritOfDoc
Oups ^_^, ceci va stoper ton script pendant ... 1000 secondes, normal que tu trouves que ça tourne dans le vide ^_^.
Oups aussi, je croyais que c'était des millisecondes !


Citation:
Envoyé par Samyhijodelaluna
J'crois que je bug lol...! T'arrive à ouvrir ta popup, et ce que tu veux c'est pas passer une variable à ta popup, mais passer une variable plusieurs fois de suite? C'est ça ou j'retourne dormi?
Exactement, sauf que cette variable n'est accesible pour l'instant qu'après l'envoi global de mon fichier uploadé. Or ce serait bien de pouvoir y avoir access pendant le chargement...
pinggu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 11h10   #13
Invité régulier
 
Inscription : avril 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 31
Points : 7
Points : 7
Bon j'ai tenté ta méthode SpiritOfDoc mais il ne se passe absolument rien...pourtant il me semble que j'ai bien adapté:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Calculate upload progress
       $local_file_size  = filesize($fichier);
       if (isset($remote_file_size) && $remote_file_size > 0 ){
           $i = ($remote_file_size/$local_file_size)*100;
           //printf("%d%% uploaded<br>", $i);	
		   //echo $i.'<br>';	
 
		for ($f=0; $f <= 100; $f++)
		{
  		  ecrirePourcentage($i);
  		  sleep(1); // Stop le script pendant $x
		}
 
 
       }

Code :
1
2
3
4
5
6
function ecrirePourcentage($i)
{
	echo '<script language="JavaScript"> window.location="barre.php?pourcent='.$i'."</script>';
 
   flush(); // Va envoyer le echo qui comportera du js.
}
pinggu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 11h19   #14
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
Aïe ! ça sent l'usine à gaz ton truc ...
Bon, je vais essayer de t'aider un peu, car j'ai déja fait ce genre de trucs en javascript.
Voici la marche à suivre :
- 1) tu créé un script php qui calcule l'etat d'avancement de la tache d'upload, et qui renvoie uniquement cette valeur, de préférence structurée en XML
- 2) dans ta popup tu créé un script javascript qui va interroger toutes les x secondes le script php ci dessus avec un xmlHTTPRequest et récupere la valeur de la progression
- 3) toujours, en javascript, une fois que tu as récuperé la valeur, tu mets à jour la barre de progression

En résumé, c'est bien de l'AJAX qu'il faut faire, mais contrairement à ce que tu semble croire, il n'y a rien à installer pour faire de l'AJAX :si tu te contentes de choses simples, tous les navigateurs dignes de ce nom fournissent aujourd'hui une implémentation de xmlHTTPRequest

Je te conseille d'aller voir ce tuto d'introduction qui te donnera les bases d'AJAX
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 11h27   #15
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
J'ai fais un test tout simple pour voir si ce que j'avais penser fonctionne ^_^ :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function ecrirePourcentage($i) 
{  
	echo $i."\n"; 
	flush(); 
}
for ($i=0; $i <= 100; $i++)
{
	ecrirePourcentage($i);
	sleep(1); // Stop le script pendant $x
}
?>
Cela va me marque toutes les secondes la valeur de $i qui est incrémenté de 1.

Maintenant je pense que la solution est vraiment pas loin ^_^

Le problème après, c'est ceci :
Citation:
Fatal error: Maximum execution time of X seconds exceeded
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 11h43   #16
Membre régulier
 
Inscription : avril 2006
Messages : 177
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 177
Points : 80
Points : 80
Envoyer un message via MSN à Samyhijodelaluna
Le seveur bride le temps d'execution d'un script. Faut changer le time_limit dans le php.ini je crois!
Samyhijodelaluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 11h48   #17
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
C'est en effet une solution ... malheureusement au détriment du temps d'exécution général ...
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 11h53   #18
Membre régulier
 
Inscription : avril 2006
Messages : 177
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 177
Points : 80
Points : 80
Envoyer un message via MSN à Samyhijodelaluna
Et faut avoir la possibilité de le changer!
-> set_time_limit(0);

Sinon je ne vois pas d'autre moyen de contourner le problème en php!
Samyhijodelaluna est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h29.


 
 
 
 
Partenaires

Hébergement Web