2010-08-18 5 views
9

comment puis-je obtenir le "filesize" d'une chaîne en php?taille de fichier à partir d'une chaîne

Je mets la chaîne dans une base de données mysql sous forme de blob et j'ai besoin de stocker la taille du blob. Ma solution était de créer un fichier temporaire et de mettre la chaîne dans le fichier temporaire. maintenant je peux obtenir la taille de fichier de la "chaîne". mais cette solution n'est pas bon ...

salutations

Répondre

40

Cela dépend. Si vous avez mbstring function overloading activé, le seul appel qui fonctionnera sera mb_strlen($string, '8bit');. Si ce n'est pas activé, strlen($string) fonctionnera bien aussi.

Ainsi, vous pouvez gérer les deux cas comme celui-ci:

if (function_exists('mb_strlen')) { 
    $size = mb_strlen($string, '8bit'); 
} else { 
    $size = strlen($string); 
} 
+0

merci! Ça marche! – poldixd

+1

+1 Ceci est la bonne réponse –

+0

Vous voulez expliquer le downvote? Quel est le problème ou incomplet de cette réponse? – ircmaxell

0

Si tout ce que vous stockez est la chaîne, la taille doit être la longueur de votre temps de chaîne le nombre d'octets dans le jeu de caractères. Donc pour Unicode ce serait 2 * strlen ($ string).

+0

seulement afaik caractères spéciaux ont une taille double. Donc, la lettre «a» aura un octet, mais des lettres comme ó, ł, ż, ć, ś etc. auront une longueur de 2 octets –

+0

Oh, je ne le savais pas. À votre santé. –

+0

Yup, UTF-8 est un encodage de largeur variable, les caractères peuvent avoir entre 1 et 4 octets de long. http://en.wikipedia.org/wiki/UTF-8 –

-3

utilisez alors mb_strlen() alors vous pouvez dire quel type de codage la chaîne utilise (le cas échéant) pour obtenir la taille en octets.

+0

A la réflexion, désolé, mais c'est carrément incorrect. 'mb_strlen()' en conjonction avec un encodage multi-octets est conçu pour retourner la taille de la chaîne en * caractères *, pas en octets. -1 –

+0

Après un examen plus approfondi plutôt que de simplement lire des trucs (que je ferai une note mentale pour en faire plus à l'avenir), vous pouvez toujours utiliser mb_strlen() pour obtenir le résultat souhaité en omettant le second paramètre ou en réglant le second paramètre être 8bit. – gabe3886

+0

@gabe yup, c'est même le * seulement * à l'épreuve des balles selon la réponse de @ ircmaxell (je n'étais pas au courant de ça non plus). –

1
strlen() 

avant de le mettre dans MySQL, ou dans SQL:

LENGTH() 

Notez que longueur peut être différentes selon le jeu de caractères. Si vous voulez avoir une longueur réelle en octets utilisent strlen(), si vous voulez avoir l'utilisation du nombre de caractères mb_strlen() (si vous avez encodage UTF-8 par exemple)

+0

strlen() peut être défectueux, voir la réponse de ircmaxell –

6

longueur SELECT (champ) FROM table

de l'MySQL docs:

lONGUEUR (str)

Renvoie la longueur de la chaîne str, mesurée en octets. Un caractère multi-octets compte comme plusieurs octets. Cela signifie que pour une chaîne contenant cinq caractères à deux octets, LENGTH() retourne 10, tandis que CHAR_LENGTH() retourne 5.

+0

+1 c'est la bonne réponse à la fin de mySQL –

Questions connexes