2010-08-18 9 views
9

Wie bekomme ich die "Dateigröße" von einer Zeichenfolge in PHP?Dateigröße von einem String

Ich legte die Zeichenfolge in eine MySQL-Datenbank als Blob und ich muss die Größe des Blobs speichern. Meine Lösung bestand darin, eine temporäre Datei zu erstellen und die Zeichenfolge in die temporäre Datei einzufügen. jetzt kann ich die Dateigröße von der "Schnur" erhalten. aber diese Lösung ist nicht gut ...

Grüße

Antwort

40

Es hängt. Wenn Sie mbstring function overloading aktiviert haben, ist der einzige Anruf, der funktioniert, mb_strlen($string, '8bit');. Wenn es nicht aktiviert ist, funktioniert strlen($string) auch gut.

So können Sie beide Fälle so handhaben:

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

danke! Es klappt! – poldixd

+1

+1 das ist die richtige antwort –

+0

Möchten Sie den Downvote erklären? Was ist falsch oder unvollständig bei dieser Antwort? – ircmaxell

0

Wenn alle Sie speichern die Zeichenfolge ist, dann ist die Größe sollte die Länge der Zeichenfolge mal die Anzahl von Bytes in der charset sein. Also für Unicode wäre das 2 * strlen ($ string).

+0

AFAIK nur Sonderzeichen doppelte Größe haben. Also wird der Buchstabe 'a' ein Byte haben, aber Buchstaben wie ',', ',', ',', usw. sind 2 Bytes lang. –

+0

Oh, das wusste ich nicht. Prost. –

+0

Yup, UTF-8 ist eine Codierung mit variabler Breite, Zeichen können zwischen 1 und 4 Byte lang sein. http://en.wikipedia.org/wiki/UTF-8 –

-3

Verwenden Sie mb_strlen() als dann können Sie sagen, welche Art der Codierung die Zeichenfolge verwendet (falls vorhanden), um die Größe in Bytes zu erhalten.

+0

Auf den zweiten Gedanken, tut mir leid, aber das ist völlig falsch. 'mb_strlen()' in Verbindung mit einer Multi-Byte-Kodierung soll die Größe der Zeichenfolge in * Zeichen *, nicht Bytes, zurückgeben. -1 –

+0

Nach weiterem Nachforschen, anstatt einfach nur Sachen zu lesen (was ich mir in Zukunft merken werde), können Sie immer noch mb_strlen() verwenden, um entweder durch Weglassen des zweiten Parameters oder durch Setzen des zweiten Parameters das gewünschte Ergebnis zu erhalten 8bit sein. – gabe3886

+0

@gabe yup, es ist sogar der * einzige * kugelsichere Weg nach @ ircmaxells Antwort (das war mir auch nicht bewusst). –

1
strlen() 

, bevor es in mysql, oder in SQL setzen:

LENGTH() 

Beachten Sie, dass Länge auf Zeichensatz abhängig verschieden sein können. Wenn Sie möchten, wirkliche Länge haben, in Bytes strlen() verwenden, wenn Sie Zeichenzahl Verwendung mb_strlen haben wollen() (wenn Sie utf-8-Codierung zum Beispiel haben)

+0

strlen() kann fehlerhaft sein, siehe @ ircmaxells Antwort –

6

SELECT Länge (Feld) FROM Tabelle

Vom MySQL docs:

LÄNGE (str)

Gibt die Länge des Strings str, in Bytes gemessen. Ein Multibyte Zeichen zählt als mehrere Bytes. Dies bedeutet, dass für eine Zeichenfolge mit fünf Zwei-Byte-Zeichen, LENGTH() liefert 10, während CHAR_LENGTH() gibt 5.

+0

+1 das ist die richtige antwort auf das mySQL ende –