Barre de Progression de téléchargement en PHP
Quelqu'un sait-il comment faire pour obtenir une barre de progression pour un upload en php? Je suis en train d'écrire du code pour un album photo uploader. Je voudrais une barre de progression à l'écran, tandis que les photos sont le téléchargement.
Je suis assez nouveau à l'php donc je ne sais pas tout sur elle.
InformationsquelleAutor Josh Curren | 2009-05-11
Vous devez vous connecter pour publier un commentaire.
C'est de loin (après des heures de recherche sur google et en essayant de scripts) le plus simple à configurer et plus beaux uploader j'ai trouvé
https://github.com/FineUploader/fine-uploader
Il ne nécessite pas de l'APC ou de tout autre externe bibliothèques PHP, je peux obtenir le fichier progrès de la rétroaction sur un ordinateur hôte partagé, et il prétend prise en charge de html5 glisser-déposer (personnellement non testé) et plusieurs de téléchargement de fichiers.
Si vous avez APC installé, il a un rappel de crochet pour la progression du téléchargement.
Rasmus Lerdorf (PHP créateur) a un exemple de cette aide de YUI (oh, et voici le Source PHP).
Voir la documentation ici.
Je suis désolé de dire que, au meilleur de ma connaissance, un pur PHP barre de progression de téléchargement, ou même un PHP/Javascript barre de progression de téléchargement n'est pas possible, parce que le fonctionnement de PHP. Votre meilleur pari est d'utiliser une certaine forme de Flash uploader.
Autant que je sache, C'est parce que votre script n'est pas exécuté jusqu'à ce que tous les superglobales sont peuplées, ce qui inclut la variable $_FILES. Par le temps que votre script PHP qui est appelé, le fichier est entièrement téléchargé.
EDIT: Ce n'est plus vrai. C'était en 2010.
Un PHP-ish (5.2+) & pas de Flash moyen qui fonctionnait bien pour moi:
Premier, voir cette post expliquant comment obtenir "uploadprogress" extension de.
Puis, dans la page contenant le formulaire que vous téléchargez le fichier(s) à partir de, créer suivantes iframe:
Ensuite, ajoutez ce code à votre bouton "Soumettre":
Maintenant, vous avez une iframe caché dans votre formulaire qui viendra visible et afficher le contenu de la uploadprogress.php lorsque vous cliquez sur "Soumettre" pour commencer le téléchargement de fichiers. $upload_id doit être le même que vous utilisez, comme la valeur du champ caché "UPLOAD_IDENTIFIER" dans votre formulaire.
L'uploadprogress.php elle-même ressemble à quelque chose comme ceci (corriger et adapter à vos besoins):
Note qui s'auto-actualise toutes les secondes. Vous pouvez certainement ajouter un peu de visuel agréable barre de progression (comme 2 imbriquée <div>s avec des couleurs différentes) si vous le souhaitez. L'iframe avec l'avancement du téléchargement naturellement ne fonctionne que lorsque le téléchargement est en cours, et termine sa vie visible une fois que le formulaire est soumis et le navigateur recharge à la page suivante.
Mise en œuvre de la barre de progression de téléchargement est facile et ne nécessite aucune extension PHP, JavaScript ou Flash. Mais vous avez besoin de PHP 5.4 et plus récent.
Vous devez activer la collecte de la progression du téléchargement de l'information par la définition de la directive
session.upload_progress.activé
àOn
dansphp.ini
.Puis ajouter un caché d'entrée pour le code HTML formulaire d'upload juste avant n'importe quel autre fichier d'entrées. Attribut HTML
name
de caché d'entrée doit être la même que la valeur de la directivesession.upload_progress.nom
dephp.ini
(éventuellement précédé parsession.upload_progress.préfixe
). Levalue
attribut est à vous, il sera utilisé dans le cadre de la clé de session.Formulaire HTML pourrait ressemble à ceci:
Lorsque vous envoyez ce formulaire, PHP doit créer une nouvelle clé dans la
$_SESSION
superglobale structure qui sera peuplée de l'état du téléchargement de l'information. La clé est concaténéname
etvalue
cachés d'entrée.En PHP, vous pouvez prendre un coup d'oeil à peuplée de télécharger des informations:
À la sortie de regarder de manière similaire à la suivante:
Il y a toutes les informations nécessaires pour créer une barre de progression — vous de l'information si le téléchargement est toujours en cours, les informations de combien d'octets va être transféré au total et combien d'octets a été transféré déjà.
De présenter l'avancement du téléchargement de l'utilisateur, écrire un autre script PHP que le téléchargement, qui ne regarde que le téléchargement d'informations dans la session et revenir dans le format JSON, par exemple. Ce script peut être appelé périodiquement, par exemple toutes les secondes, à l'aide d'AJAX et de l'information présentée à l'utilisateur.
Vous êtes encore en mesure d'annuler le téléchargement par le réglage de la
$_SESSION[$key]['cancel_upload']
àtrue
.Pour obtenir des informations détaillées, des paramètres supplémentaires et commentaires de l'utilisateur voir Manuel PHP.
Un autre uploader plein JS : http://developers.sirika.com/mfu/
avoir du plaisir
HTML5 introduit un téléchargement du fichier api qui vous permet de surveiller la progression de l'upload de fichiers, mais pour les anciens navigateurs il y a plupload un cadre spécialement conçu pour surveiller les téléchargements de fichiers et de donner des informations à leur sujet. et en plus il a beaucoup de rappels de sorte qu'il peut fonctionner sur tous les navigateurs
Engrenages et HTML5 ont un progrès événement dans le
HttpRequest
objet pour la présentation d'un upload de fichier via AJAX.http://developer.mozilla.org/en/Using_files_from_web_applications
Vos autres options comme déjà répondu par d'autres sont:
Techniquement, il est une quatrième option, semblable à YouTube téléchargement, avec des Engrenages ou HTML5, vous pouvez utiliser des gouttes pour diviser un fichier en plusieurs petits morceaux et de les télécharger individuellement chaque morceau. À la fin de chaque morceau, vous pouvez mettre à jour l'état d'avancement.
Vous devez utiliser Javascript pour créer une barre de progression. Une simple recherche sur Google m'a mené à cet article: WebAppers Javascript Simple Barre de Progression avec les CSS.
Dojo De La Barre De Progression De Téléchargement Du Widget est une autre option à l'aide de l'Dojo framework Javascript.
EDIT: en Supposant que le téléchargement d'un grand nombre d'images (comme la photo de l'album), et de les afficher à votre script PHP, vous pouvez utiliser javascript pour lire les résultats de retour de la poste et de mettre à jour la barre de progression basé sur le nombre d'images mises en ligne /nombre total d'images. Cela a pour effet de bord de seule une mise à jour après chaque post est terminé. Découvrez ici pour avoir des infos sur comment poster avec JS.
Php/ajax barre de progression peut être fait. (La caisse de la Html_Ajax de la bibliothèque dans la poire).
Toutefois, cela exige l'installation d'un module personnalisé en php.
D'autres méthodes nécessitent l'aide d'un iframe, via php qui cherche à savoir combien de temps le fichier a été téléchargé. Cependant, cette iframe masqué, peut être bloqué par certains navigateurs addons car caché les iframes sont souvent utilisés pour envoyer des données malveillantes à l'ordinateur de l'utilisateur.
Votre meilleur pari est d'utiliser une certaine forme de flash barre de progression si vous n'avez pas de contrôle sur votre serveur.