2010-05-15 7 views
1

Je voudrais que mon script PHP télécharge un fichier avec un certain nom de fichier dans un répertoire de mon choix. Cependant, le hic, c'est que j'en ai besoin d'exister immédiatement après le téléchargement afin que je puisse le surveiller sur mon serveur. Je ne veux pas utiliser une extension PHP ou quelque chose - cela devrait être très facile à transférer vers n'importe quelle configuration de PHP. Donc, fondamentalement: Y at-il un moyen de garantir que, depuis le début du processus de téléchargement de fichiers, le fichier a un certain nom et un emplacement sur le serveur?PHP upload filename

+3

Voulez-vous surveiller de sorte que vous pouvez afficher la progression du téléchargement? Vous pouvez donc traiter le fichier lors de son téléchargement? Un peu plus de contexte serait utile, ici. –

+0

Je veux enregistrer la progression du téléchargement, et éventuellement faire un peu de traitement - donc les deux je suppose! – Cam

Répondre

0

Je ne pense pas que vous pouvez configurer le nom, car ce sera un nom aléatoire dans le dossier temporaire. Vous devriez être en mesure de changer le répertoire, mais je n'arrive pas à trouver la réponse sur Google (consultez php.ini).

3

Pas que je sache.

PHP utilisera le dossier tmp défini par php.ini pour stocker les téléchargements jusqu'à ce que vous les copiez à leur emplacement correct avec move_uploaded_file(). Il est donc très facile de connaître son emplacement, mais le nom du fichier est aléatoire et je ne pense pas que vous puissiez le définir. Si vous n'effectuez pas plusieurs téléchargements simultanés (par exemple, si vous ne voulez télécharger que des fichiers et si vous savez que vous ne téléchargerez pas deux fichiers en même temps), vous pouvez vérifier le fichier de téléchargement le plus récent dans le tmp annuaire.

La solution commune pour les téléchargements de surveillance est apc.rfc1867

+0

+1. Ouais - J'essaie en fait de trouver une solution de contournement qui n'a pas besoin d'apc, comme j'aimerais l'utiliser pour les installations qui ne l'ont pas.J'aime vraiment, vraiment l'idée de trouver le fichier de téléchargement le plus récent dans le répertoire tmp. La seule chose est - est-il un moyen d'avoir un deuxième script php feu immédiatement une fois que le téléchargement commence à saisir le nom du fichier le plus récent? – Cam

+0

Encore une fois, pas que je sache. La première ligne de php sera exécutée après que tout soit téléchargé. Vous devriez appeler une autre page via AJAX lorsque le formulaire est soumis et le traitement ici :) – MartinodF

0

Pour autant que je sache, ce n'est pas possible avec PHP, comme une demande de téléchargement de fichiers présente l'intégralité du fichier au système dans une requête. Il n'y a donc aucun moyen pour le serveur PHP de savoir ce qui se passe jusqu'à ce qu'il reçoive la requête entière.

1

Je sais de trois options:

  1. RFC1867 (comme mentionné par d'autres) qui vous permet d'interroger la progression du téléchargement en utilisant ajax
  2. uploaders à mémoire flash comme SWFUpload qui vous permettent d'interroger la progression du téléchargement en utilisant JavaScript
  3. Créez un démon de ligne de commande PHP en écoute sur le port 80 qui accepte les téléchargements de fichiers et utilisez la mémoire partagée (ou tout autre mécanisme) pour communiquer la progression du téléchargement. J'aimerais pouvoir trouver le lien, mais j'ai lu un excellent article sur un site qui permettait aux utilisateurs de télécharger leur fichier XML de bibliothèque iTunes, et il a été traité en direct par le serveur au moment du téléchargement. Très cool, mais évidemment plus impliqué que les options précédentes.

J'ai eu une bonne chance avec SWFUpload dans le passé.

0

Il n'existe aucun moyen de surveiller la progression du téléchargement de fichiers à l'aide de PHP uniquement, car PHP ne distribue pas d'événements de progression pendant le téléchargement. Ceci est possible en utilisant un uploader Flash même si Flash télécharge via un script PHP. Flash interroge le fichier temporaire sur le serveur pendant le téléchargement pour répartir les événements de progression. Certains des frameworks javascript comme YUI utilisent un fichier SWF pour gérer les téléchargements. Découvrez le widget Uploader de YUI.

http://developer.yahoo.com/yui/uploader/