Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UPLOAD / AJOUT / SUPPRESSION DE FICHIER SUR VOTRE SITE


Information sur la source

Catégorie :Fichier / Disque Classé sous : fichier, créer, supprimer, modifier, path Niveau : Initié Date de création : 22/12/2006 Date de mise à jour : 23/12/2006 16:20:41 Vu : 10 827

Note :
6,5 / 10 - par 2 personnes
6,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

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

Commentaires et avis

signaler à un administrateur
Commentaire de vilhjalms le 23/12/2006 04:01:52

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á

signaler à un administrateur
Commentaire de Tartuffe le 23/12/2006 09:54:44

...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.

signaler à un administrateur
Commentaire de amezghal le 23/12/2006 13:05:08

-salut:

1) ligne 53: balise <p> 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

signaler à un administrateur
Commentaire de vilhjalms le 23/12/2006 13:13:47

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)

signaler à un administrateur
Commentaire de FhX le 23/12/2006 13:31:02

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.

signaler à un administrateur
Commentaire de Tartuffe le 23/12/2006 13:53:24

- 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

signaler à un administrateur
Commentaire de Tartuffe le 23/12/2006 15:49:27

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 !

signaler à un administrateur
Commentaire de Naixn le 23/12/2006 16:26:28

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 ?

signaler à un administrateur
Commentaire de Tartuffe le 23/12/2006 17:00:59

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 !

signaler à un administrateur
Commentaire de xavier230573 le 23/12/2006 20:10:57

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

signaler à un administrateur
Commentaire de vilhjalms le 23/12/2006 20:39:21

Y'en a qui ont peur de rien

signaler à un administrateur
Commentaire de malik7934 le 24/12/2006 10:01:27

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 :-)

signaler à un administrateur
Commentaire de FhX le 24/12/2006 16:40:31

"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 :)

signaler à un administrateur
Commentaire de kankrelune le 24/12/2006 19:59:07

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°

signaler à un administrateur
Commentaire de kankrelune le 24/12/2006 20:04:54

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°

signaler à un administrateur
Commentaire de hdh le 26/12/2006 12:58:02

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

Ajouter un commentaire

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.&lt;?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!


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,39 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.