hn4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com
Full version available at http://4u.jcisio.com/r/article620.htm

Hải Nam

Đọc nội dung tập tin

Có nhiều cách để đọc nội dung một tập tin. Bài viết này sẽ cố gắng trình bày hết các cách chủ yếu, và cả cách truy xuất các dạng tập tin nén được PHP hỗ trợ. Mục đích của tôi là giúp bạn sử dụng uyển chuyển các hàm của PHP khi một vài cái bị cấm (khai báo trong disable_functions), biết được công dụng một số hàm đặc biệt có hiệu quả cao...

Xuất thằng nội dung ra màn hình

PHP có cung câp sẵn một hàm làm việc này: readfile() có cú pháp

Mã lệnh (PHP)
int readfile ( string filename [, int use_include_path] )

Thí dụ sau in nội dung tập tin data.txt ra màn hình

Mã lệnh (PHP)
readfile('data.txt');

Tuy nhiên, không hiểu vì sao có một số host cấm dùng hàm này. Tôi sẽ cung cấp một số cách khác. Trước hết là dùng fpassthru()

Mã lệnh (PHP)
int fpassthru ( int fp )

Đối số của hàm này là file pointer, nó sẽ in nội dung của tập tin được tham chiếu bởi fp, từ vị trí hiện tại đến hết tập tin. Thí dụ sau cũng sẽ in nội dung tập tin data.txt ra màn hình:

Mã lệnh (PHP)
$fp = fopen('data.txt', 'r');
fpassthru($fp);
fclose($fp);

Đối với các hệ thống Windows, bạn phải thay 'r' bằng 'rb' nếu bạn muốn thao tác trên các tập tin nhị phân (binary file).

Bạn có thể viết đoạn mã trên ngắn gọn hơn, chỉ 1 dòng:

Mã lệnh (PHP)
fpassthru(fopen('data.txt', 'r'));

Cách cuối dùng, là đọc ghi tập tin bình thường. Thí dụ:

Mã lệnh (PHP)
$fp = fopen('data.txt', 'r');
while(!
feof($fp)) {
    print
fread($fp, 4096);
}

Cách cuối cùng này tuy dài nhất, nhưng lại tốn ít bộ nhớ nhất. Thật vậy, mỗi lần nó chỉ đọc tối đa 4K, trong khi các cách trên đọc toàn bộ nội dung vào bộ nhớ rồi mới in ra - sẽ tốn bộ nhớ đáng kể nếu bạn đọc các tập tin vài MB.

Xuất nội dung tập tin PHP, có định dạng

Bạn muốn xuất nội dung tập tin PHP, nhưng các mã PHP được định dạng đẹp như bài viết này? Có 2 cách để làm điều đó khá đơn giản. Cách đầu tiên, đơn giản nhất như thí dụ này:

Mã lệnh (PHP)
highlight_file('test.php');

Bạn có thể lưu kết quả vào chuỗi thay vì xuất ra màn hình:

Mã lệnh (PHP)
$colored_source = highlight_file('test.php', TRUE);

Một cách khác là dùng hàm highlight_string, giả sử bạn đã đọc nội dung test.php vào $source, giờ ta in nó ra màn hình:

Mã lệnh (PHP)
highlight_string($source);

Làm việc với tập tin gzip

Gzip là một chuẩn nén còn tốt hơn cả zip và rar của Windows. Thông thường, người ta gộp nhiều tập tin vào trong một file .tar, rồi nén lại thành .tar.gz (hoặc .tgz). Như vậy, mỗi tập tin .gz chỉ chứa 1 tập tin không nén. Trong phần này tôi sẽ giới thiệu cách đọc/ghi tập tin gzip.

Bạn dùng các hàm sau để thao tác, nói chung cũng giống như xử lí tập tin thông thường, nhưng có thêm tiền tố gz:

Mã lệnh (PHP)
int readgzfile ( string filename [, int use_include_path] )    // đọc tập tin, giải nén và in ra màn hình
int gzpassthru ( resource zp )    // đọc các thông tin còn lại của zp (một pointer trỏ đến tập tin đang mở), in ra màn hình

resource gzopen ( string filename, string mode [, int use_include_path] )    // mở tập tin nén
string gzgets ( resource zp, int length )    // đọc 1 dòng
int gzputs ( resource zp, string str [, int length] )    // ghi 1 dòng
string gzread ( resource zp, int length )    // đọc length bytes (không nén)
int gzeof ( resource zp )    // dấu hiệu kết thúc tập tin
int gzclose ( resource zp )    // đóng tập tin đã mở

Sau đây là thí dụ minh hoạ các hàm trên

Mã lệnh (PHP)
<?
$data = "Xin chào các bạn\nCó vui không?";

// ghi $data vào data.gz
$zp = gzopen("data.gz", "wb");
gzputs($zp, $data);
gzclose($zp);

// đọc từng dòng và in ra
$zp = gzopen("data.gz", "rb");
while (!
gzeof($zp))
{
    echo
gzread($zp, 1024);
}
gzclose($zp);

// đọc toàn bộ
readgzfile("data.gz");
?>


hainam4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com