Page 1 sur 3

gestion d'un upload

Posté : 10 mai 2008, 12:50
par BeRoots
salut à tous :)

je vais attaquer un upload de fichier pour mon CMS. je voulais avoir quelque conseil sur la méthodologie afin de ne pas réinventer la roue et utiliser ce qui ce fait de mieux :)

Quelques points restent encore sombre pour moi:

1°) est il possible de vérifier si un fichier est vérolé ? si oui, comment ?

2°) pour les fichiers volumineux (ex: vidéo.) quel contraintes ? (mise à par la contrainte de taille alloué disque bien sur)

3°) doit-on uploader sous le temps impartie de max_execution_time ou est ce qu'il y a moyen de faire en sorte de lancer le script de travail sur fichier uploader afin de traiter une fois l'upload terminé

4°) pour les fichiers de taille supérieur à upload_max_filesize, comment faire ?

5°) est il possible de proposer un upload sur FTP plutôt que HTTP pour ces gros fichier ? si oui existe t'il une limite de taille pour le fichier ?

6°) existe il des classes ou script d'upload en php5 en open source afin de m'apuyer sur les methodes ?

oki, je m'arrete la pour le moment car cela fait dejà une belle tartine ;)
merci d'avance pour vos conseil ;)

PS. appuyer vous sur les N° de question pour cibler vos reponse, merci...

Posté : 13 mai 2008, 15:07
par BeRoots
oki, je viens de m'apercevoir qu'i y avait un très bon tuto sur l'upload sur le site phpFrance (j'm'en souvenait plus :?)...

j'ai donc garce à ce dernier répondu à pas mal de mes interrogations :)

Mais il me reste quelques questions en suspend:

1°) En terme de sécurité, pour des fichiers images, il est judicieux de passer par un getimagesize() pour être sur à 100% que ce soit une image :) Quelqu'un voit il une méthode du genre pour ce qui est de s'assurer que des vidéos en soient des vraies ,mise à par un contrôle de type MIME + extension du fichier ?

2°) En terme de déplacement de fichier du dossier temporaire vers la destination via move_uploaded_file(), comment estimer la durée de copie du fichier de façon à définir correctement le max_execution_time ?

3°) en terme de sécurité, comment faire pour s'assurer que le fichier image ne contient pas un script ou virus, caché à l'intérieur ? (genre on upload une image avec insertion d'un script dedans et ensuite on retravaille une fois uploader le fichier pour changement extension + traitement de la chaine pour isoler le script caché et l'executer sur le server) :-k

4°) existe il un moyen de faire passer à l'anti-virus via PHP ou autre ?

Merci d'avance ;)
Je m'en vais voir chez hébergeur pour les problème liés au php.ini et anti-virus...

Posté : 02 juil. 2008, 22:59
par BeRoots
un gros UP pour ce topic tombé au oubliette... Désolé... :priere:

Mais merci d'avance pour vos conseils éclairés ;)

Posté : 03 juil. 2008, 08:22
par savageman
1) Pour les vidéos, je n'ai rien de mieux à proposer que le type mime...
2) L'upload du fichier prendra bien plus de temps que son déplacement avec move_uploaded_file. C'est un déplacement du disqie dur vers le même disque dur, donc très rapide (j'en sais rien, compte 15 Mo/sec)
3) Il faut installer un antivirus et l'éxécuter en ligne de commande pour lui passer le fichier à analyser... Seulement je ne sais pas lesquels antivirus font ça...
4) Bah... A part avec une extension perso, je crois que le exec() sera de mise. :)

Posté : 03 juil. 2008, 09:40
par Sékiltoyai
1) Si tu as ffmpeg tu peux regarder s'il peut la lire...
2) Si c'est un déplacement sur le même disque dur, l'opération est instantannée, il n'y a aucune copie.

Posté : 03 juil. 2008, 10:12
par Hywan
Hey :),
1) Pour les vidéos, je n'ai rien de mieux à proposer que le type mime...
Pour le type MIME, il est donné par le navigateur. Si le navigateur n'arrive pas à reconnaître le fichier, aucun type MIME ne sera donné.
On voit vite la limitation. Ce n'est pas vraiment une source fiable, tout comme l'extension. Au final, on n'a pas vraiment un moyen de vérifier le type d'un fichier, sauf si on a un accès au serveur, mais dans le cas d'un CMS, c'est plutôt rare (on touche beaucoup de personnes).

Posté : 03 juil. 2008, 13:14
par BeRoots
2) Si c'est un déplacement sur le même disque dur, l'opération est instantannée, il n'y a aucune copie.
en gros création d'un lien symbolique c'est ça ? c'est bisard car pourtant moi je renome le fichier en /tmp afin d'eviter les doublons avant sont move_uploaded_file

1°) si quelqu'un à des complement d'info sur le temps de copie ou si c'est juste création d'un lien symbolique?

2°) n'y a t'il pas moyen de ce passer d'un antivirus et "tout simplement" analyser la chaine de code du ficher ?



Merci d'avance :)

REMARQUE: Ma déception du jour => Mr Firefox3, que tout le monde apprécie, nous à quand même réinventer la roue :evil:

Et oui, maintenant lorsque l'on clique sur un input de type file, il ouvr automatiquement la fenetre comme pour le clique sur "parcourir". C'est pas très W3C tout cela :cry:

Je m'en vait leur dire...

Posté : 03 juil. 2008, 14:24
par Hywan
C'est pas une notion de lien symbolique ou je ne sais quoi, c'est juste que sous Unix et BSD, les fichiers ont chacun un inode qui les identifie. Un dossier est un fichier qui contient une liste d'inode, tout simplement (je vulgarise légèrement). Quand tu utilises la commande mv (pour move), il efface l'inode à un endroit pour l'ajouter autre part. Il ne déplace pas le fichier, ça ne sert à rien.
Les fichiers sont stockés sur une partie du disque, et l'arborescence est stockée sur une autre partie (ce sont des tableaux hein).

Sous Mac ou Linux, un déplacement de plusieurs giga est instantanée, ou presque (oui, j'ai simplifié avec le déplacement de l'inode). Sous Windows, c'est autre chose. Il copie le fichier source vers la destination et ensuite supprime la source. C'est forcément super long … Il me semble qu'on peut déplacer le fichier comme sous Unix et BSD (ce qui comprend Linux, Mac, et BSD), mais ce n'est pas accessible rapidement ou simplement. Je ne me souviens plus très bien, il faut chercher.
Mais avoir un serveur Web sous Windows est une hérésie, on en convient ;-).

Pour l'identification du fichier, tu peux t'amuser à analyser chaque fichier, mais la plupart des fichiers sont des binaires, et la construction diffère à chaque fois. Déjà, les binaires diffèrent selon la plate-forme sur laquelle ils ont été compilé, et l'identificateur du fichier n'est pas encodé pareil partout.

Et enfin, pour Firefox, je ne vois pas en quoi le fait de cliquer sur le champ et que ça ouvre le finder (ou l'explorateur, bref), est anti-W3C ?! C'est un comportement presque normal … Safari fait la même chose et il me semble qu'Opera également.

Posté : 04 juil. 2008, 00:20
par BeRoots
Et enfin, pour Firefox, je ne vois pas en quoi le fait de cliquer sur le champ et que ça ouvre le finder (ou l'explorateur, bref), est anti-W3C ?! C'est un comportement presque normal … Safari fait la même chose et il me semble qu'Opera également.
Oui mais c'est pas terrible car l'on ne peut pas avoir saisi du chemin au clavier ;)

Sinon, merci pour les conseils. je regarde un peut du coté de ffmpeg ...

Posté : 04 juil. 2008, 01:08
par Sékiltoyai
C'est pas une notion de lien symbolique ou je ne sais quoi, c'est juste que sous Unix et BSD, les fichiers ont chacun un inode qui les identifie. Un dossier est un fichier qui contient une liste d'inode, tout simplement (je vulgarise légèrement). Quand tu utilises la commande mv (pour move), il efface l'inode à un endroit pour l'ajouter autre part. Il ne déplace pas le fichier, ça ne sert à rien.
Les fichiers sont stockés sur une partie du disque, et l'arborescence est stockée sur une autre partie (ce sont des tableaux hein).
Tout est dit...
Sous Mac ou Linux, un déplacement de plusieurs giga est instantanée, ou presque (oui, j'ai simplifié avec le déplacement de l'inode). Sous Windows, c'est autre chose. Il copie le fichier source vers la destination et ensuite supprime la source. C'est forcément super long … Il me semble qu'on peut déplacer le fichier comme sous Unix et BSD (ce qui comprend Linux, Mac, et BSD), mais ce n'est pas accessible rapidement ou simplement. Je ne me souviens plus très bien, il faut chercher.
Non, là je t'arrête, j'ai beau être quelquefois très critique envers Windows, mais sur le coup il se comporte, et c'est tout à fait normal, exactement pareil. Lorsque tu déplaces/renomes un fichier à l'intérieur d'une partition, quelquesoit le système de fichier, il ne sera jamais copié car c'est totalement inutile.

Posté : 04 juil. 2008, 08:48
par Hywan
Sous Mac ou Linux, un déplacement de plusieurs giga est instantanée, ou presque (oui, j'ai simplifié avec le déplacement de l'inode). Sous Windows, c'est autre chose. Il copie le fichier source vers la destination et ensuite supprime la source. C'est forcément super long … Il me semble qu'on peut déplacer le fichier comme sous Unix et BSD (ce qui comprend Linux, Mac, et BSD), mais ce n'est pas accessible rapidement ou simplement. Je ne me souviens plus très bien, il faut chercher.
Non, là je t'arrête, j'ai beau être quelquefois très critique envers Windows, mais sur le coup il se comporte, et c'est tout à fait normal, exactement pareil. Lorsque tu déplaces/renomes un fichier à l'intérieur d'une partition, quelquesoit le système de fichier, il ne sera jamais copié car c'est totalement inutile.
Bah mince alors, j'en étais presque sûr :?. Je sais qu'il y a une commande pour déplacer, mais si tu le fais à la main, il copie/supprime non ? Faudra que je reteste sur j'ose allumer Windows ;-).

Merci de m'avoir repris.

Posté : 04 juil. 2008, 08:49
par savageman
Arf oui >_<
Moi j'avais dans la tête le déplacement d'un disque vers unautre, je sais pas pourquoi... (quand je déplace des gros trucs - des vidéos - c'est le seul moment où j'ai le temps de voir la barre de progression du déplacement et la vitesse... Et je copie mes vidéos d'un disque vers l'autre >_<).

Posté : 04 juil. 2008, 08:53
par Sékiltoyai
Bah mince alors, j'en étais presque sûr :?. Je sais qu'il y a une commande pour déplacer, mais si tu le fais à la main, il copie/supprime non ? Faudra que je reteste sur j'ose allumer Windows ;-).
Non plus.
Il se comporte vraiment normalement hein. C'est pas de la merde non plus Windows...

Posté : 04 juil. 2008, 09:58
par docdamien
Bah mince alors, j'en étais presque sûr :?. Je sais qu'il y a une commande pour déplacer, mais si tu le fais à la main, il copie/supprime non ? Faudra que je reteste sur j'ose allumer Windows ;-).
Non plus.
Il se comporte vraiment normalement hein. C'est pas de la merde non plus Windows...
Eh si, windows, c'est de la merde

Posté : 04 juil. 2008, 10:07
par Hywan
Ohh la belle phrase bien constructive comme on aime … On accordera un soin tout particulier à l'argumentation …
On parlait d'un comportement précis de Windows, merci de ne pas dériver du sujet, sinon j'appelle un modérateur :evil:.