2010-08-18 29 views
9

làm thế nào tôi có thể nhận được "filesize" từ một chuỗi trong php?filesize from a String

Tôi đặt chuỗi trong cơ sở dữ liệu mysql dưới dạng blob và tôi cần lưu trữ kích thước của đốm màu. Giải pháp của tôi là tạo một tệp tạm thời và đặt chuỗi đó vào tệp tạm thời. bây giờ tôi có thể nhận được các tập tin từ "chuỗi". nhưng giải pháp đó là không tốt ...

lời chào

Trả lời

40

Nó phụ thuộc. Nếu bạn đã bật mbstring function overloading, cuộc gọi duy nhất sẽ hoạt động sẽ là mb_strlen($string, '8bit');. Nếu nó không được kích hoạt, strlen($string) cũng sẽ hoạt động tốt.

Vì vậy, bạn có thể xử lý cả hai trường hợp như thế này:

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

cảm ơn bạn! nó hoạt động! – poldixd

+1

+1 đây là câu trả lời đúng –

+0

Chăm sóc để giải thích câu trả lời? Có gì sai hoặc không đầy đủ về câu trả lời này? – ircmaxell

0

Nếu tất cả các bạn đang lưu trữ là chuỗi, sau đó kích thước nên được chiều dài của lần chuỗi của bạn số byte trong charset. Vì vậy, đối với Unicode sẽ là 2 * strlen ($ string).

+0

AFAIK chỉ ký tự đặc biệt có kích thước gấp đôi. Vì vậy, chữ 'a' sẽ có một byte, nhưng các chữ cái như ó, ł, ż, ć, ś vv sẽ dài 2 byte –

+0

Ồ, tôi không biết điều đó. Chúc mừng. –

+0

Yup, UTF-8 là mã hóa có độ rộng biến đổi, các ký tự có thể dài từ 1 đến 4 byte. http://en.wikipedia.org/wiki/UTF-8 –

-3

sử dụng mb_strlen() khi đó bạn có thể cho biết loại chuỗi mã hóa mà chuỗi sử dụng (nếu có) để nhận kích thước của chuỗi theo byte.

+0

Suy nghĩ thứ hai, xin lỗi, nhưng điều này hoàn toàn không chính xác. 'mb_strlen()' kết hợp với một mã hóa nhiều byte được thiết kế để trả về kích thước của chuỗi trong * ký tự *, không phải byte. -1 –

+0

Khi điều tra thêm thay vì chỉ đọc công cụ (mà tôi sẽ lưu ý để làm nhiều hơn trong tương lai), bạn vẫn có thể sử dụng mb_strlen() để nhận kết quả mong muốn bằng cách bỏ tham số thứ hai hoặc đặt tham số thứ hai là 8bit. – gabe3886

+0

@gabe yup, nó thậm chí là * chỉ * cách chống đạn theo câu trả lời của @ ircmaxell (tôi cũng không biết điều đó). –

1
strlen() 

trước khi đưa nó vào mysql, hoặc trong SQL:

LENGTH() 

ý rằng chiều dài có thể khác nhau tùy thuộc vào bộ ký tự. Nếu bạn muốn có chiều dài thực sự trong byte sử dụng strlen(), nếu bạn muốn có mb_strlen sử dụng số ký tự() (nếu bạn có utf-8 encoding ví dụ)

+0

strlen() có thể thiếu sót, xem câu trả lời của @ ircmaxell –

6

CHỌN chiều dài (trường) FROM tên_bảng

Từ MySQL docs:

LENGTH (str)

Trả về chiều dài của chuỗi str, đo bằng byte. Một ký tự nhiều byte được tính là nhiều byte. Điều này có nghĩa rằng đối với một chuỗi chứa năm nhân vật hai byte, LENGTH() trả về 10, trong khi CHAR_LENGTH() trả 5.

+0

+1 đây là câu trả lời đúng về kết thúc mySQL –

Các vấn đề liên quan