Soyez le premier à donner votre avis sur cette source.
Snippet vu 17 781 fois - Téléchargée 26 fois
Dans un fichier quelconque il y a un formulaire : <form name="formulaire" enctype="multipart/form-data" method="post" action="FORMULAIRE.PHP"> IMPORTANT le enctype pour le FILE ! il y a un imput : <input type="file" name="p_coll_draft"> FORMULAIRE.PHP _________ ... blabla include ("../leurs_fichiers/99999999999.php");//j'aurais besoin, des fonctions bientôt if($il_existe_deja_un_fichier_en_bdd_pour_l_utilisateur){// modifier, donc d'abord supprimer l'ancien fichier $enregistre=F_PurgePla($old_plak);//je supprime le fichier existant if($enregistre){// s'il a bien été supprimé echo "<blockquote><br>Fichier supprimé.<br></blockquote>"; 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 } else{ echo "<blockquote><br>Erreur de traitement ; fichier pas vu, pas pris, pas supprimé.<br></blockquote>"; } } // maintenant il s'agit de créer ou recréer un nouveau avec la nouvelle valeur venant du POST if(strlen($_FILES['p_coll_draft']['name'])>4){// le fichier mis doit avoir un nom de + de 4 caractères de long... // j'affecte les données de $_files à mes variables de travail $pnom=$_FILES['p_coll_draft']['name']; $pnomtmp=$_FILES['p_coll_draft']['tmp_name']; $ptypemine=$_FILES['p_coll_draft']['type']; $ptaille=$_FILES['p_coll_draft']['size']; $perror=$_FILES['p_coll_draft']['error']; // j'ajoute un document à l'utilisateur courant ($id_user), car j'ai besoin de l'ID du document en bdd pour renommer le fichier envoyé $reket_i_doc="insert into user_doc (UD_ID, U_ID, UD_TYPE, UD_PATH, UD_DATE) values (\"\",\"$id_user\", 0,\"\",\"$date_heure\")"; echo "$reket_i_doc<br>";// pour voir ce qui se passe mysql_db_query($sql_bdd,$reket_i_doc,$db_link) or die(mysql_error()); $id_plaket=mysql_insert_id(); include ("etat_des_plaket_up.php"); } ... blabla ETAT_DES_UPLOAD.PHP _________ <?PHP if(is_uploaded_file($pnomtmp) && strlen(trim($pnom))>4 && strlen(trim($pnom))<255){//je contrôle que j'ai bien kelke chose de sérieux à traiter echo "arrive avec $pnom en $pnomtmp<br>";// pour info debbug $testoki=0;// variable de réussite des tests if($ptaille>400000){// la taille doit être inférieure à 400 Ko echo "<p><blockquote>$tas_aff[erreurpathlong]</blockquote></p><br>";// message d'erreur $testoki=$testoki+1; } $extensiondoc=strrchr($pnom, ".");//on doit pouvoir faire ca avec '$ptypemine', mais je suis comme Saint-Thomas... Incrédule. echo "extension : $extensiondoc<br>";// pour info debbug $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');// limite des extensions autorisées if(!in_array($extensiondoc,$extensionmax)){// si l'extension est interdite (pas autorisée en fait !) echo "<p><blockquote>$tas_aff[erreurpathext]</blockquote></p><br>";// message d'erreur supplémentaire $testoki=$testoki+1; } else{ $minemax=array('application/msword','application/msexcel','application/mspowerpoint','application/pdf','image/gif','image/jpeg','image/png','image/tiff','text/plain','image/bmp','application/vnd.ms-powerpoint', 'application/vnd.ms-word','application/vnd.ms-excel'); if (function_exists ('mime_content_type')){$minemagic=mime_content_type('$pnom');} else{$minemagic=$ptypemine;} if(!in_array($minemagic,$minemax)){ echo "<p><blockquote>-2 $tas_aff[erreurpathext]</blockquote></p><br>"; $testoki=$testoki+1; } } if($testoki==0){// si il n'y a pas d'erreur $nom_plus=$id_user*$id_user;// je créé un nom $nomnouvodoc="fichier_a_".$nom_plus."_".$id_plaket.$extensiondoc; echo "F_StockPla ($pnomtmp,$nomnouvodoc)<br>";// pour les tests de debbug, toujours... $enregistre=F_StockPla($pnomtmp,$nomnouvodoc);// je stocke if ($enregistre){// si j'ai bien réussi à stocker le fichier $pathstock="../leurs_fichiers/".$nomnouvodoc;// path de stockage // update en bdd.... $reket_u_user="update user set U_FICHIER=\"$id_plaket\" where U_ID=\"$id_user\"";}// l'utilisateur echo "$reket_u_user<br>";// pour le debbug mysql_db_query($sql_bdd,$reket_u_user,$db_link) or die(mysql_error()); $reket_u_doc="update user_doc set UD_PATH=\"$pathstock\" where UD_ID=$id_plaket";// le document echo "$reket_u_doc<br>";// pour le debbug mysql_db_query($sql_bdd,$reket_u_doc,$db_link) or die(mysql_error()); echo "<p><blockquote>$tas_aff[confirmpathenreg]</blockquote></p><br>";//confirme enregistrement } else{// je supprime donc le doc ajouté en BdD $reket_d_doc="delete user_doc where UD_ID=$id_plaket";// le document echo "$reket_d_doc<br>";// pour le debbug mysql_db_query($sql_bdd,$reket_d_doc,$db_link) or die(mysql_error()); echo "<p><blockquote>$tas_aff[erreurpathenreg]</blockquote></p><br>";}//message d'erreur sur enregistrement } else{echo "<p><blockquote>$tas_aff[erreurpath]</blockquote></p><br>";} } else{ echo "<blockquote><br>Erreur inconnue durant le téléchargement du fichier. Veuillez prévenir le Webmaster.<br></blockquote>"; } ?> 99999999999.PHP __________________ <? function F_StockPla($doc,$nomdoc)// Attention !!!!!! $doc NE contient PAS le répertoire de stockage du fichier à enregistrer { //echo "nom d'origine du fichier : $pnom, Nom temporaire du fichier : $pnomtmp, type MIME du fichier : $ptypemine, taille du fichier : $ptaille, error : $perror<br>" $path_doc="/homepage/F/d54513f1d5/htdocs/www/leurs_fichiers/".$nomdoc;//changement de nom //echo "stockdoc, met $doc là : $path_doc<br>"; $stock=move_uploaded_file($doc,$path_doc); if($stock){return true;} else{return false;} } function F_PurgePla($doc)// Attention !!!!!! $doc contient le répertoire de stockage du fichier à supprimer { echo "rentrer dans PurgePla : $doc"; echo "arrive ($doc) pour '/homepage/F/d54513f1d5/htdocs/www/'".$doc."<br>"; $efface=unlink('/homepage/F/d54513f1d5/htdocs/www/'.$doc); if($efface){return true;} else{return false;} } ?>
Commentaires
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
"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°
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°
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 :)
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 :-)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.