Bloquer une page si le poids est trop élevé

Eléphant du PHP | 351 Messages

09 juin 2006, 13:49

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

Eléphant du PHP | 351 Messages

09 juin 2006, 23:46

Personne ne sait?

Eléphant du PHP | 493 Messages

10 juin 2006, 16:00

Tu dois tester le poids de la page voulu. Afin de le récupérer, utilise filesize().

Eléphant du PHP | 351 Messages

10 juin 2006, 16:09

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?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 juin 2006, 22:00

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é) ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 351 Messages

10 juin 2006, 23:30

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 juin 2006, 23:48

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 351 Messages

11 juin 2006, 00:06

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 juin 2006, 00:17

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 351 Messages

11 juin 2006, 00:21

Merci beaucoup .

Eléphant du PHP | 351 Messages

11 juin 2006, 00:39

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 juin 2006, 00:56

Il s'agit d'un simple test sur le contenu de $size:
if ($size > 70 )
{
     //ici code erreur
}
else
{
    // ici code tout va bien :)
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 351 Messages

11 juin 2006, 23:41

Oui, j'y ai pensé mais si le poids est de 70 Ko, sa marque l'erreur, non?
Alors que voudrais 70 Mo.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 juin 2006, 00:45

c'est vrai aussi #-o

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 140 Messages

12 juin 2006, 09:01

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