JeuWeb - Crée ton jeu par navigateur
Intttttttttttttteger - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Intttttttttttttteger (/showthread.php?tid=5538)



Intttttttttttttteger - Wells - 08-07-2011

Bonjour à tous, question simple (et désespéré , si si)

La taille max d'un int est de 12363031551

Y a t'il moyen de stocker plus que ça dans une variable.

Pour quelle raison je veux ça:

j'essaye de déterminer la taille d'un fichier de 22Go, taille retourner en octet.

Je suis assez désespéré ^^


RE: Intttttttttttttteger - Myrina - 08-07-2011

Dans http://www.php.net/manual/en/intro.bc.php , il est marqué:
Citation :For arbitrary precision mathematics PHP offers the Binary Calculator which supports numbers of any size and precision, represented as strings.
Je pense que cette extension répondra à ton besoin


RE: Intttttttttttttteger - Wells - 08-07-2011

hum vue que je lance apache avec wamp, ou que je la rajoute l'option :

These functions are only available if PHP was configured with --enable-bcmath .


RE: Intttttttttttttteger - Argorate - 08-07-2011

le probleme vient de la fonction filesize d'apres la doc : http://php.net/manual/fr/function.filesize.php
Citation :Note: Comme le type entier de PHP est signé et que de nombreuses plates-formes utilisent des entiers de 32 bits, filesize() peut retourner des résultats étranges pour les fichiers de taille supérieure à 2 Go. Pour les fichiers entre 2 et 4 Go, cela peut être contourné avec sprintf("%u", filesize($file)).
22GO c'est trop gros manfestement^^


RE: Intttttttttttttteger - Wells - 08-07-2011

Code :
<?php
        
function convert_SIZE($size)
    {
    $unite = array('B','kB','MB','GB');
    return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unite[$i];
    }

$file='T:\XP_VIDE/Windows XP Professional-cl1.vmdk';
echo '<br>'.filesize($file);
echo '<br>'.convert_SIZE(sprintf("%u", filesize($file)));
echo '<br>'.convert_SIZE((float)sprintf("%u", filesize($file)));

echo '<br>';
// ouvre un fichier
$fp = fopen($file, "r");

// lit des informations
$fstat = fstat($fp);

// ferme le fichier
fclose($fp);

// affiche le résultat
print_r(array_slice($fstat, 13));

?>

Tout ça me renvoi au mieux 2.2Go au lieu de 22....


RE: Intttttttttttttteger - Antyoz - 08-07-2011

Lol les matheux sont de sortie...!!


RE: Intttttttttttttteger - Bertrand - 09-07-2011

Citation :La taille max d'un int est de 12363031551
Je sais pas d'où ça vient mais c'est louche. En 32 bits la taille max est de ~4 milliards pour des entiers non-signés, et de ~2 milliards s'ils sont signés.
Pour en revenir à ton problème: utiliser une plateforme, un OS et une distribution php 64 bits. Ça ma parait la seule solution viable (c'est la seule qui me vient à l'esprit en tous cas).
Note que c'est une déduction de ma part, la doc indique que la taille des entiers est dépendante de la plate-forme, j'en déduis que si toute ta plateforme est en 64 bits ton pb est réglé, mais je n'ai pas essayé.

J'ai éventuellement une autre piste (j'imagine qu'elle est bien pénible à mettre en œuvre): faire ton extension pour appeler les APIs système dédiées aux fichiers longs : fopen64, fstat64 ... Je ne sais pas si ces fonctions existent sous windows mais il y a nécessairement des équivalents, et ça implique de retourner le résultat sous forme de chaîne, puisque sous forme d'entier il sera trop long pour php. C'est clairement pas génial, je suppose que tu ne récupères pas la taille du fichier pour la beauté du geste et il faudra bien manipuler cette valeur après.


RE: Intttttttttttttteger - piratequentin - 11-07-2011

Au pire tu convertit en ko c'est plus simple à lire que les octet, si tu veut regarde un tableau approximatif de conversion:

1 ko = 1024 octets

1 mo = 1024 ko

1 go = 1024 mo

Donc pour avoir ta valeur en ko tu divise par 1024. Mais bon si c'est pas ça que tu cherche c'est pas grave ^^


RE: Intttttttttttttteger - niahoo - 11-07-2011

ça ce sont des kio


RE: Intttttttttttttteger - piratequentin - 11-07-2011

oui mais bon c'est toujours plus simple à lire et ça prend moins de place.