2012-07-06 35 views

Trả lời

6
$start_memory = memory_get_usage(); 
$foo = "Some variable"; 
echo memory_get_usage() - $start_memory; 

này là tốt nếu bạn đang làm việc với bất kỳ loại var.

+0

Giải pháp tốt hơn tôi. –

+12

Đây là một chút tắt. 'memory_get_usage() trả về số lượng bộ nhớ, tính bằng byte, hiện đang được cấp phát cho tập lệnh PHP của bạn. 'Bộ nhớ của bạn được cấp phát bộ nhớ để đặt biến' $ foo' cũng như bộ nhớ để đặt biến '$ foo' thành một chuỗi và nối thêm một giá trị. Kết quả cao hơn số bit/byte thực tế của chuỗi. –

+2

thì tại sao nó luôn trả về 272 cả khi tôi sử dụng '" Một số biến "' như chuỗi hoặc '" Một số biến Một số biến Một số biến "' (nhiều lần)? Ngay cả khi tôi gán chuỗi rỗng nó vẫn hiển thị 272. Có vẻ như phương pháp này là không chính xác – vladkras

4

strlen() trả về số byte trong một chuỗi.

+0

có chiều dài bằng với kích thước tính bằng byte? một ký tự là 8 bit hay không? – Sena

+0

Một ký tự là 1 byte (8 bit). – ametren

+2

@ametren: Không phải luôn luôn, chuỗi nhiều byte (mã hóa Unicode) và có thể chứa các ký tự có nhiều hơn 1 byte. –

7

Ký tự là một byte, vì vậy chỉ cần kiểm tra độ dài chuỗi. Chia cho 1024 nếu bạn cần bằng KB (được chuẩn bị cho số thập phân).

<?php echo "Message size is ".strlen($Message)."B"; ?> 
+2

chỉ một người nói chia cho 1024 để nhận KB, tôi tin rằng mọi người đều biết điều này nhưng không ai đề cập đến nó, đã bỏ phiếu – Gntem

+0

yup, chuỗi được cho là .03KB – ametren

33

strlen trả về số byte trong chuỗi chứ không phải độ dài ký tự. Xem Hướng dẫn sử dụng PHP here.

Nhìn kỹ vào:

Lưu ý:

strlen() trả về số byte chứ không phải là số ký tự trong một chuỗi.

Nếu bạn lấy kết quả và bội số của 8, bạn có thể nhận bit.

Đây là một chức năng có thể dễ dàng thực hiện phép tính cho bạn.

function strbits($string){ 
    return (strlen($string)*8); 
} 

Note, nếu bạn sử dụng, memory_get_usage(), bạn sẽ có giá trị sai trả lại. Bộ nhớ nhận được mức sử dụng là lượng bộ nhớ được phân bổ bởi tập lệnh PHP. Điều này có nghĩa, trong bộ phân tích cú pháp của nó, nó phân bổ bộ nhớ cho chuỗi và giá trị của chuỗi. Kết quả là, giá trị của điều này trước và sau khi thiết lập một var, sẽ cao hơn mong đợi.

Ví dụ, chuỗi: Hello, this is just test message, sản xuất các giá trị sau:

Memory (non-real): 344 bytes 
Strlen: 32 Bytes 
Strlen * 8bits: 256 bits 

Đây là mã:

<?php 
$mem1 = memory_get_usage(); 
$a = 'Hello, this is just test message'; 

echo "Memory (non-real): ". (memory_get_usage() - $mem1)."\n"; 
echo "Strlen: ". strlen($a)."\n"; 
echo "Strlen * 8bits: ". (strlen($a) * 8),"\n"; 
+0

Điều gì sẽ nhanh hơn nếu tôi không cần kết quả chính xác, 'strlen 'hoặc' memory_get_usage'? – mgutt

+3

'strlen' nhanh hơn –

+4

Đây phải là câu trả lời được chấp nhận. – Ryan

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