UPLOAD / AJOUT / SUPPRESSION DE FICHIER SUR VOTRE SITE

vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 - 23 déc. 2006 à 04:01
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012 - 26 déc. 2006 à 12:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40814-upload-ajout-suppression-de-fichier-sur-votre-site

cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
26 déc. 2006 à 12:58
Hello,
Merci pour le script !! pour ce qui est des uploads justement je suis à la recherche d'un script pour faire des uploads avec des poids plus importants : les quelques megas possibles ne sont pas assez pour moi qui voudrais faire de la mise en ligne de fichiers plus lourds.
Quelqu'un aurait il des idées ?? est-ce que le php est adapté pour cela ?? faudrait il prendre une autre techno ??
D'avance merci pour vos suggestions !!
H
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 déc. 2006 à 20:04
Oups erreur...

"la préincrémentation est légèrement plus rapide que la postincrémentation car la première est effectuer de suite sans bufferisation alors que la seconde est effectuée après l'execution de l'instruction et est donc mise en tampon en attendant"

Sinon les nom de variable à ralonge c'est peut être explicite mais c'est plus long à parser et prend plus de place dans la table des symboles de php... donc faire des nom de variable oui mais des noms courts... .. .

$il_existe_deja_un_fichier_en_bdd_pour_l_utilisateur => $user_file_exist

c'est mieux quand même... au pire tu commente au moment de l'instanciation de la variable si tu a peur que l'utilisateur soit golio... .. .

@ tchaOo°
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 déc. 2006 à 19:59
La virgule est un tout tout tout petit peu plus rapide que la concaténation... mais franchement on s'en fout un peu... la postincrémentation est plus rapide que réaffecter une variable avec sa valeur de même que la préincrémentation est légèrement plus rapide que la postincrémentation car cette dernière est effectuer de suite sans bufferisation... .. .

Pour ce qui est le la sécurité... l'extension mime-magic est du fait de la fiabilité contestable des résultats quelle donne à éviter quand au mime type fournis lors de l'upload il est, tout comme la taille du fichier, très facilement falsifiable... même getimagesize() peut être contourné (lors d'upload d'image biensur) le seul moyen 100% fiable c'est de parser le contenu du fichier... bref c'est la misère mais c'est la seule solution... .. .

@ tchaOo°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
24 déc. 2006 à 16:40
"en php, et uniquement en php, $testoki=$testoki+1 est plus rapide que $testoki++ (est-ce encore valable en php 5 ?)"

Ohoh ? Le postincrément est toujours plus rapide qu'un : $var = $var + 1 car il n'y a pas de re-déclaration de variable dans le postincrément :o
Peut être qu'en PHP3... et encore :)

"FhX > "question de performance" La, encore.. c'est à démontrer :)
>> http://www.vulgarisation-informatique.com/optimiser-php.php"

Je décortique les chiffres quand même :
- Plateforme : PHP4 (ou 4.2 je sais plus de quand date ces infos ^^)
- Apache : 1.xx
- Itération : 100 000 tours.
- Type d'echo() : mot simple + une variable.

Pour moi ca veut absolument rien dire.

On est à PHP5.2, Apache 2... et itérer sur 100 000 tours ne sert à rien.
De plus, faire un echo pour concatener un 'bonjour '.$var; ... bof bof.

De plus, si vraiment on prend en compte le bench (mais bon :s), on s'apercoit de la différence de 7ms. 7ms sur 100 000 tours, pour concatener une pauvre variable, je me marre.

Il aurait fallu trouver un bench plus récent... PHP5.2 pour commencer. Puis trouver une phrase avec au moins une bonne trentaine de variables.
Parce que pour moi, ce bench ne vaut plus rien à l'heure actuelle.


"CQFD :p (même si la différence est minime :)"
Mauvaise démonstration. Tu aurais du faire ces tests toi même au lieu de pomper bêtement sur un site qui a fait ces tests l'année dernière (et oui, Antho a fait ces tests parce qu'on les lui avait demandé à l'époque :) C'était notre 'bencheur' de PHPCS ^^
Je maintiens donc ce que je dis... le passage d'argument n'est pas plus rapide qu'une concaténation. (dans le sens ou il y a un grand écart je parle)

Attention : Bon à savoir (doc php.net)
<?php
echo "2 + 2 = " . 2+2; // This will print 4
echo "2 + 2 " , 2+2; // This will print 2+2 4
?>

Voila une explication du fait que la virgule est un "tout petit peu" plus rapide que le point. Et encore :)
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
24 déc. 2006 à 10:01
Salut,

Je sais que je devrais plutôt commenter la source ici que déballer mes états d'âme, mais je ne peux pas m'empêcher de faire une remarque.

vilhjalms, tu as dit "Votre code HTML ne répond pas au standart XHTML définit par la W3C (www.w3.org"... alors sans réouvrir un débat (sinon on ira dans le forum), juste une question:
Est-ce que tu parles des langues étrangères? Oui. Est-ce que tu fais des fautes en parlant? Oui. Et bien si je suis le raisonnement "XHTML strict" (qui n'est d'ailleurs PAS obligatoire), tu ne devrais plus parler tant que tu ne maîtrises pas totalement la langue!

Je suppose que tu auras compris ce que je veux dire. Pour ma part, je suis CONTRE le XHTML STRICT, mais c'est une autre histoire...

Sur ces bonnes paroles, Joyeux Noël :-)
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
23 déc. 2006 à 20:39
Y'en a qui ont peur de rien
xavier230573 Messages postés 47 Date d'inscription samedi 10 avril 2004 Statut Membre Dernière intervention 17 février 2009
23 déc. 2006 à 20:10
bonjour à tous

je trouve qu'il y a beaucoup de gens qui critiquent sur ce site .
si un petit nombre de ces personnes pouvait nous ecrire des scripts bien commantés et utiles pour nos sites ça serait bien .

merci et bon Noêl
cs_Tartuffe Messages postés 39 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 18 février 2008 3
23 déc. 2006 à 17:00
J'en doute fort ! Des preuves ?

Non, rien que des on-dits qu'on m'a toujours dit...
Et répetés !
Et re-re-dit..

Alors, je crois, puis j'applique !
Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007
23 déc. 2006 à 16:26
FhX > "question de performance" La, encore.. c'est à démontrer :)
>> http://www.vulgarisation-informatique.com/optimiser-php.php

Plus particulièrement :
http://www.vulgarisation-informatique.com/images/articles/optimisation_php/etape_3.gif

CQFD :p (même si la différence est minime :)

Tartuffe dit:
"en php, et uniquement en php, $testoki=$testoki+1 est plus rapide que $testoki++"
J'en doute fort ! Des preuves ?
cs_Tartuffe Messages postés 39 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 18 février 2008 3
23 déc. 2006 à 15:49
Les vacances sont courtes ^^
Donc j'ai ajouté un test avec les minetype.. MAIS :
1- pour m'abstraire des paramètres de l'hébergeur et de la mise à jour de son fichier de gestion des Minetype, rien de 'magic', mais un array des Minetype possibles.
2- cela doit certainement dépendre du navigateur, mais il y a une différence entre 'appli/msword' et 'appli/vnd.ms-word', donc on double les Minetype possibles.
3- en transformant un ".exe" en ".xls", je suis passé sans problème. Donc la sécurité dû au Minetype pour éviter les fichiers truqués, je n'en suis pas convaincu.
4- les fichier '.TXT' apparaissent en 'appli/download', donc plus de '.TXT' autorisé en upload...

Comment faire plus de sécurité ?
De la sécurité Utile ?

Je suis tout ouie !
cs_Tartuffe Messages postés 39 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 18 février 2008 3
23 déc. 2006 à 13:53
- le seul test qui se rapproche d'un "isset" est la : if (is_uploaded_file($pnomtmp)... Cependant il est aussi là strlen($_FILES['p_coll_draft']['name'])>4.
En fait peut m'importe qu'il soit isset ou non. Car travailler avec un nom de fichier comme "2.k" ne m'intéresse pas. Par contre travailler avec un fichier dont le nom possède un longueur minimal (5) me semble important.
La logique en la matière est :
1/ ais-je un nom de plus de 4 caractères de long
2/ est-il monté en mémoire un un nom de longueur 'correct'
3/ sa taille
4/ son extension
5/ son stockage
En fait je préfère effectuer les tests les 1 après les autres en avançant un peu à chaque étape, plutot que de faire un gros test unique. Cela me permet de dissocier les messages d'erreur pour les utilisateurs.
Par contre, quel est l'impact en terme de perf de ce choix d'algo ? Ca, je n'en sais rien !
- $il_existe_deja_un_fichier_en_bdd_pour_l_utilisateur : cette variable à un nom à coucher dehors avec un billet de logement, pour que tous les quidam comprennent de koi il s'agit. Ma vrai variable est ($old_plak) ^^
- en php, et uniquement en php, $testoki=$testoki+1 est plus rapide que $testoki++ (est-ce encore valable en php 5 ?)
- Cette fonction est décpréciée depuis PHP 4.0.6. N'utilisez pas cette fonction. Utilisez mysql_select_db() et mysql_query() à la place. : je fais du copier/coller depuis php 4.0.6 ^^ Je me mets à jour. Merci ^^
- Minetype et fichier 'trucké"... Effectivement, je me posais la question du moyen de vérification du type réel. Je m'en vais donc voir ce qui ressort de l'usage de "mime_content_type ( string filename )" lors du truckage d'extension...
Et je mettrais à jour (après les vacances...)
- pour le debug... En effet d'accord. Mais à l'usage je code sans debug, et lorsque ca ne fonctionne pas, je positionne les debug un à un. Lorsque ca fonctionne je les '//' tous [: -))....

Merci des commentaires
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 déc. 2006 à 13:31
Je viens m'insurger moi aussi à 2 ou 3 petites choses :)

"Votre code HTML ne répond pas au standart XHTML définit par la W3C (www.w3.org)" C'est bien un standart et non une norme. De ce fait il n'est pas obligatoire de la respecter. Cependant, juste faire la remarque comme quoi il aurait dû regarder les spécifications XHTML pour son propre futur dans la programmation web lui aurait permi de mieux comprendre je pense.

"Pour l'identification du type de fichier je préfère me baser sur le mimetype" Entièrement d'accord.

"Pour concaténer des chaines dans un echo on préfère utiliser la virgule plutôt que le point". Faux. La concaténation se fait bien avec le point, et non avec une virgule.
La virgule est la pour passer en paramètre des variables dans une fonction, hors la concaténation n'est pas un passage d'argument il me semble :)

Pour echo(), c'est différent. echo() se construit comme suit :
void echo ( string arg1 [, string ...] )

Ce sont bien des paramètres qui sont passés à echo et qui ensuite se concatènent dans la fonction. C'est un poil différent :) (je chipotte mais bon ^^)

"question de performance" La, encore.. c'est à démontrer :)

Ca, c'était pour le reply du haut.. maintenant le code en lui même :

"if($il_existe_deja_un_fichier_en_bdd_pour_l_utilisateur){// modifier, donc d'abord supprimer l'ancien fichier"
>> variable à rallonge... beurk, a éviter !

"$testoki=$testoki+1;"
>> $testoki++;

"mysql_db_query($sql_bdd,"delete from user_doc where UD_ID=$id_du_vieux_fichier",$db_link) or die(mysql_error());// je mets à jour en BdD"
>> cf doc php.net :
Cette fonction est décpréciée depuis PHP 4.0.6. N'utilisez pas cette fonction. Utilisez mysql_select_db() et mysql_query() à la place.

Tout ton "debug" doit etre vérifié via une variable. Ex :
$debug = TRUE;

// toncode
if ( $debug ) {
echo 'Mode débug : xxxxxxxx';
}
// ton code

Comme ca, si je veux virer le debug, je met $debug à FALSE et on en parle plus.
Bref, des ptites choses à revoir rien que pour ce morceau de code.
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
23 déc. 2006 à 13:13
Votre code HTML ne répond pas au standart XHTML définit par la W3C (www.w3.org)
Pour l'identification du type de fichier je préfère me baser sur le mimetype que sur votre méthode car là un .exe renommer en .jpg passe ... cf http://fr.php.net/manual/fr/ref.mime-magic.php
Concernant votre array $extensionmax vous doublez vos extensions (en minuscule et en majuscule) alors que vous pourriez utiliser strtolower() ou strtoupper()
Pour concaténer des chaines dans un echo on préfère utiliser la virgule plutôt que le point question de performance de même que les simple quotes au doubles ...
Vous ne vérifiez aucune variable de votre formulaire ...(isset)
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
23 déc. 2006 à 13:05
-salut:

1) ligne 53: balise non fermée.

2) dans le tableau $extensionmax !! pourquoi DOC et doc meme chose pour les autres extentions, t'aurai faire
$extensiondoc=strtolower($extensiondoc);
et comme ça tu po obligé de mettre les extentions en Majuscules.
3)tu verfie l'extention du fichier seulement,d'ailleurs, un fichier se reconnait par son contenu, on pourrai avoir un fichier
php avec l'extention .jpg , (risqué)
4) .. é_è
bon prog
cs_Tartuffe Messages postés 39 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 18 février 2008 3
23 déc. 2006 à 09:54
...pour la déesse du code...
- Pas beaucoup d'HTML dans ce code...
- Type de fichier, 2 solutions, j'en ai pris une, je l'assume...
- Array, je peux difficillement le faire plus simple

Bref, ce qui est grave c'est la critique gratuite et auto-justifiée par des phrases qui laissent penser qu'on est un expert qui ne se donne même pas la peine d'expliquer tellement l'autre est nul de n'avoir pas compris des choses si simple...

Que dire ? Et bien dit le !
Au moins tous le monde profitera de ton expertise qui améliorera le code.
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
23 déc. 2006 à 04:01
Que dire ? Mauvais code html, erreur d indentification du type de fichier, des array incompréhensibles soit
$extensionmax=array('.jpg','.jpeg','.gif','.htm','.html','.txt','.xls','.doc','.pdf','.rtf','.ppt','.png','
.JPG','.JPEG','.GIF','.HTM','.HTML','.TXT','.XLS','.DOC','.PDF','.RTF','.PPT','.PNG');
etc ... etc ... cela n'est que le moins grave

Vilhjálms Sigurðsdóttir aka Frëyjá
Rejoignez-nous