2010-04-12 43 views
6

Tôi có một tệp. nhưng bây giờ cần phải đọc tập tin này vào một mảng byte. Trong java hoặc C++ nó rất dễ dàng để làm điều đó. nhưng không tìm thấy cách tôi có thể đọc trong PHP.Đọc một Tệp vào một Byte Array (PHP)

Trả lời

10

Bạn có thể đọc các tập tin vào một chuỗi như thế này:

$data = file_get_contents("/tmp/some_file.txt"); 

Bạn có thể nhận tại các byte cá nhân tương tự như cách bạn sẽ trong C:

for($i = 0; $i < strlen($data); ++$i) { 
    $char = $data[$i]; 
    echo "Byte $i: $char\n"; 
} 

Tài liệu tham khảo:

+1

Tôi nghĩ rằng có một typo. Nó phải là: '$ char = $ data [$ i]; ' –

4

Xem PHP Manual on String access and modification by character

Nhân vật trong chuỗi s có thể được truy cập và sửa đổi bởi xác định độ lệch dựa trên số không của ký tự mong muốn sau chuỗi sử dụng các dấu ngoặc vuông, như trong $str[42]. Hãy nghĩ về một chuỗi như một mảng các ký tự cho mục đích này. Các chức năng substr()substr_replace() có thể được sử dụng khi bạn muốn trích xuất hoặc thay thế nhiều hơn 1 ký tự.

Hoặc, nếu bạn là sau khi tìm kiếm và đọc byte từ tập tin, bạn có thể sử dụng một SplFileObject

$file = new SplFileObject('file.txt'); 
while (false !== ($char = $file->fgetc())) { 
    echo "$char\n"; 
} 

Đó không phải là một mảng byte mặc dù, nhưng lặp lại trên một tập tin xử lý. SplFileInfo triển khai giao diện SeekableIterator.

Và trên một sidenote, cũng có

  • file là - Trả về tập tin trong một mảng. Mỗi phần tử của mảng tương ứng với một dòng trong tệp, với dòng mới vẫn được đính kèm. Khi thất bại, file() trả về FALSE.
2

quá nhiều php>

$data = file_get_contents("/tmp/some_file.txt");

Cách tốt nhất để làm cho (không khuyến cáo trong cho đếm sử dụng, sizeof, strlen hoặc các chức năng khác): $counter = strlen($data); for($i = 0; $i < $counter; ++$i) { $char = data[$i]; echo "Byte $i: $char\n"; }

+0

tối ưu hóa vi mô vô nghĩa. và câu trả lời của bạn cũng phải là bình luận bên dưới câu trả lời. – Gordon

+0

Trong tất cả các tối ưu hóa vi mô, điều này là ít nhất vô nghĩa nếu có. – raveren

+0

có. nhưng trong zend sertificate rất thường xuyên. – Mantas

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