Version haut débit de: Forum du site Lebrikabrak
Aide - Rechercher - Membres

Comment limiter la taille des fichiers en upload ?

ZebulonT (23 Janvier 2008, 12:20)
Salut jchouix,

J'aimerai pouvoir limiter la taille des fichiers en upload pour les rédacteurs avec l'ajout d'un code du genre :

Dans le formulaire html qui permet l'upload :
<form method="POST" action="upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à  100Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
Fichier : <input type="file" name="fichier">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

Et dans le script qui fait l'upload (upload.php) :
<?php
// taille maximum (en octets)
$taille_maxi = 100000;
//Taille du fichier
$taille = filesize($_FILES['fichier']['tmp_name']);
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
?>

Mais, ne sachant pas bien comment GuppY (et ses plugins) sont programmés, je ne vois pas très bien o๠il faudrait ajouter ce code...

Merci d'avance pour tes remarques et suggestions éclairée. :wink:
jchouix (23 Janvier 2008, 12:55)
bonjour,
les modifs sont à faire dans les deux fichiers suivants :
1)dans le fichier upload.php situé dans le répertoire plugins/adm_redacteurs/editors/upload/
2)dans le fichier upload.inc situé dans le répertoire plugins/adm_redacteurs/inc/
A+
ZebulonT (23 Janvier 2008, 17:52)
OK, merci beaucoup pour l'info, je vais essayer de coder cela...
Je te tiens au courant de mes essais... :wink:
A+
mirmoleboss (25 Janvier 2008, 12:28)
Bonjour
alors as tu reussit?
Amicalement
ZebulonT (25 Janvier 2008, 14:34)
Bonjour,
Non mais j'avoue que je n'ai pas encore pris le temps d'essayer... lol
A+
mirmoleboss (25 Janvier 2008, 16:48)
ok mais je peux regarder si tu veux?
moi cela minteresse aussi
ZebulonT (25 Janvier 2008, 17:34)
ok mais je peux regarder si tu veux?
moi cela minteresse aussi

Pas de problème, si tu réussis à coder quelque chose qui semble bien fonctionner, il te suffit ensuite de préciser ici les lignes de code que tu as ajoutées dans tel et tel fichiers et je n'hésiterai pas à faire des tests avec ton code...

Pour ma part, je pense très sérieusement inclure cette possibilité sur mon site mais j'ai pas mal de casseroles sur le feu en cette période et je n'ai donc pas tout le temps que je souhaiterai pour me lancer dans ce codage à très court terme...
Donc si tu t'en sens capable, n'hésites surtout pas à essayer ! :wink:

A+
jchouix (27 Janvier 2008, 21:58)
bonsoir,
je vais vous aider un peu :
Dans le fichier upload.php situé dans le répertoire plugins/adm_redacteurs/editors/upload/, le formulaire qui gère l'upload se situe entre les lignes 623 et 631.
Pour les tests sur le fichier uploadé, cela se passe entre les lignes 225 et 236.
Si le test est faux alors vous affectez la valeur 1 à la variable $pagerror et le message d'erreur affiché sera contenu dans la variable $erreur.

Par exemple, j'ai testé si le nom du fichier existait déjà pour éviter l'écrasement des fichiers.
J'ai écrit ceci :
if (file_exists(CHEMIN.$rep.'/'.$_FILES['ficup']['name'])){
    $pagerror = 1; 
    $erreur = $lang_upload[6];
}

avec $lang_upload[6] = "Echec de l'upload car un fichier portant le màªme nom existe déjà .<br /><br />Veuillez recommencer en changeant le nom du fichier à uploader";

Allez, je ne vous en dis pas plus. A vos claviers et bon codage.
A+
ZebulonT (27 Janvier 2008, 23:43)
Salut jchouix,
Merci pour le jeu de piste... :fsb2_smyle:
A+
mirmoleboss (28 Janvier 2008, 0:15)
merci à toi
je regarde ca dans la semaine , j'ai moi aussi pas mal de boulot.
je developpe mes plugins aussi (enfin des forks on va dire) donc je sais plus ou donner de la tàªte masi je vais le faire.
puis j'aimerais faire en sorte que chaque redacteurs n'est pas le droit de stocker plus de 15mo
a+
jchouix (28 Janvier 2008, 0:27)
re-,
j'espère que vous mettrez tous les deux vos solutions ici-màªme pour aider ceux qui voudraient faire la màªme chose.
Cordialement.
A+
mirmoleboss (28 Janvier 2008, 9:33)
Bonjour,
Cela va de soi
ZebulonT (04 Février 2008, 22:44)
Bonjour jchouix, :wink:

J'ai en fin pris le temps d'essayer de coder les modifs pour limiter la tailles des fichiers en upload...

Voici le code auquel je suis arrivé :

D'abord dans le fichier /plugins/adm_redacteurs/editors/upload/upload.php

=> Ajout après la ligne 79
//INITIALISATION DES VARIABLES DE CONFIGURATION POUR UPLOAD (A NE SURTOUT PAS MODIFIER !!)
$pathRepUpload = 'plugins/adm_redacteurs/editors/';
$allowedUpload = false;
$allowedCreateRep = false;
$allowedRenameRepFile = false;
$allowedDeleteRepFile = false;
$allowedExtFileUpload = array();
$deniedExtFileUpload = array();
//Ajout de ZebulonT
$maxFileSizeUpload = '300000';  //Taille maximale des fichiers en upload (en octets)
//Fin ajout de ZebulonT

=> Ajout après la ligne 239
if((count($allowedExtFileUpload) > 0 && !in_array(strrchr($_FILES['ficup']['name'],'.'),$allowedExtFileUpload)) || (count($deniedExtFileUpload) > 0 && in_array(strrchr($_FILES['ficup']['name'],'.'),$deniedExtFileUpload))) { //AUTORISATION EXTENSION DU FICHIER
$pagerror = 1; 
$erreur = $lang_upload[21];	
}
//Ajout de ZebulonT
//Controle de la taille des fichiers
if (filesize($_FILES['ficup']['tmp_name']) > $maxFileSizeUpload)
{
$pagerror = 1; 
//$erreur = $lang_upload[39];	
$erreur = 'Echec car la taille du fichier est supérieure à  la taille permise !...';
}
//Fin ajout de ZebulonT

=> Ajout après la ligne 640
//UPLOAD DES FICHIERS
if($allowedUpload == true) {  //AUTORISATION	
if ((isset($redacprefs['rwritfile']) && $redacprefs['rwritfile'] == "On" && $redacprefs['rwritcatfile'] == "On") || (isset($redacprefs['rwritfile']) && $redacprefs['rwritfile'] == "On" && $redacprefs['rwritcatfile'] != "On" && ereg('^('.implode($accessRepUpload,'|').')/'.$redacprefs['rnamecatfile'],$rep))) {   //AUTORISATION REDACTEUR
echo '<form name="uploadit" enctype="multipart/form-data" action="upload.php?lng='.$lng.'" method="post" onsubmit="return UploadValid(this,\'ficup\');" >';
echo '<input type="hidden" name="rep" value="'.$rep.'" />';
echo '<input type="hidden" name="upvalid" value="ok" />';
echo '<input type="hidden" name="uptype" value="'.$uptype.'" />';
echo '<input type="hidden" name="pathconfig" value="'.$pathRepUploadConfig.'" />';
echo '<input type="hidden" name="namerepconfig" value="'.$nameRepUploadConfig.'" />';
//Ajout de ZebulonT
//Si on limite la taille des fichiers en upload ici... Alors il n'y a pas de message d'erreur !...
//echo '<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxFileSizeUpload.'">';
echo '<div class="labelupload">Attention : la taille des fichiers en upload est limitée à  '.$maxFileSizeUpload / 1000 .' Ko !</div>'; //On affiche un avertissement à  propos de la taille maximale autorisée pour les fichiers en upload...
//Fin ajout de ZebulonT


Ensuite dans le fichier /plugins/adm_redacteurs/inc/upload.inc
=> Ce sont les màªmes modifs mais les numéros des lignes sont différents...
=> Cela permet de contrà´ler l'upload pour les fichiers via l'admin générale des fichiers du rédacteur... Si il a l'accès à cet item...

Je donne donc juste les numéros des lignes dans l'ordre des modifs ci-dessus :

Tu remarqueras que j'ai essayé d'ajouter la variable "$lang_upload[39]" dans le fichier de langue /plugins/adm_redacteurs/editors/upload/lang/fr_upload.inc mais elle n'est pas prise en compte... J'ai lu quelque part qu'il fallait modifier un fichier pour pouvoir augmenter le nombre de variables mais je ne sais plus o๠je l'ai lu donc je ne sais plus quel fichier il faut modifier...

Voilà ... Cela fonctionne mais peut très certainement àªtre amélioré ! :fsb2_smyle:

A+
jchouix (05 Février 2008, 9:23)
bonjour ZebulonT,
je trouve que c'est du très bon boulot.
Pour le rajout dans le fichier de langue, cela m'étonne un peu que cela ne marche pas.
Je vais regarder ce qui cloche de ce coté là .
Merci encore pour ta collaboration.
A+
ZebulonT (05 Février 2008, 12:16)
Bonjour jchouix,

Citation (jchouix)
bonjour ZebulonT,
je trouve que c'est du très bon boulot.
Cela fait tjs plaisir à entendre :fsb2_smyle: D'autant que si je ne peux nier avoir quelques connaissances en programmation, je ne suis absolument pas un spécialiste du PHP...

Citation (jchouix)
Pour le rajout dans le fichier de langue, cela m'étonne un peu que cela ne marche pas.
Je vais regarder ce qui cloche de ce coté là .
Pour ton info, je n'ai ajouté la variable "$lang_upload[39]" que dans le fichier "fr_" et pas dans les autres... Mais mon site est mono langue [fr] ! Et je ne pense pas que cela a une influence...
Je me souviens juste d'avoir lu que le nombre de variables était limité et que si on voulais en rajouter, il fallait modifier la variable qui contrà´le ce nombre total... (?)

A+ :wink:
mirmoleboss (23 Février 2008, 23:07)
Bonsoir
J'aurais aimé savoir si tu as réussit a identifier le problème?
Je voudrais aussi ajouté une requàªte à ceci. Je dois limiter la taille des répertoires rédacteurs à 12mo. J'ai réfelchit à l'architecture:
-Test la taille du répertoire
-Affiche la taille occupé
-Cache la fonction upload si jamais la taille est dépassé.

Voilà j'avais essayé pas mal de code différent mais toujours plein d'erreurs.
Merci d'avance
ZebulonT (24 Février 2008, 0:55)
Bonsoir mirmoleboss, :wink:

Citation (mirmoleboss)
J'aurais aimé savoir si tu as réussit a identifier le problème?

Globalement, mon code fonctionne très bien... C'est juste que je n'ai pas réussi à inclure le message d'erreur dans le fichier "fr_upload.inc" car la variable $lang_upload[39] = 'message d'erreur' n'est pas prise en compte... (le message ne s'affiche pas)
Et je ne comprend pas pourquoi ??? Si j'utilise par exemple la variable $lang_upload[21] déjà présente dans le fichier "fr_upload.inc", alors cela fonctionne et c'est le message [21] qui s'affiche... ??? :fsb2_mad:

Pour ton problème de limitation globale de l'espace utilisé par les répertoires des rédacteurs, je peux essayer de réfléchir à la question mais je ne te promet rien à très court terme car j'ai peu de temps à consacrer à du développement pour le moment...

A+
mirmoleboss (24 Février 2008, 18:55)
Bonjour,
Merci de ta réponse pour le problème c'est pas grave je vais faire avec ce n'est pas tres grave...
Sinon quand je parlais de prog je pensais plus à jchouix.... mais je prend ton aide aussi car je seche un peu. (en plus je dois présenté le site dans une semaine)
Merci à tous
jchouix (25 Février 2008, 19:54)
bonsoir mirmoleboss,
il te faut utiliser une fonction comme celle_ci :
function dir_size($dir)
{
    $size = 0;
    $handle = opendir($dir);
   
    while (FALSE !== ($file = readdir($handle))) {
        if (is_file($dir.'/'.$file) && $file != 'index.php') {
            $size += filesize($dir.'/'.$file);
        } elseif (is_dir($dir.'/'.$file) && $file != '..' && $file != '.') {
            $size += dir_size($dir.'/'.$file);
        }
    }
    return $size;
}

ou $dir représente le chemin du répertoire concerné.

Le problème, c'est le temps d'execution de cette fonction qui peut dépasser la limite de 30 secondes s'il y a beaucoup de fichier à traiter dans le répertoire.
A+
mirmoleboss (26 Février 2008, 1:19)
Bonsoir,
J'avais essayé un code très similaire mais un peu compliqué car j'avais une genre de boucle pour combler se problème de temps. (qui n'est pas un problème en soi car j'ai peu de fichier à traiter par répertoire)
Mais l'erreur n'est pas là (enfin je pense) c'est o๠placer ce code?
J'ai effectivement essayer divers fichiers mais rien ou de grosses erreurs (un lol pas drà´le :fsb2_dead: )
Merci d'avance
jchouix (27 Février 2008, 19:38)
bonsoir,
Citation (mirmoleboss)
Mais l'erreur n'est pas là (enfin je pense) c'est o๠placer ce code ?

Le mieux est de placer cette fonction dans le fichier functions_upload.inc situé dans le répertoire plugins/adm_redacteurs/editors/upload/
Ensuite, tu l'utilises dans le fichier upload.php situé dans le màªme répertoire pour contrà´ler le poids total du répertoire affecté au rédacteur.
Si ce poids total est supérieur à 20 Mo alors tu affectes la valeur false à la variable $allowedUpload.
Bon courage et fais nous signe quand tu as quelque chose qui fonctionne.
A+
mirmoleboss (01 Mars 2008, 18:17)
ZebulonT,
peux tu me faire par de ton fichier /plugins/adm_redacteurs/inc/upload.inc s'il te plait ?

merci jchouix je réfléchit encore à comment intégrer le code mais je pense bientà´t avoir un truc qui passe.
ZebulonT (01 Mars 2008, 20:11)
Bonsoir mirmoleboss,

ZebulonT peux tu me faire par de ton fichier /plugins/adm_redacteurs/inc/upload.inc sileplait

Le plus simple c'est que tu fasses un copier/coller avec les modifications/ajouts que j'ai détaillées ICI... Car ce sont exactement les màªmes que dans le fichier /plugins/adm_redacteurs/plugins/diaporama/inc/upload.inc ci ce n'est que les ajouts se font après les lignes 41, 199 & 569...

A+
mirmoleboss (11 Mars 2008, 14:14)
Bonjour,
Merci je poste dans l'aprem ce que j'ai fais mais ya quelques problèmes...
mirmoleboss (11 Mars 2008, 17:23)
Bonjour,
Comme dit voilà mes modifications:
Je récapitule en taille maximale de l'envoie du fichier je veux 11mo.

J'ai essayé plein de code voilà ou j'en suis. Les fichiers supérieurs à environ 1mo ne passent pas..erreur de conversion peut-àªtre.
Citation
/plugins/adm_redacteurs/editors/upload/upload.php

//INITIALISATION DES VARIABLES DE CONFIGURATION POUR UPLOAD (A NE SURTOUT PAS MODIFIER !!)
$pathRepUpload = 'plugins/adm_redacteurs/editors/';
$allowedUpload = false;
$allowedCreateRep = false;
$allowedRenameRepFile = false;
$allowedDeleteRepFile = false;
$allowedExtFileUpload = array();
$deniedExtFileUpload = array();
//Ajout de ZebulonT
$maxFileSizeUpload = '125829120'; //Taille maximale des fichiers en upload (en octets)
//Fin ajout de ZebulonT
$accessRepUpload = array('img','photo','file','pages','flash');
$accessRepUploadImage = array('img','photo');
$accessRepUploadLink = array('file','img','photo','pages','flash');

Dans le màªme fichier.
Citation


//UPLOAD DES FICHIERS
if($allowedUpload == true) { //AUTORISATION
if ((isset($redacprefs['rwritfile']) && $redacprefs['rwritfile'] == "On" && $redacprefs['rwritcatfile'] == "On") || (isset($redacprefs['rwritfile']) && $redacprefs['rwritfile'] == "On" && $redacprefs['rwritcatfile'] != "On" && ereg('^('.implode($accessRepUpload,'|').')/'.$redacprefs['rnamecatfile'],$rep))) { //AUTORISATION REDACTEUR
echo '<form name="uploadit" enctype="multipart/form-data" action="upload.php?lng='.$lng.'" method="post" onsubmit="return UploadValid(this,\'ficup\');" >';
echo '<input type="hidden" name="rep" value="'.$rep.'" />';
echo '<input type="hidden" name="upvalid" value="ok" />';
echo '<input type="hidden" name="uptype" value="'.$uptype.'" />';
echo '<input type="hidden" name="pathconfig" value="'.$pathRepUploadConfig.'" />';
echo '<input type="hidden" name="namerepconfig" value="'.$nameRepUploadConfig.'" />'; //Ajout de ZebulonT
//Si on limite la taille des fichiers en upload ici... Alors il n'y a pas de message d'erreur !...
echo '<div class="labelupload">Attention : la taille des fichiers en upload est limité à '.$maxFileSizeUpload / 11264 .' Ko !</div>'; //On affiche un avertissement propos de la taille maximale autoris? pour les fichiers en upload...
//echo '<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxFileSizeUpload.'">';
//Fin ajout de ZebulonT

echo '<div class="labelupload"><img src="'.CHEMIN.$pathRepUpload.'upload/img/upload.gif" width="16" height="16" border="0" alt="'.$lang_upload[13].'" title="'.$lang_upload[13].'" />'.$lang_upload[13].'</div>';
echo '<div class="upload"><input type="file" name="ficup" size="27" /><input class="bouton" type="submit" value="'.$lang_upload[18].'" /></div>';
echo '</form>';
}
}

Au meme fichier encore
Citation
if((count($allowedExtFileUpload) > 0 && !in_array(strrchr($_FILES['ficup']['name'],'.'),$allowedExtFileUpload)) || (count($deniedExtFileUpload) > 0 && in_array(strrchr($_FILES['ficup']['name'],'.'),$deniedExtFileUpload))) { //AUTORISATION EXTENSION DU FICHIER
$pagerror = 1;
$erreur = $lang_upload[21];
}
//Ajout de ZebulonT
//Controle de la taille des fichiers
if (filesize($_FILES['ficup']['tmp_name']) > $maxFileSizeUpload)
{
$pagerror = 1;
//$erreur = $lang_upload[39];
$erreur = 'Echec car la taille du fichier est supérieure à la taille permise !Cette taille maximale est de 11Mo ...';
}
//Fin ajout de ZebulonT


Dans le fichier plugins/adm_redacteurs/inc/upload.inc
Citation
//INITIALISATION DES VARIABLES DE CONFIGURATION POUR UPLOAD (A NE SURTOUT PAS MODIFIER !!)
$pathRepUpload = 'plugins/adm_redacteurs/editors/';
$allowedUpload = false;
$allowedCreateRep = false;
$allowedRenameRepFile = false;
$allowedDeleteRepFile = false;
//Ajout de ZebulonT
$maxFileSizeUpload = '125829120'; //Taille maximale des fichiers en upload (en octets)
//Fin ajout de ZebulonT
$allowedExtFileUpload = array();
$deniedExtFileUpload = array();
$accessRepUpload = array('img','photo','file','pages','flash');
$accessRepUploadImage = array('img','photo');

Citation

if((count($allowedExtFileUpload) > 0 && !in_array(strrchr($_FILES['ficup']['name'],'.'),$allowedExtFileUpload)) || (count($deniedExtFileUpload) > 0 && in_array(strrchr($_FILES['ficup']['name'],'.'),$deniedExtFileUpload))) { //AUTORISATION EXTENSION DU FICHIER
$pagerror = 1;
$erreur = $lang_upload[21];
}
//Ajout de ZebulonT
//Controle de la taille des fichiers
if (filesize($_FILES['ficup']['tmp_name']) > $maxFileSizeUpload)
{
$pagerror = 1;
//$erreur = $lang_upload[39];
$erreur = 'Echec car la taille du fichier est sup?ieure la taille permise !Cette taille maximale est de 11Mo ...';
}
//Fin ajout de ZebulonT

if($pagerror != 1) { //UPLOAD ET INDEXATION

Citation
//UPLOAD DES FICHIERS
if($allowedUpload == true) { //AUTORISATION
if ((isset($redacprefs['rwritfile']) && $redacprefs['rwritfile'] == "On" && $redacprefs['rwritcatfile'] == "On") || (isset($redacprefs['rwritfile']) && $redacprefs['rwritfile'] == "On" && $redacprefs['rwritcatfile'] != "On" && ereg('^('.implode($accessRepUpload,'|').')/'.$redacprefs['rnamecatfile'],$rep))) { //AUTORISATION REDACTEUR
echo '<form name="uploadit" enctype="multipart/form-data" action="admin.php?lng='.$lng.'" method="post" onsubmit="return UploadValid(this,\'ficup\');" >';
echo '<input type="hidden" name="pg" value="upload" />';
echo '<input type="hidden" name="rep" value="'.$rep.'" />';
echo '<input type="hidden" name="upvalid" value="ok" />';
echo '<input type="hidden" name="uptype" value="'.$uptype.'" />';
//echo '<input type="hidden" name="pathconfig" value="'.$pathRepUploadConfig.'" />';
//echo '<input type="hidden" name="namerepconfig" value="'.$nameRepUploadConfig.'" />';
//ajout de
//Si on limite la taille des fichiers en upload ici... Alors il n'y a pas de message d'erreur !...
echo '<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxFileSizeUpload.'">';
echo '<div class="labelupload">Attention : la taille des fichiers en upload est limité à '.$maxFileSizeUpload / 12288 .' Ko !</div>'; //On affiche un avertissement propos de la taille maximale autoris? pour les fichiers en upload...
//Fin ajout


Merci d'avance
jchouix (11 Mars 2008, 20:04)
bonsoir mirmoleboss,
quelle est la taille maximale que ton hébergeur autorise pour les fichiers uploadés ?
A mon avis, ton problème vient de là .
Sinon, 1 Mo = 1 048 576 octets donc 11 Mo = 11 534 336 octets
or tu as écrit 125 829 120 octets soit 120 Mo !!
A+
PS : 1 ko = 1024 octet et 1 Mo = 1024 ko
mirmoleboss (11 Mars 2008, 21:09)
Merci bah je suis sur Free
Il y a une ligne avec écrit à§a... upload_max_filesize 2M 2M
c'est celui la?
Si c'est à§a, à§a correspondrai a mes testes.
Oui je te dit j'ai essayé en rajoutant plein de 0 ect lol.
Si c'est à cause de Free je devrai attendre avant que ce soit sur le serveur de l'académie.
Merci
jchouix (11 Mars 2008, 21:19)
re-,
Citation (mirmoleboss)
Il y a une ligne avec écrit à§a... upload_max_filesize 2M
c'est celui la?

Exact donc tu es limité à 2 Mo pour les fichiers.
A+
mirmoleboss (12 Mars 2008, 0:15)
Ok merci
Pourtant j'ai essaye avec des fichiers de 1,6mo à§a passé pas... bizare
ZebulonT (19 Mars 2008, 10:32)
Bonjour jchouix,

As-tu éventuellement une idée à propos du problème de la variable "$lang_upload[39]" que nous avions évoquée ICI un peut plus haut dans le sujet ?...

A+ :wink: