Accueil > > > UPLOAD / AJOUT / SUPPRESSION DE FICHIER SUR VOTRE SITE
UPLOAD / AJOUT / SUPPRESSION DE FICHIER SUR VOTRE SITE
Information sur la source
Description
A l'usage et à la recherche, je n'ai pas trouvé de chose toute faites (mais sais-je chercher ?)... Donc je m'y suis mis en rassemblant des bout de code et d'information, et j'ai réalisé un bloc réutilisable de fichiers PHP afin de gèrer les upload de mes utilisateurs, et de leur permettre de gérer leur fichiers uploadés. Bref, à défaut d'être original ou utile, il vous évitera peut-être tous les pièges dans lesquels je suis tombé Principe : 1/ avoir les droits (777 ?) sur le répertroire de stockage des fichiers 2/ connaitre le PATH complet de son site web 3/ mettre les fonctions qui contiennent les commandes unix de gestion de fichier dans ce-dit répertoire de stockage 4/ avoir une bdd avec un table USER (ou autre...), une table DOCUMENT... Fonctionnement : Ce bloc contient 3 fichiers : - 99999999999.php : qui contient les 2 fonctions de gestion de fichier - etat_des_upload.php : qui contient le process de contrôle des fichiers à uploader et les requêtes de m.a.j. de la BdD selon les besoins - formulaire.php : qui est un extrait du fichier de traitement du formulaire qui contient le input de type FILE.
Source
- 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;}
- }
- ?>
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;}
}
?>
Conclusion
Si vous voulez utiliser ce code, il faut refaire : - vos propres requêtes. - votre algo de test pour savoir si c'est une création de fichier, un remplacement ou une suppression. Je vous ais donné le bloc Remplacement / création, partant du principe qu'un remplacement = suppression + création - modifier les données PATH et répertoires
Historique
- 22 décembre 2006 16:13:44 :
- Ajout de la supression du doc en BdD si le doc s'avère n'avoir pas été enregistré sur le disk
- 23 décembre 2006 13:32:42 :
- Modif ligne 53 (dans le echo, balise non-fermée...)
- 23 décembre 2006 15:42:58 :
- Ajout d'un test sur le Mine Type... Mais pas convaincu...
- 23 décembre 2006 16:20:41 :
- Seconde vague de gestion du Minetype, avec oiption 'magic' pas activé sur le serveur
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
créer un fichier ???? petit PB [ par MangaII ]
Hello les gars !Voilà, j'ai un petit soucis, j'ai besoin de créer des fichiers (TXT) sur mon site, depuis ma page en PHP ! le PB, c que je pe pas ! Je
Créer un fichier TXT [ par DEL ]
j'aimerai savoir comment créer un fichier txt :/ ca peut paraitre simple mais j'ai pas trouvé mon bonheur sur php.net :/mon script ressemble a ca :if
effacement d'un fichier a la fermeture d'une page [ par wismergor ]
bonjours a tousj'aimerai si c'est possible supprimer un fichier sur un FTP lorsque l'on ferme la fenetre.pour supprimer en php je n'ai pas de probleme
Supprimer des lignes en debut de fichier [ par obelix3200 ]
Je voudrait supprimer les 20 premieres ligne d'un fichier HTML, je n'ai absolument aucune idee la...un ptit coup de pouce ?merci d'avance .
créer un fichier [ par cas ]
Voila ce que j'ai fait pour créer un nouveau fichier dans le réertoire chez l'hébergeur.<?phpif (!$fp = fopen("toto.txt","w+")) {print "Cannot open
supprimer un fichier [ par SatanCorporation ]
salut a tous comment on fait pour supprimer un fichier merci d'avance
Modifier un fichier OU SUGGESTIONS [ par DeepXtaZy ]
Bonjour,Je suis en stage et je voudrais faire une page pour que mon patron puisse diffuser facilement et meme tres facilement des notes de service.Je
Modifier un fichier OU SUGGESTIONS [ par DeepXtaZy ]
Bonjour,Je suis en stage et je voudrais faire une page pour que mon patron puisse diffuser facilement et meme tres facilement des notes de service.Je
Modifier une ligne d'un fichier [ par twiems ]
Twiems:PEn effet je souhaite modifier la dernière d'un fichier html (pareil que fichier txt) mais malheuresement je n'y arrive pas.Ainsi je voudrais q
Supprimer un fichier [ par 4feeling ]
Je recherche un petit script ou une fonction pour supprimer un fichier sur le serveur (une image ou un tout autre fichier).Voila!
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|