Question

Est-ce que quelqu'un connaît des méthodes pour créer une barre de progression de téléchargement de fichier en PHP? J'ai souvent entendu dire que c'était impossible.

J'ai une idée, mais je ne sais pas si cela fonctionnerait: télécharger un fichier normalement, mais l'envoyer à un iframe. Lorsque cela est soumis, stockez les informations de fichier (taille et emplacement temporaire) dans la session. Dans le même temps, démarrez un appel AJAX toutes les 10 secondes environ pour vérifier la taille du fichier par rapport à celle stockée dans la session. Cela ramènerait la taille à AJAX, puis une barre de progression serait affichée et afficherait peut-être la taille téléchargée pour l'utilisateur.

Pensées?

Était-ce utile?

La solution

Vous pouvez essayer YUI ou Prototype ou JQuery

Autres conseils

Vous savez à peu près comment le faire. Le problème principal est que vous n’avez généralement pas accès à la taille du fichier téléchargé tant que le téléchargement n’est pas terminé.

Il existe des solutions pour cela: Si vous activez APC, vous pouvez accéder à ces informations si vous incluez un champ appelé "APC_UPLOAD_PROGRESS". et utilisez apc_fetch () pour récupérer une entrée de cache avec le statut.

Il existe également un plugin appelé uploadprogress mais il n’est pas très bien documenté et ne fonctionne pas sous Windows (la dernière fois que j’ai vérifié).

Une alternative consiste à utiliser Flash pour le faire. Voir des scripts tels que FancyUpload .

Avant l'arrivée d'APC, je devais écrire un script CGI en C qui écrivait des informations dans un fichier texte. APC semble être une bien meilleure façon de le faire maintenant.

J'espère que cela vous aidera.

Jusqu'à présent, la méthode la plus courante consiste à utiliser SWFUpload: http://www.swfupload.org/

Cependant, c'est possible avec du PHP pur, très difficile et très expérimental. Je verrai si je peux trouver le lien.

Modifier: Selon des commentaires sur php.net, à partir de la version 5.2, il existe un crochet pour gérer la progression du téléchargement. http://us.php.net/features.file-upload#71564

Plus d'explications:

Exemple de Rasmus:

Depuis PHP 5.4, il est en extension de session: http: // php. net // manuel / pl / session.upload-progress.php

En PHP pur, vous avez raison: ce n'est pas possible.

Si vous ajaxez ceci, alors vous pourriez faire ce que vous décrivez. Les seuls indicateurs de progrès que j'ai jamais vus sont en Javascript ou en Flash, mais j'imagine que Silverlight pourrait le faire également.

"Old school", mais une technique PHP + Perl : http://www.raditha.com/php/progress.php

À mon avis, la solution la plus simple et la plus simple consiste à créer un petit widget flash composé d'un bouton "Télécharger" et d'une barre de progression. Flash vous donne des informations très détaillées sur la quantité de données téléchargées jusqu'à présent, et vous pouvez créer une belle barre de progression sur cette base. Ne nécessite pas une interrogation inefficace du serveur et, en fait, ne nécessite aucune modification du code de votre serveur. Recherchez "Flash Uploader" dans Google et vous constaterez que de nombreuses personnes ont déjà écrit ces widgets et sont heureuses de vous les vendre pour un dollar.

Je vous conseillerais de SWFUpload d'accomplir ce que vous voulez. Il est assez flexible et prend en charge la mise en file d'attente de fichiers. Vous pouvez donc même gérer les téléchargements de plusieurs fichiers.

Vous voudrez certainement utiliser FancyUpload de digitgerald . C'est Mootools & amp; basé sur swfuplaod, et il arbore une belle file d'attente avec des statistiques, des progrès, etc. etc. C'est vraiment la méthode la plus simple que j'ai vue pour le téléchargement de fichiers. Pour mon usage personnel, ivé l'a utilisé pour permettre au client de sélectionner 1,2 Go de fichiers PDF et de les télécharger. Les plus récents sont renommés et versionnés automatiquement, les mêmes sont ignorés, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top