2010-08-18 19 views
9

jak mogę uzyskać "rozmiar pliku" z łańcucha w php?rozmiar pliku z ciągu

Umieściłem ciąg w bazie danych mysql jako obiekt typu blob i muszę zapisać rozmiar obiektu typu blob. Moim rozwiązaniem było utworzenie pliku tymczasowego i umieszczenie napisu w pliku tymczasowym. teraz mogę pobrać plik z "ciągu". ale to rozwiązanie nie jest dobre ...

pozdrowienia

Odpowiedz

40

to zależy. Jeśli masz włączoną mbstring function overloading, jedyne połączenie, które zadziała, to mb_strlen($string, '8bit');. Jeśli nie jest włączony, działa również dobrze strlen($string).

Tak, można obsługiwać zarówno takich przypadkach:

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

dziękuję! to działa! – poldixd

+1

+1 To jest poprawna odpowiedź –

+0

Chcesz wyjaśnić sprawę? Co jest złego lub niepełnego w tej odpowiedzi? – ircmaxell

0

Jeśli wszystkie są przechowywane jest łańcuch, wówczas wielkość powinna być długość czasu smyczkowych liczba bajtów w charset. Tak więc dla Unicode byłby to 2 * strlen ($ string).

+0

AFAIK tylko znaki specjalne mają podwójne wielkości. Tak więc litera "a" będzie miała jeden bajt, ale litery takie jak ó, ł, ż, ć, itp. Będą miały długość 2 bajtów –

+0

Och, nie wiedziałem o tym. Twoje zdrowie. –

+0

Yup, UTF-8 jest kodowaniem o zmiennej szerokości, znaki mogą mieć długość od 1 do 4 bajtów. http://pl.wikipedia.org/wiki/UTF-8 –

-3

użyć mb_strlen() jak wtedy można powiedzieć, jakiego rodzaju kodowania ciąg używa (jeśli jest), aby uzyskać jego rozmiar w bajtach.

+0

Po chwili namysłu, przepraszam, ale to jest całkowicie niepoprawne. 'mb_strlen()' w połączeniu z kodowaniem wielobajtowym ma na celu zwrócenie rozmiaru ciągu znaków w * znakach *, a nie bajtach. -1 –

+0

Po dokładnym zbadaniu, a nie po prostu czytaniu rzeczy (o których będę pamiętać, aby zrobić więcej w przyszłości), nadal możesz użyć mb_strlen(), aby uzyskać pożądany wynik, pomijając drugi parametr lub ustawiając drugi parametr być 8bit. – gabe3886

+0

@gabe yup, jest to nawet * tylko * kuloodporny sposób, zgodnie z odpowiedzią @ ircmaxell (również nie byłem tego świadomy). –

1
strlen() 

przed oddaniem go do MySQL lub SQL:

LENGTH() 

Zauważ, że długość mogą być różne w zależności od zestawu znaków. Jeśli chcesz mieć realną długość w bajtach korzystania strlen(), jeśli chcesz mieć mb_strlen użytku liczba znaków() (jeśli masz kodowanie UTF-8 na przykład)

+0

Strlen() może być wadliwy, patrz odpowiedź @ ircmaxell –

6

Wybierz długość (pole) FROM tabela

z MySQL docs:

długość (str)

Zwraca długość STR ciąg, mierzona w bajtach. Wielobajtowy znak liczy się jako wiele bajtów. Oznacza to, że na sznurku zawierającym pięć znaków dwubajtowych, length() zwraca 10, natomiast CHAR_LENGTH() zwraca 5.

+0

+1 to jest poprawna odpowiedź na końcu mySQL –