Question

Je travaille sur un websitwe et je besoin d'un client pour me envoyer près de mille images. Il y a un peu d'une distance géographique entre nous, tout en envoyant un CD ou une carte SD est impossible, il est pas préféré. Puis-je écrire un Uploader PHP pour que le client de soumettre les images, ou est-il une meilleure façon? Je ne veux pas souscrire à des sites de partage de fichiers.

En supposant que je suis en train d'écrire un tel Uploader, est-il un moyen de coder un progresbar et / ou d'autres moyens de protection contre les fichiers corrompus par téléchargement interrompu?

Les liens vers des ressources qui aident sont un plus.

Merci

EDIT:

Ceci est une chose une seule fois et ce sont des images de haute qualité dont nous parlons. Ça va être quelques Go.

En l'espace FTP, vous voulez dire un nom d'utilisateur et PWD à mon serveur FTP? Il peut être fait, mais (pourquoi) est un client FTP mieux qu'un Uploader basé sur le Web? Je ne suis pas sûr que le client sait ou veut télécharger un programme FTP. Le client est sur un Mac et je ne fais pas confiance aux quelques programmes FTP pour Mac que je l'ai vu.

En supposant que je prends la route "tout en un seul zip", PHP va travailler?

Merci encore.

EDIT:

D'accord, jusqu'à présent, je suis convaincu de ne pas utiliser PHP à moins d'utiliser des fichiers .zip. De plus, je vais probablement nix la barre de progression pour l'instant. En attendant le client, va revenir à tout le monde dans les prochains jours.

EDIT:

Met le client à une sorte de fonction. Le client avait les photos disponibles là-bas sur un lecteur flash. Problème résolu. +1 pour tous l'entrée.

Était-ce utile?

La solution

Je dirais mis en place un espace FTP, ou un partage WebDAV. Si vous ne pouvez pas faire cela, alors je télécharger les images dans un seul (ou petit nombre) de fichiers zip, plutôt que d'essayer de traiter des centaines de téléchargements uniques, ce qui serait beaucoup de temps que les navigateurs ne sélectionne un seul fichier à la fois dans une boîte de dialogue de téléchargement de fichier (vous ne pouvez pas sélectionner un répertoire entier à télécharger).

Pourquoi ne pas utiliser PHP dans ce cas:

L'écriture d'un simple gestionnaire de téléchargement de fichiers est facile en PHP mais si vous ne voulez gérer de très gros téléchargements, il est un peu Tricker que vous aurez besoin de se méfier des limites de téléchargement de taille de fichier, les délais de excution du script et les limites de mémoire. Il peut être un peu frustrant pour configurer la première fois.

Si c'est un fichier de plusieurs Go vous voulez gérer ensuite un téléchargement HTTP n'est pas la façon dont vous voulez aller (basé sur, que si vous devez vous demander pourquoi, le faire marcher comme vous voulez va probablement être très frustrant processus pour vous).

Il y a plusieurs excellents clients FTP sur Mac OS, et il n'y a aucune raison de faire confiance à un navigateur Web pour être meilleure méthode de transfert de fichiers que un client FTP.

En ce qui concerne le soutien de la barre de progression:

Support currenly barre de progression est très limitée en PHP (actuellement uniquement par modules 3ème partie qui sont un peu poilu) si je belive il y a un plan pour inclure le module dans la distribution standard. Googler uploadprogress.so devrait donner des résultats pertinents.

En réponse à Littlegreen:

je cette extension http://pecl.php.net/package/uploadprogress (qui a réussi à entrer en conflit avec au moins une extension que j'avais déjà installé - même si je pense qu'ils ont fixé cette question maintenant) et a écrit un gestionnaire javascript sur mesure ( http://iaincollins.com/javascript/FileUploader.js ) en fonction des multiples exemples sur le web, dans un effort pour intégrer le meilleur de chacun. par exemple. L'utilisation d'un iframe invisible pour revenir les progrès de téléchargement de manière transparente, la création d'une boîte de dialogue de téléchargement de fichier DHTML et remplacer le contrôle de téléchargement de fichiers basé sur le navigateur laid en le rendant transparent et superposant au-dessus de ma propre contrôle (il était encore cliquable, comme vous pouvez « t invoquez la boîte de dialogue de téléchargement de fichiers à partir de JavaScript, mais vous pouvez obtenir le nom du fichier qui a été sélectionné pour le téléchargement). Trouver le bon style CSS a été particulièrement important pour cela -. Il est tout à fait spécifique navigateur

La JS j'ai écrit est malheureusement très situation spécifique, mais il pourrait avoir quelques éléments utiles - désolé, je n'ai rien public, je peux créer un lien comme il a été créé pour une interface privée.

Je vois qu'il ya un plugin jQuery pour Uploadprogress maintenant - il ne fait pas tout, mais ce serait un bon départ: http://nixbox.com/demos/jquery-uploadprogress.php ... Je me souviens de meilleurs exemples étant là-bas, dont un qui a traité le téléchargement de fichiers multiples (par les files d'attente et l'exécution les séquentielle -. vous aviez toujours sélectionner un fichier à la fois), mais malheureusement, je ne peux pas sembler les trouver

Conclusion:

J'essayer d'éviter les tracas et faire quelque chose comme l'espace FTP ou privé / peer to peer application de transfert de fichiers, sauf si vous avez le temps.

Protocole de transfert de fichiers (comme son nom l'indique) est spécialement conçu pour transfert de fichiers volumineux et est une meilleure option car il aura besoin peu de configuration (vous ne courrez pas dans les limites des ressources) et vous pouvez raisonnablement attendre le client d'avoir FTP le soutien de curriculum vitae, en supposant que votre serveur ne (si les stands de téléchargement, ils devraient être facilement en mesure de reprendre où ils ont laissé, plutôt que de repartir de zéro à nouveau comme ils devraient le faire avecun téléchargement HTTP basé sur des fichiers PHP).

Alors que HTTP a la capacité de gérer le téléchargement de fichiers, il est pas aussi robuste, et diverses limites de ressources (dans le serveur web, et en PHP - comme mentionné ci-dessus) devraient être explicitement configuré pour faire le téléchargement d'un fichier de plusieurs Go possible. Même avec WebDAV (via HTTP sectionner un système de fichiers distant), il est transparent, mais il a tendance à ne pas être aussi robuste que FTP, principalement en raison des implémentations client buggy - Plus précisément, il peut y avoir des problèmes lors du transfert des fichiers très volumineux sur Windows et Mac OS, bien que il est généralement très bien pour les petits (par exemple <500 Mo) les transferts de fichiers.

Comme une note de côté, la spécification HTML5 améliorer la façon dont le téléchargement de fichiers sont traités - avec la possibilité de télécharger plusieurs fichiers à la fois, et télécharger le fichier des progrès dans le cadre du cahier des charges, mais pour l'instant ce n'est pas vraiment une option <. / p>

Autres conseils

Je suggère FTP, la raison étant que vous pouvez faire un transfert groupé, début / pause / stop et de préserver la hiérarchie des dossiers (le cas échéant). Les solutions FTP pour Mac sont grands; J'utilise la transmission et Cyberduck. Filezilla est également bon.

Une autre option FTP serait pour votre client d'utiliser son Mac pour configurer un serveur FTP local, à partir de laquelle vous pouvez télécharger les photos. Cela nécessite un peu de configuration, mais il est certainement possible.

Dans tous les cas, je ne recommanderais pas un fichier basé sur un navigateur pour télécharger cette quantité de fichiers. Si vous les télécharger un par un (ou même en lots), vous êtes susceptible de créer un beaucoup de tracas pour votre client . paramètres post de PHP et télécharger des restrictions de taille fichier fait compresser toutes les images dans une archive difficile, et le transfert de fichiers volumineux peuvent causer des problèmes de délai d'attente que les navigateurs ne sont généralement pas capables de gérer Interrompre et reprendre.

L'exception à uploads par navigateur est d'utiliser un fichier Uploader basé sur Flash, tels que SWFUpload . Avec elle, vous pouvez avoir votre client de sélectionner tous les fichiers en une seule fois, après quoi les fichiers seront mis en attente et téléchargés un par un à votre script côté serveur (qui peut être en PHP). En fait, je l'ai utilisé cela pour le même but de me laisser envoyer des fichiers clients.

Cela dit, je vous recommande encore FTP dans ce cas.

Abstraction faite du nombre de fichiers, la quantité de données-nous parlons?

Si vous êtes préoccupé par le nombre de fichiers, juste que le client les zip. Vous pouvez décompresser le zip sur le serveur et mettre les images là où ils doivent aller.

En outre, demandez-vous si cela est un processus qui va se passer régulièrement, ou est-il un entretien irrégulier ou une tâche de démarrage unique? Si oui, vous vous épargnerez et votre temps de client et de l'argent en simple échange des fichiers via FTP ou une autre méthode.

Je viens d'avoir à résoudre un problème similaire pour un client. Ils ont régulièrement leurs clients télécharger un tas de fichiers eux, un total 300-400mb, normalement par FTP. Cependant, un client avait un pare-feu et ne pouvait pas utiliser le protocole FTP. Et donc je devais coder un Uploader HTTP.

Je cherchai autour de l'Internet pour une solution PHP et trouvé essentiellement les mêmes choses que Ian Collins dit déjà, 1) PHP est possible, mais poilue et 2) support de barre de progression pour PHP est mauvaise. Je peux vous donner un peu plus de détails si, sur les limites upload / taille, vous devriez être bien aussi longtemps que vous incluez un fichier .htaccess dans votre répertoire Web contenant le code suivant, qui devrait vous donner une limite de téléchargement de 3 Go et exécution d'un script illimité le temps aussi longtemps que votre hébergeur prend en charge la définition des valeurs de PHP dans conf htaccess:

php_value upload_max_filesize 3000M
php_value post_max_size 3000M
php_value max_execution_time 0
php_value max_input_time 0

Coding un script Uploader est relativement simple. Un bon tutoriel se trouve .

En utilisant une barre de progression est plus délicate. Une barre de progression PHP n'est pas possible sans installer des extensions. Une option généralement acceptée est d'utiliser un solution Perl / PHP hybride , qui vous oblige cependant d'être en mesure pour exécuter des scripts CGI sur votre serveur. Je ne peux pas, alors je l'ai quitté la barre de progression en. Cela est très discourtois avec la clientèle bien, parce qu'il est à regarder un écran sans mouvement depuis un certain temps, pensant que le navigateur a bloqué, et s'il ferme en quelque sorte ou perd sa connexion Internet, il devra recommencer.

plusieurs fichiers à la Charger fois est aussi délicate. En utilisant une commande de sélection de fichiers avancé et AJAX pour ouvrir plusieurs séance de téléchargement simultané, vous pouvez venir un long chemin, mais vous retrouverez avec le même problème: quand il échoue à cause d'un nom de fichier bizarre, disque plein ou perdu la connexion, le client doivent recommencer, mais il y aura un gâchis de fichiers déjà sur le serveur. Coder une solution de reprise est userfriendly pas une tâche facile. Je vous conseille de laisser le client ZIP ses fichiers et les télécharger dans un volume.

Puisque c'est une chose une seule fois, je vous conseille de ne pas se soucier de la rédaction de votre propre solution et utiliser des outils déjà disponibles. Pourquoi ne pas vous laissez votre utilisation client FTP, par exemple la version MAC de FileZilla ? Ou DropBox ? Ou que diriez-vous de le laisser télécharger les fichiers sur Google Docs , qui depuis permet récemment télécharger et partager tous les fichiers jusqu'à 100 Mo?

Vous pourriez envisager SWFUpload (http://code.google.com/p/swfupload/), qui est une bibliothèque de Flash et Javascript pour faire le téléchargement beaucoup plus facile. Il a un support PHP et .Net de la boîte, il serait probablement bien adapter à vos besoins.

Je l'ai utilisé jusqu'à 1000 images en une seule session de téléchargement.

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