Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

UPLOAD avec PHP FTP...HTTP...Poids fichiers !!??

12 réponses
Avatar
Damien ASCANI
Bonsoir,

Je souhaite mettre en place un formulaire de upload de fichier pour
transmettre des images sur un serveur. Je souhaite savoir quelles
fonctions de PHP (ex: getimagesize($source)) pour déterminer le poids
d'une image fonctionnent uniquement APRES upload sur le serveur ou AVANT ?

Si on utilise la methode via HTML ou FTP y aura-t-il une différence ?
Par FTP je peux bien créer un "dossier" spécifique à mon utilisateur le
tout dans mon dossier "UPLOAD_TEMPORAIRE" ?

La méthode FTP fait-elle comme le HTML, c'est à dire qu'elle crée des
fichiers temporaires que l'on doit déplacer ensuite ? Mais si l'on crée
un nouveau dossier ?

Car je cherche à connaitre la poids de toutes mes images pour les
additionner et avoir le poids total de "mon envoi" AVANT UPLOAD/ Je
souhaite faire passer cette variable à Flash ce qui me permettra de
faire une "anim type progress bar".

Que me conseillez vous ?

D'avance je vous remercie.

Damien.

10 réponses

1 2
Avatar
John GALLET
Bonjour,

Je souhaite mettre en place un formulaire de upload de fichier pour
transmettre des images sur un serveur. Je souhaite savoir quelles
fonctions de PHP (ex: getimagesize($source)) pour déterminer le poids
d'une image fonctionnent uniquement APRES upload sur le serveur ou AVANT ?


Le fichier est sur le PC/mac du client, PHP est à 2000Km sur un serveur,
le SEUL moyen qu'il puisse avoir une vague idée de la taille PROBABLE du
fichier est si le CLIENT (navigateur) lui en indique une en début
d'upload. Sinon, il faudra évidemment attendre que le transfert soir
terminé.

Si on utilise la methode via HTML ou FTP y aura-t-il une différence ?
Par FTP je peux bien créer un "dossier" spécifique à mon utilisateur le
tout dans mon dossier "UPLOAD_TEMPORAIRE" ?
Où tu voudras mais ATTENTION je mets le bémol tout de suite : pour

transférer un fichier du client PC/Mac vers le serveur en FTP, il faudra
utiliser... un client FTP, pas du html ou php. Les fonctions FTP de PHP
***le transforment LUI EN CLIENT FTP*** par exemple, si après avoir
uploadé le fichier par http on voulait le déposer sur une autre machine
non publique. On ne PEUT PAS utiliser les fonctions FTP de php pour
transférer un fichier depuis un client vers le serveur php.

La méthode FTP fait-elle comme le HTML, c'est à dire qu'elle crée des
fichiers temporaires que l'on doit déplacer ensuite ? Mais si l'on crée
un nouveau dossier ?
On ne peut pas faire du développement web et ne pas connaître le stritc

minimum minimorum des protocoles impliqués comme ftp, http, nntp,
smtp/pop/imap etc... Conseil sans frais à toute personne qui n'a jamais
lancé une fenêtre dos ou un shell pour faire un FTP en ligne de commande :
dépêchez vous d'en faire un au lieu de cliquer dans tous les coins sans
rien comprendre.

Car je cherche à connaitre la poids de toutes mes images pour les
additionner et avoir le poids total de "mon envoi" AVANT UPLOAD/ Je
souhaite faire passer cette variable à Flash ce qui me permettra de
faire une "anim type progress bar".
Alors il est encore plus illogique de le faire côté serveur si c'est pour

le réexécuter côté client une fois la page générée :-).

Que me conseillez vous ?
Un scripting côté client qui puisse faire le calcul. Avec les security

manager, je ne sais pas si js/applets sont appropriés, et je ne connais
rien à flash (couche de présentation, pas mon rayon).

Plus d'informations sur les uploads http dans la FAQ de ce forum
http://faqfclphp.free.fr/ ou le manuel de php qui est là dessus très
prolixe. S'intéresser dans ton cas à la variable hidden MAX_FILE_SIZE, qui
indique à PHP, pour un fichier, la taille max à accepter si le navigateur
a la bonté de la lui fournir. Elle doit être inférieure ou égale au
paramètre correspondant dans php.ini, son rôle étant de ne pas lancer un
upload si on sait à l'avance qu'il est voué à l'échec parce que trop gros
par rapport à ce qui est paramétré côté serveur.

a++;
JG

Avatar
Damien ASCANI
Pfiuuuu...bon reprenons nos esprits. Avant tout merci pour ta réponse.


Le fichier est sur le PC/mac du client, PHP est à 2000Km sur un serveur,
le SEUL moyen qu'il puisse avoir une vague idée de la taille PROBABLE du
fichier est si le CLIENT (navigateur) lui en indique une en début
d'upload. Sinon, il faudra évidemment attendre que le transfert soir
terminé.
En gros je vais voir si en javascript on peut déterminer ce paramètre

mais serait-il envisageable de faire une page "verification" qui check
les paramètres (file size + Max_file_size etc...) qui ensuite lance le
upload ?

Où tu voudras mais ATTENTION je mets le bémol tout de suite : pour
transférer un fichier du client PC/Mac vers le serveur en FTP, il faudra
utiliser... un client FTP, pas du html ou php. Les fonctions FTP de PHP
***le transforment LUI EN CLIENT FTP*** par exemple, si après avoir
uploadé le fichier par http on voulait le déposer sur une autre machine
non publique. On ne PEUT PAS utiliser les fonctions FTP de php pour
transférer un fichier depuis un client vers le serveur php.


Je ne souhaite pas faire passer mon visiteur par un gestionnaire FTP
pour des questions de convivialité. Mon doute (pour être plus précis):
Lors du upload via http, PHP crée des fichiers temporaires pour eviter
tout écrasement de fichiers (Vrai/Faux).

Comment "séparer" les dossiers de différents utilisateurs pas la méthode
http...? C'est en ce sens que je pensait au FTP de PHP avec un
répertoire de destination que je définis à l'avance de manière
"aléatoire" du genre Mon dossier de upload/MaVariable/ = dossier de
l'utilisateur

Car mes utilisateurs ne seront pas forcément enregistré au début...
Je sais je fais pas simple ;-)


On ne peut pas faire du développement web et ne pas connaître le stritc
minimum minimorum des protocoles impliqués comme ftp, http, nntp,
smtp/pop/imap etc... Conseil sans frais à toute personne qui n'a jamais
lancé une fenêtre dos ou un shell pour faire un FTP en ligne de commande :
dépêchez vous d'en faire un au lieu de cliquer dans tous les coins sans
rien comprendre.


Une source sous Os X pour mieux comprendre ? :-)

Alors il est encore plus illogique de le faire côté serveur si c'est pour
le réexécuter côté client une fois la page générée :-).


NON ! (je schématise): Mon form de vérif me trouve ma somme de poids de
fichiers et la passe à Flash dans un POP Up...je connais donc mon poids
total final. Flash intérroge à interval régulier (en lançant un script
PHP - il sait le faire) le poids du dossier (Ma VARIABLE :-) ) et Fash
récupère la "nouvelle variable" POIDS_DOSSIER et s'occupe du calcul de
bande passante, ratio etc... la page de upload continu son upload dans
sson coin.

S'il y a bcp d'âneries n'hésite pas, j'ai le cuir dur !

Un scripting côté client qui puisse faire le calcul. Avec les security
manager, je ne sais pas si js/applets sont appropriés, et je ne connais
rien à flash (couche de présentation, pas mon rayon).


Flash ne saura pas lire dans un dossier mais saurais interroger une base
SQL (via PHP) - en l'occurence là on dis à flash de lancer le script php
qui "chekera" le poids du dossier et renvoi la valeur à Flash. Flash le
renvoi 1 sec plus tard faire la même...tec...jusqu'à ce que la valeur
renvoyée par le script PHP = Valeur initialement fournie à Flash

C'est simple NON ?

Plus d'informations sur les uploads http dans la FAQ de ce forum
http://faqfclphp.free.fr/ ou le manuel de php qui est là dessus très
prolixe. S'intéresser dans ton cas à la variable hidden MAX_FILE_SIZE, qui
indique à PHP, pour un fichier, la taille max à accepter si le navigateur
a la bonté de la lui fournir. Elle doit être inférieure ou égale au
paramètre correspondant dans php.ini, son rôle étant de ne pas lancer un
upload si on sait à l'avance qu'il est voué à l'échec parce que trop gros
par rapport à ce qui est paramétré côté serveur.


J'ai lu...mais n'ai pas trouvé mon bonheur.

Merci de m'apporter plus de précisions.

Damien.

Avatar
Sebastian 'CrashandDie' Lauwers
Damien ASCANI wrote:

[...]

NON ! (je schématise): Mon form de vérif me trouve ma somme de poids de
fichiers et la passe à Flash dans un POP Up...je connais donc mon poids
total final. Flash intérroge à interval régulier (en lançant un script
PHP - il sait le faire) le poids du dossier (Ma VARIABLE :-) ) et Fash
récupère la "nouvelle variable" POIDS_DOSSIER et s'occupe du calcul de
bande passante, ratio etc... la page de upload continu son upload dans
sson coin.


Un client t'envoie un fichier, admettons que c'est une adsl 512k de
base, donc 128k en upload. Il t'envoie à 16Ko/s (bon serveur, bon FAI).
Le temps que Flash envoie la requête au second script PHP, que le script
renvoie le résultat, que Flash le récupère et qu'il ait fait le calcul
selon un algorythme de ta création, le résultat sera faussé. Cela
restera très approximatif... Et dans la plupart des cas, tellement
approximatif, que t'as plus de chance de faire un petit tableau
récapitulatif avec les vitesses, tailles et temps d'upload respectifs,
pour rendre heureux les quelques visiteurs qui se donneront la peine de
regarder la page...

Je me mets à la place d'un utilisateur. Je commence à uploader un
fichier. J'ai un antipopup, pas de fenêtre, juste un clic sur envoyer
qui dure des heures à n'en plus finir. Au bout de 40 secondes, j'en ai
marre, je ferme la fenêtre.

A la place d'un autre utilisateur. Je commence à uploader, je suis une
brêle donc pas d'antipopups, la popup flash s'ouvre, y'a marqué 30
secondes restantes... Je parle avec un ami sur msn, je reviens sur la
fenêtre, y'a marqué 40 secondes restantes... Ca commence à me gonfler,
je le dis à mon potte sur msn, je reviens, y'a marqué 10 secondes...
J'attends, la fenêtre reste constamment sur 10 secondes, j'en ai marre,
je ferme la fenêtre flash, et je me casse du site...

Résultat, tu viens de perdre deux utilisateurs, grace à un script qui
t'as pris 3 semaines à finioler, simplement parceque t'as essayer de
faire ce que tous les webmasters non soucieux du côté technique de la
chose ont essayé de faire.

S'il y a bcp d'âneries n'hésite pas, j'ai le cuir dur !


C'est péscimiste, je sais, j'espère que c'est pas du cuir de vachette
véritable (c) mais du cuir de buffle.

[...]


Amicalement,

Damien.


S.

Avatar
John GALLET
Pfiuuuu...bon reprenons nos esprits. Avant tout merci pour ta réponse.
De rien, c'est du bénévolat :-)


En gros je vais voir si en javascript on peut déterminer ce paramètre
mais serait-il envisageable de faire une page "verification" qui check
les paramètres (file size + Max_file_size etc...) qui ensuite lance le
upload ?
A ma connaissance, ce paramètre max_file_size est appliqué pour chaque

fichier, pas en somme globale de N fichiers. Quelque par c'est logique.
Pour la partie cliente, c'est pas mon rayon, je sais comment ça marche
globalement, mais je ne connais pas les subtilités de la plateforme.


Lors du upload via http, PHP crée des fichiers temporaires pour eviter
tout écrasement de fichiers (Vrai/Faux).
Oui, entre autres pour cette raison. A la limite, tu pourrais vouloir

passer les fichiers uploadés à l'antivirus, donc il est logique de les
mettre dans un "sas de décontamination". C'est comme $_REQUEST qq part.

Comment "séparer" les dossiers de différents utilisateurs pas la méthode
http...?
Tu sais pertinement à quel utilisateur (au sens : user de ton

application, pas user système) tu as affaire, par exemple en passant en
HIDDEN un identifiant de session.
Libre à toi de déplacer les fichiers temporaires où tu voudras pour gérer
cette notion de propriété.

Car mes utilisateurs ne seront pas forcément enregistré au début...
Je sais je fais pas simple ;-)
Si tu stockes des choses sans savoir à qui elles appartiennent, tu auras

le même problème quelle que soit la méthode de transfert : retrouver tes
petits plus tard en allant à la pêche au(x) fichier(s)...


lancé une fenêtre dos ou un shell pour faire un FTP en ligne de commande :
dépêchez vous d'en faire un au lieu de cliquer dans tous les coins sans
rien comprendre.
Une source sous Os X pour mieux comprendre ? :-)

Tu ouvres un compte sur free.fr si ce n'est déjà fait, tu ouvres un shell

sur ton mac, tu fais ftp ftpperso.free.fr, tu rentres ton login, ton
password, et ensuite tu tapes help ou ? et tu essayes de transférer un
fichier, etc...
Pas de source justement, le faire à la mimine permet de comprendre.

NON ! (je schématise): Mon form de vérif me trouve ma somme de poids de
fichiers et la passe à Flash dans un POP Up...
Bah SI. Si tu me dis que c'est "ton form" ça veut dire que tu envoies

l'information au serveur, donc tous les fichiers attachés. Quand il te
rend la main, l'upload est... terminé.

total final. Flash intérroge à interval régulier (en lançant un script
PHP - il sait le faire) le poids du dossier
Déjà tu introduis une notion de multithread dans ton client, mais

peut-être flash sait-il effectivement faire, ou sinon il faut
frame/js/target=_blank.
Mais comme le transfert n'est pas terminé et que le fichier est en cours
de création, tu ne pourras pas savoir côté serveur quelle quantité de
données a été reçue, tu ne connais même pas le nom du fichier...

S'il n'y a pas un moyen d'interroger le navigateur pour savoir où il en
est, je ne vois pas comment tu vas faire.

S'il y a bcp d'âneries n'hésite pas, j'ai le cuir dur !
Je ne pense pas que cette méthode puisse être mise en oeuvre.

En revanche, le problème des uploads et plus généralement des barres de
progression est récurrent, et tu es loin d'être le premier à t'être posé
la question, donc gratte un peu du côté de forums plus adaptés à des
clients (js, flash), il doit bien exister des choses approchantes à ton
besoin, qui est "naturel" dès q'on s'occuppe un peu de son interface
client.

Flash ne saura pas lire dans un dossier mais saurais interroger une base
SQL (via PHP) - en l'occurence là on dis à flash de lancer le script php
qui "chekera" le poids du dossier et renvoi la valeur à Flash.
Le problème c'est que tu ne sais pas quel est le nom du fichier dans ton

répertoire. Tu connais le nom du répertoire (dépend de la config de php)
mais pas du fichier. Tu as un problème d'accès concurrentiel instantané.
Si tu es le seul à utiliser la machine, ce sera entre deux utilisateurs
différents qui uploaderaient au même moment, vu le peu d'importance de
l'information, c'est un risque facile à courir. Si tu ne maîtrise pas
combien d'autres applications tournent sur la machine, attends toi à avoir
n'importe quoi comme résultats (et pas dans le bon sens, tu afficheras
toujours des temps inférieurs à la réalité probable).

a++;
JG


Avatar
Lionel
Sebastian 'CrashandDie' Lauwers wrote:
Au bout de 40 secondes, j'en ai
marre, je ferme la fenêtre.
Compte plutot 20 secondes ;-)


la popup flash s'ouvre, y'a marqué 30
secondes restantes...
Non, il y a marqué "cliquer ici pour installer le plugin flash".

Et l'utilisateur ferme la fenêtre.

Avatar
Damien ASCANI
Sebastian 'CrashandDie' Lauwers wrote:

Au bout de 40 secondes, j'en ai
marre, je ferme la fenêtre.


Compte plutot 20 secondes ;-)


la popup flash s'ouvre, y'a marqué 30
secondes restantes...


Non, il y a marqué "cliquer ici pour installer le plugin flash".
Et l'utilisateur ferme la fenêtre.




C'est déjà plus compatible que JAVA qui n'est pas en standard sur toutes
les bécanes...flash est quand meme présent à 85% sur les mahcines et par
défaut sur les navigateurs récents.

Mais c'est vrais je pourrais faire un cgi...etc enfin tout ce que je ne
maitrise pas ! ;-)

On essaye d faire du bien avec le peu que l'on possède puisque pas grand
chose n'existe !

Damien.


Avatar
Olivier Miakinen

[ Flash ]


C'est déjà plus compatible que JAVA qui n'est pas en standard sur toutes
les bécanes...


C'est un troll ?

Flash : http://www.macromedia.com/fr/software/flash/productinfo/systemreqs/
- Windows (98, 2000, XP)
- Macintosh (Mac OS 9.x, 10.x)

Java :
http://www-ensais.u-strasbg.fr/liia/LIIA_Products_Installers/install.htm
- Windows
- Mac OS X
- IBM AIX
- Sun Solaris
- Linux
- HP UX
- Unix
- Other Java-enabled Platforms

C'est vrai que Java ne semble pas disponible pour Mac OS 9, mais à
l'inverse Flash n'est disponible sur rien d'autre que Windows et Mac.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.


Avatar
Thibaut Allender
C'est vrai que Java ne semble pas disponible pour Mac OS 9, mais à
l'inverse Flash n'est disponible sur rien d'autre que Windows et Mac.


euh... le monsieur parle du plugin flash, pas du soft qui permet d'en creer
donc, il faudrait plutot parler de ceci :
http://www.macromedia.com/fr/software/flashplayer/productinfo/systemreqs/

--
thibaut allender | freelance | http://capsule.org

Avatar
Phil
| > Si on utilise la methode via HTML ou FTP y aura-t-il une différence ?
| > Par FTP je peux bien créer un "dossier" spécifique à mon utilisateur le
| > tout dans mon dossier "UPLOAD_TEMPORAIRE" ?
| Où tu voudras mais ATTENTION je mets le bémol tout de suite : pour
| transférer un fichier du client PC/Mac vers le serveur en FTP, il faudra
| utiliser... un client FTP, pas du html ou php. Les fonctions FTP de PHP
| ***le transforment LUI EN CLIENT FTP*** par exemple, si après avoir
| uploadé le fichier par http on voulait le déposer sur une autre machine
| non publique. On ne PEUT PAS utiliser les fonctions FTP de php pour
| transférer un fichier depuis un client vers le serveur php.

Bonjour,

je rebondis sur la réponse ci-dessus :

lorsqu'on n'a pas la main sur le fichier php.ini (qui est configuré chez
l'hébergeur du site, auquel on n'a pas forcément accès), ne peut-on donc pas
uploader un GROS fichier depuis le client PC vers le serveur FTP (je veux
dire sans installer un logiciel FTP) ?

Puisque l'on ne peut utiliser de valeur de MAX_FILE_SIZE supérieure à
"upload_max_filesize" du php.ini... pour moi fixée à 2Mo semble-t-il. Or je
souhaiterai que certains internautes puissent uploader des fichiers de 5 à
10Mo... sans eux-mêmes installer un logiciel FTP.

Voyez-vous une solution pour que ces uploads soient possibles via un
navigateur ?

Merci d'avance.

Phil
Avatar
Damien ASCANI
http://www.macromedia.com/fr/software/flashplayer/productinfo/systemreqs/



TOUT A FAIT, le plug in flash s'adapte au navigateur et est donc
largement diffusé, sur la plupart des plate-formes.

La question de l'attente...je pense que lorsque l'on upload un certain
nombre de fichiers avec un certain poids, si le client ne peut attendre
autant qu'il n'utilise pas le services (mais pour ça il peut m'envoyer
un cd avec ses docs s'il n'est pas pressé !).

C'est comme si l'on veut lire un DVD, il faut au moins que le lecteur
charge les infos un minimum !

Moi je cherche à apporter un plusau niveau graphique et utilisateur
plutot qu'un gif animé.

Actuellement les seuls soltions à ma connaissances sont:

1/ UPLOAD_PROGRESS_METER qui modifie Apache et PHP - compliqué (très)
2/ HTML_PROGRESS qui utilise une class PEAR pour PHP - pas pratique
3/ MEGAUPLOAD qui utilise un script perl via apache - Bcp d'erreurs CGI
4/ Solution via java - pb: oblige le client a mettre java sur sa bécane.



Peut-être que je harche l'impossible après tout :-)

1 2