Page 1 sur 3

Bloquer une page si le poids est trop élevé

Posté : 09 juin 2006, 13:49
par kevinf
Salut,

je voudrais savoir comment faire pour bloquer une page si un fichier est arriver à un certain poids.

Par exemple, j'ai la page 'upload.php' dans le fichier 'upload'. Je voudrais mettre un code en php sur 'upload.php' qui vérifie le poids total du fichier 'upload' et si il est supérieur à 70 Mo, la page 'upload.php' n'est pas afficher mais seulement un message :
"Le fichier est complet"
Alors que si le poids du fichier 'upload' est inférieur à 70 Mo, alors rien ne se passe.

Pouvez-vous m'aider?

Merci

Posté : 09 juin 2006, 23:46
par kevinf
Personne ne sait?

Posté : 10 juin 2006, 16:00
par Vaedan
Tu dois tester le poids de la page voulu. Afin de le récupérer, utilise filesize().

Posté : 10 juin 2006, 16:09
par kevinf
En fait je débute dans le php, et c'est le poids du fichier /upload/ que je voudrais savoir et afficher sur la page upload.php un message comme quoi le fichier est plein si il est supérieur à 70mo.

Ce serait possible de me faire un code, please?

Posté : 10 juin 2006, 22:00
par Truc
En fait je débute dans le php
C'est une bonne chose ça... on débute tous :)
Ce serait possible de me faire un code, please?
C'est une moins bonne chose ça... ici tu peux apprendre mais peu de chances d'avoir un code à copier coller :wink:

Il y a quoi dans cette page upload.php dont tu veux avoir le poids ?
Ce fichier est-il modifié au fure et à mesure ?

Est-ce que tu veux le poids du fichier qui sera chargé (uploadé) ?

Posté : 10 juin 2006, 23:30
par kevinf
Alors, je ne veux pas le poids de la page upload.php mais le poids d'un répertoire de mon serveur qui s'appelle upload/
Si le poids de ce repertoire dépasse 70 Mo, alors un message s'affiche sur la page upload.php pour dire que le poids du répertoire upload/ est plein. Si il est inférieur à 70 Mo, rien ne se passe.
Et oui, le poids du repertoire upload/ change en permance.

Posté : 10 juin 2006, 23:48
par Truc
C'est tout de suite plus clair en mentionnant "répertoire" :wink:
On comprend mieux le sens de la question et donc on y réponds mieux... regarde ceci

Posté : 11 juin 2006, 00:06
par kevinf
Merci de ta réponse, je voudrais juste savoir si vous aviez un tableau de conversion pour savoir ce ke vaut 1 KB en Mo et 1 MB en Mo et 1 Ko en Mo.

Merci

Posté : 11 juin 2006, 00:17
par Truc
Byte = octet => KB = Ko
1 Ko = 1 024 octets
1 Mo = 1 024 Ko = 1 024 * 1024 octets
1 Go = 1 024 Mo = 1 024 * 1024 * 1024 octets

Posté : 11 juin 2006, 00:21
par kevinf
Merci beaucoup .

Posté : 11 juin 2006, 00:39
par kevinf
J'ai donc mis ce code en haut de ma pahe upload.php :
<?php 
/* 
Liscence : GPL 
Author : fab 
Mail : [email protected] 
*/ 

/** 
@function calc_size 
@param text dir rép dont on veut connaitre la taille 

@return numeric 

formate la taille retourné par la fonction calc_size_Rdir 
*/ 
function calc_size($dir) 
{ 
    $size = calc_size_Rdir($dir); 
    $filesizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"); 
    return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $filesizename[$i]; 
} 
/** 
@function calc_size_Rdir 
@param text dir_start dossier dont on va calculer la taille 

@return numeric 

calcul de la taille d'un dossier en ajouter celle de ses fichiers 
*/ 

function calc_size_Rdir($dir_start) 
{ 
    $size = 0; 
    $open = opendir($dir_start); 
    while($file = readdir($open)) 
    { 
        if($file != '.' && $file != '..') 
        { 
            if(is_dir($dir_start .'/'.$file)) 
            { 
                $new_dir = $dir_start .'/'.$file; 
                $size = $size + calc_size_Rdir($new_dir); 
            } 
            else 
            { 
                $size = $size + filesize($dir_start .'/'.$file); 
            } 
        } 
    } 
    return $size; 
} 
?> 
<?php 
$dir = getcwd(); 
$size = calc_size($dir); 
echo $size; 
?> 
Ce qui me donne bien le taille de mon répertoire upload, je voudrais maintenant, faire un bout de code en plus afin de vérifier si le $size est supérieur à 70 MO, et si oui, ne pas afficher la page, mais un message, comment faire?

Merci

Posté : 11 juin 2006, 00:56
par Truc
Il s'agit d'un simple test sur le contenu de $size:
if ($size > 70 )
{
     //ici code erreur
}
else
{
    // ici code tout va bien :)
}

Posté : 11 juin 2006, 23:41
par kevinf
Oui, j'y ai pensé mais si le poids est de 70 Ko, sa marque l'erreur, non?
Alors que voudrais 70 Mo.

Posté : 12 juin 2006, 00:45
par Truc
c'est vrai aussi #-o

ne convertis pas en Mo reste en octets et compare à 1024* 1024 * 70

Posté : 12 juin 2006, 09:01
par Vorkosigan
Byte = octet => KB = Ko
1 Ko = 1 024 octets
1 Mo = 1 024 Ko = 1 024 * 1024 octets
1 Go = 1 024 Mo = 1 024 * 1024 * 1024 octets
Sans vouloir faire le troll :D je me permets de corriger ce point.

D'apres une decision de l'IEEE de 1998, ces formules sont fausses meme si tolerees. D'apres l'IEEE :
1 Mb = 1000 Ko
1 Mib = 1024 Kib