sách gpt4 ăn đã đi

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 25 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN về viết và đọc file PHP (một bài viết nên đọc) này được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm tới bài viết này thì nhớ like nhé.

Đề cương bài viết:

một. Ý tưởng cơ bản về việc thực hiện việc đọc và ghi tập tin.

hai. Mở tệp bằng phương pháp fopen.

ba. Thao tác đọc và ghi tệp.

Bốn. Sử dụng phương pháp fclose để đóng tệp.

năm. Chuyển động của con trỏ tập tin.

sáu. Vận chuyển trở lại và cấp dòng dưới cửa sổ và unix.

một. Ý tưởng cơ bản của việc thực hiện việc đọc và ghi file:

1. Mở tệp thông qua phương thức fopen: $fp =fopen(/*parameter, parameter*/), fp là loại tài nguyên 2. Thực hiện các thao tác đọc hoặc ghi tệp (hàm được sử dụng ở đây lấy $fp được trả về trong 1 làm tham số) 3. Gọi fclose($fp) để đóng tệp.

Hai: Sử dụng phương pháp fopen để mở tệp.

fopen(đường dẫn tệp [chuỗi], chế độ mở [chuỗi]).

<1>Thông số đầu tiên của fopen là đường dẫn file. Cách ghi đường dẫn file: 1 đường dẫn tuyệt đối, 2 đường dẫn tương đối.

1 Đường dẫn tuyệt đối:

Những người bạn làm việc trong Windows chắc hẳn đã quen với nó. Dấu phân cách đường dẫn trong Windows là "\" thay vì "/", nhưng chúng ta không thể sử dụng "\" chính thức làm dấu phân cách khi viết đường dẫn.

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Vậy điều gì sẽ xảy ra nếu chúng ta viết đường dẫn bằng dấu phân cách "\"?
?
1
2
3
    $fp = fopen ( "c:\wamp64\www\text.txt" , 'TRONG' );
?>
Sau khi chạy, một thông báo lỗi được báo cáo, cho biết tham số đường dẫn không hợp lệ.

  。

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Vì vậy chúng ta cần thay thế dấu phân cách "\" bằng "/":
?
1
2
3
   $fp = fopen ( "c:/wamp64/www/text.txt" , 'TRONG' );
?>

Không có lỗi nào được báo cáo khi chạy, cho biết các tham số là hợp lệ.

[Lưu ý] Hàm fopen không thể hiểu được dấu phân cách "\". Nếu bạn muốn sử dụng "\", bạn phải sử dụng lối thoát, chẳng hạn như viết: "c:\\wamp64\\www\\text.txt". chức năng có thể hiểu nó và sẽ không báo lỗi. Nhưng ngay cả như vậy, không nên sử dụng "\", vì chỉ "/" chứ không phải "\" được nhận dạng trong os (mac).

Kết luận của phần này: Nên sử dụng dấu "/" làm dấu phân cách.

2. Đường dẫn tương đối:

Phần trước đã giới thiệu cách ghi đường dẫn tuyệt đối, nhưng điều này lại mang đến một vấn đề khác: cấu trúc thư mục của máy chủ có thể thay đổi đáng kể, và khi đó tất cả các đường dẫn tuyệt đối ban đầu sẽ được viết lại. Ví dụ: trong đường dẫn file đích trên máy tính của tôi là. c:/wamp64/www/text.txt. Điều gì sẽ xảy ra nếu tôi đổi tên thư mục www thành penghuwan? Các tham số đường dẫn được viết ban đầu không hợp lệ. Vì vậy chúng tôi đã giới thiệu phương pháp viết đường dẫn tương đối:

?
1
2
3
4
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'TRONG' );
?>

• $_server là một biến siêu toàn cục của PHP (có thể truy cập ở bất kỳ đâu trong mã, kiểu là mảng) và thư mục gốc mặc định của máy chủ có thể được lấy thông qua $_server['document_root'].

Thư mục gốc mặc định của máy chủ có thể được sửa đổi thông qua php.ini (có thể tìm thấy thư mục này trên Baidu).

• $_server['document_root'] ở đây tương đương với c:/wamp64/wwww.

Kết luận của phần này: Nên sử dụng đường dẫn tương đối.

<2>Thông số thứ hai của fopen là chế độ mở.

Sau khi thiết lập chế độ mở, chúng ta tương đương với việc thiết lập quyền cho các thao tác đọc ghi tiếp theo:

Các chế độ cơ bản nhất:

"r": Chỉ đọc được file, không ghi được file (bỏ qua thao tác ghi) "w": Chỉ ghi được file, không đọc được file (bỏ qua thao tác đọc) "a": Chỉ nối file, Tương tự như "w", sự khác biệt là "w" xóa nội dung gốc và "a" không xóa nội dung gốc mà chỉ nối thêm nội dung.

?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'TRONG' );
   fwrite( $fp , 'Viết ở chế độ ghi' );
   đóng( $fp );
?>
Sau khi thiết lập quyền cho thao tác ghi, bạn có thể ghi tệp bình thường.
Sau khi chạy xong mở c:/wamp64/www/text.txt:
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
Lần này chúng tôi đặt quyền thành chỉ đọc và thử viết văn bản: 'Viết ở chế độ chỉ đọc'
?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'r' );
   fwrite( $fp , 'Viết ở chế độ đọc' );
   đóng( $fp );
?>
Sau khi chạy, hãy mở c:/wamp64/www/text.txt và thấy rằng nội dung tệp không thay đổi, cho biết thao tác đã bị bỏ qua do chưa đặt quyền tương ứng.
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
Về thông tin mạng ở chế độ mở, tôi nghĩ thứ bạn có thể tìm thấy nhiều nhất là bảng này: (Ảnh từ w3c)
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Nó rất toàn diện, nhưng tôi nghĩ bảng này hơi không thân thiện với người mới và khiến mọi người bối rối sau khi đọc nó. r là chỉ đọc, w là chỉ ghi (tất cả nội dung gốc bị xóa) và a là nối thêm (nội dung gốc không bị xóa), tất cả đều dễ hiểu.

Nhưng sự khác biệt và mối liên hệ giữa r+, w+ và a+ còn quá mơ hồ. Ở đây tôi muốn nói chi tiết về sự khác biệt và mối liên hệ giữa r+, w+ và a+:
Trước hết, r+, w+ và a+ đều có thể đọc và ghi được và chúng được đọc theo cùng một cách.Mấu chốt nằm ở sự khác biệt trong cách viết:
r+: từ tập tin[đầu][che]Nội dung gốc ([Không xóa]nội dung gốc);
một+:từ tập tin[Đuôi][Nối thêm]nội dung([Không xóa]nội dung gốc);
w+:[đã xóa hoàn toàn]nội dung gốc thì[Thêm nhiều hơn]nội dung mới
Tiếp theo tôi sẽ lần lượt chứng minh các kết luận trên. Đầu tiên, khi chúng ta không viết thì văn bản là "i am giá trị khởi tạo" (nghĩa là tôi là giá trị ban đầu).

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Viết văn bản "r+ mode" ở chế độ r+
?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'r+' );
   fwrite( $fp , 'chế độ r+' );
   đóng( $fp );
?>
Sau khi chạy, mở văn bản ra và thấy rằng "i am in" bị che bởi "r+ mode":

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Sử dụng chế độ a+ để viết văn bản "chế độ a+"
Dựa trên văn bản ban đầu của "tôi là giá trị khởi tạo", chúng tôi chạy đoạn mã sau:
?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'một+' );
   fwrite( $fp , 'chế độ a+' );
   đóng( $fp );
?>

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

giá trị khởi tạo của tôi không bị xóa và ghi đè nhưng văn bản mới của chế độ a+ đã được thêm vào cuối.
Sau khi chạy nó nhiều lần:

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

•Viết văn bản "chế độ w+" bằng chế độ w+.

Dựa trên văn bản ban đầu của "tôi là giá trị khởi tạo", chúng tôi chạy đoạn mã sau:
?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'w+' );
   fwrite( $fp , 'chế độ w+' );
   đóng( $fp );
?>
Sau khi chạy, chúng tôi thấy rằng "i am giá trị khởi tạo" đã bị xóa và sau đó văn bản mới "w+ mode" đã được thêm vào
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
[Lưu ý] Một điểm khác biệt giữa r+, a+ và w+ là a+ và w+ sẽ tạo tệp khi tệp không tồn tại và r+ sẽ báo lỗi nếu tệp không tồn tại.
[Tucao]: Về sự khác biệt giữa r+, w+ và a+, tôi đã tìm kiếm nhiều thông tin khác nhau trên Internet, bao gồm w3c và các bài viết blog khác nhau, cũng như "php Bible", và thấy rằng tất cả chúng đều được thực hiện trong một lần Đây là lý do tôi viết bài này.
ba. Thao tác đọc và ghi tệp
Trước tiên hãy nói về một vài chức năng quan trọng hơn:
file_tồn_tại(): Xác định xem tệp có tồn tại hay không và trả về giá trị Boolean
kích thước tập tin(): Xác định kích thước của file và trả về số byte của file dưới dạng số nguyên
bỏ liên kết():Xóa một tập tin
ghi tập tin
fwrite (đối tượng tệp tài nguyên [chuỗi], phương thức ghi [chuỗi]), đối tượng tệp tài nguyên là tham số được trả về bởi phương thức fopen, thuộc loại tài nguyên.
Chúng tôi đã có ví dụ trên nên sẽ không đưa bản demo vào đây.
đọc tập tin
Đây là nội dung của tập tin chúng tôi muốn đọc:

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Có một số cách để đọc tập tin:
1. Đọc dữ liệu một byte mỗi lần fgetc()
2. Đọc số byte dữ liệu được chỉ định tại một thời điểm fread()
3. Đọc từng hàng dữ liệu một lần fgets()/fgetcsv()
4. Đọc tất cả dữ liệu cùng một lúc fpassthru()/tập tin()
1. Đọc từng byte một - nhận một byte thông qua fgetc()
?
1
2
3
4
5
6
7
8
9
10
11
    $document_root = $_máy chủ [ 'tài liệu_gốc' ];
    $fp = fopen ( "$document_root/text.txt" , 'r' ); // mở tập tin
    nếu như ( file_tồn tại ( "$document_root/text.txt" )){ //Chỉ đọc nội dung khi file tồn tại
      trong khi (! của ( $fp )){ //Xác định xem con trỏ file có đến cuối không
         $c = fgetc ( $fp ); // Mỗi lần fgetc() được thực thi, con trỏ file sẽ di chuyển lùi lại một bit
         tiếng vọng $c ; // Xuất byte thu được
       }
     }
    đóng( $fp ); //Đóng tập tin
?>
chạy:
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
[Lưu ý]: Cho dù đó là đầu vào và đầu ra ở định dạng văn bản hay đầu ra ở định dạng nhị phân, fgetc() đều nhận được mộtbytethay vì mộttính cách
Trong ví dụ trên, chúng ta xuất từng cái một. Bây giờ chúng ta chỉ xuất một lần và xem kết quả là gì:
?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'r' );
   tiếng vọng fgetc ( $fp ); //Chỉ thực hiện một đầu ra
   đóng( $fp );
?>
Kết quả chạy như sau. Những gì chúng tôi nhận được không phải là ký tự tiếng Trung "I", mà là một mã bị cắt xén. Trên thực tế, mã bị cắt xén này chỉ là một byte.
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
?
1
2
3
4
5
6
7
8
    $document_root = $_máy chủ [ 'tài liệu_gốc' ];
    $fp = fopen ( "$document_root/text.txt" , 'r' );
    tiếng vọng fgetc ( $fp ); // Thực hiện xuất ba lần liên tiếp
    tiếng vọng fgetc ( $fp );
    tiếng vọng fgetc ( $fp );
    đóng( $fp );
?>

2. Đọc nhiều byte cùng một lúc - thông qua phương thức fread():

?
1
2
3
4
5
6
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $fp = fopen ( "$document_root/text.txt" , 'r' );
   tiếng vọng sợ hãi ( $fp , 3); // Xuất ba byte cùng một lúc, là một ký tự tiếng Trung (utf-8)
   đóng( $fp );
?>
Kết quả chạy:

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Thay đổi thành:

?
1
tiếng vọng sợ hãi ( $fp , 6);
Kết quả chạy như sau, 6 byte, tức là xuất ra hai ký tự tiếng Trung (utf-8)
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
3. Đọc từng dòng một - lấy nội dung của một dòng thông qua fgets()
?
1
2
3
4
5
6
7
8
9
10
11
     $document_root = $_máy chủ [ 'tài liệu_gốc' ]
     $fp = fopen ( "$document_root/text.txt" , 'r' ); // mở tập tin
     nếu như ( file_tồn tại ( "$document_root/text.txt" )){ //Chỉ đọc nội dung khi file tồn tại
      trong khi (! của ( $fp )){ //Xác định xem con trỏ file có đến cuối không
        $dòng = fgets ( $fp ); //Trả về một dòng văn bản và di chuyển con trỏ tập tin về đầu dòng tiếp theo
        tiếng vọng $dòng . "
"
; // Xuất dòng văn bản thu được
      }
     }
     đóng( $fp ); //Đóng tập tin
?>

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

fgets() thực sự có tham số thứ hai, xác định số lượng mục có thể đọc được trên mỗi dòng.Số byte tối đa (chú ý số byte, không phải số ký tự):
[Lưu ý] Theo mã hóa UTF-8, ký tự tiếng Trung là 3 byte và chữ cái là 1 byte.
Tiếp theo mình sửa lại dòng và code trên sao cho số ký tự tối đa thu được trên mỗi dòng là 3 (tức là số byte là 9)
?
1
$dòng = fgets ( $fp ,10);
thử nghiệm:
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
[Lưu ý]: Tham số thứ hai trong fgets() của tôi ở đây là 10. Tại sao lại là 10? bởi vì
1. Độ dài ở đây được tính bằng byte.
2. Một ký tự tiếng Trung chiếm 3 byte. fgets($fp,10) có nghĩa là đọc tối đa 10 - 1 = 9 byte mỗi lần
4. Đọc toàn bộ tệp cùng một lúc - fpassthru() hoặc file()?
fpassthru() sẽ đọc tệp vàĐầu ra trực tiếp (không xử lý)
?
1
2
3
4
5
6
    $document_root = $_máy chủ [ 'tài liệu_gốc' ];
    $fp = fopen ( "$document_root/text.txt" , 'r' );
    fpassthru ( $fp );
    đóng( $fp );
?>
Kết quả chạy:
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
【Để ý】 Một điều cần lưu ý ở đây là chúng tôi không nhận được giá trị trả về từ fpassthru($fp) và sau đó lặp lại nó cho trang. Nói cách khác, phương thức này sẽ buộc xuất ra nội dung thu được, thay vì trả về như phương thức trong. ví dụ trước, cho phép chúng ta lưu nó vào một biến trước khi xuất ra.
Lưu tất cả nội dung đã đọc vào một mảng, mỗi phần tử mảng là nội dung của một dòng - fille()
?
1
2
3
4
5
6
7
   $document_root = $_máy chủ [ 'tài liệu_gốc' ];
   $mảng_tệp = tập tin( "$document_root/text.txt" ); //Lấy mảng tập tin
   foreach ( $mảng_tệp BẰNG $giá trị ) { // Các phần tử mảng đầu ra
     tiếng vọng $giá trị . "
"
;
   }
?>

Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

[Lưu ý]: Chúng ta không cần viết fopen và fclose ở đây! Nói cách khác, phương thức file() đã thực hiện bước này cho chúng ta.
Bốn. Đóng tệp bằng phương pháp fclose
fclose() sẽ trả về giá trị Boolean, giá trị này đúng nếu được đóng thành công và sai nếu đóng không thành công (lỗi hiếm khi xảy ra và có thể bỏ qua)
Tôi có phải đóng tập tin sau khi mở nó không?
1 Ngay cả khi bạn không viết fclose bằng tay, tệp sẽ tự động bị đóng sau khi tập lệnh php được thực thi.
2. Tuy nhiên, trong một tập lệnh được thực thi trong thời gian dài, nếu bạn không viết fclose() để đóng tệp, thao tác sẽ bị chặn khi tệp bị khóa. Vì vậy, viết fclose là một thói quen tốt.
năm. Di chuyển con trỏ tập tin
Hàm mà chúng ta gọi ở trên để đọc tệp thực sự được in dựa trên con trỏ tệp. Mỗi khi đọc một đoạn nội dung byte, con trỏ tệp sẽ di chuyển lùi lại một đoạn có độ dài byte cho đến khi độ dài byte tối đa của tệp được đọc.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
      $document_root = $_máy chủ [ 'tài liệu_gốc' ];
      chức năng in_con_sổ_con_tập_tin( $fp ){ //Định nghĩa hàm in vị trí con trỏ file
        tiếng vọng "
//Vị trí của con trỏ tập tin lúc này: "
;
        tiếng vọng ftell ( $fp ). "
"
;
      }
      $fp = fopen ( "$document_root/text.txt" , 'r' );
      tiếng vọng fgetc ( $fp ); // Xuất liên tục 3 byte thông qua fgetc
      tiếng vọng fgetc ( $fp );
      tiếng vọng fgetc ( $fp );
      in_con_sổ_con_tập_tin( $fp ); //In vị trí con trỏ file tại thời điểm này
     
      tiếng vọng sợ hãi ( $fp ,6); // Xuất 6 byte mỗi lần thông qua fread
      in_con_sổ_con_tập_tin( $fp ); //In vị trí con trỏ file tại thời điểm này
     
      tiếng vọng fgets ( $fp ); // Xuất cả một dòng thông qua fgets
      in_con_sổ_con_tập_tin( $fp ); //In vị trí con trỏ file tại thời điểm này
     
      fpassthru ( $fp ); // Xuất tất cả nội dung cùng một lúc
      in_con_sổ_con_tập_tin( $fp ); //In vị trí con trỏ file tại thời điểm này
     
      tìm kiếm ( $fp , 33); // Di chuyển con trỏ file đến vị trí 33 byte
      in_con_sổ_con_tập_tin( $fp ); //In vị trí con trỏ file tại thời điểm này
     
      tua lại ( $fp ); // Di chuyển con trỏ file đến vị trí 0 byte (vị trí ban đầu)
      in_con_sổ_con_tập_tin( $fp ); //In vị trí con trỏ file tại thời điểm này
$fđóng ( $fp );
?>
thử nghiệm:
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
Vì vậy chúng ta cần hiểu đúng chức năng của fgets(), fpassthru():
fget():từ con trỏ tập tin hiện tạivị tríKết thúc tại ngân hàng nàydữ liệu,Thay vì nhất thiết phải xuất ra cả một dòng
fpassthru():từ con trỏ tập tin hiện tạivị tríđến cuối tất cả nội dungdữ liệu,Thay vì nhất thiết phải xuất tất cả dữ liệu
Nhưng ở đây bạn có thể có thắc mắc: Tại sao vị trí con trỏ sau khi xuất ra "Lake Bay" lại là 17 thay vì 15? Lý do là đầu ra của năm ký tự tiếng Trung "Tên tôi là Peng Huwan" chiếm tổng cộng 3 * 5 = 15 byte. 17 - 15 = 2 byte bổ sung là bao nhiêu?
Hai byte bổ sung là ký tự xuống dòng và ký tự nguồn cấp dòng trong Windows\n\r
\n là nguồn cấp dữ liệu và chiếm một byte \r là dấu xuống dòng và chiếm một byte.
sáu. Vận chuyển trở lại và cấp dòng dưới cửa sổ và unix
?
1
2
3
4
5
6
7
8
9
    $document_root = $_máy chủ [ 'tài liệu_gốc' ];
    $fp = fopen ( "$document_root/text.txt" , 'r' );
    trong khi (! của ( $fp )){
     tiếng vọng fgets ( $fp );
     tiếng vọng ftell ( $fp );
    }
    đóng( $fp );
?>
Khi chúng ta nhấn phím Enter trong Windows, nó tương đương với việc gõ \n\r, do đó 15 byte "Tên tôi là Peng Huwan" + 2 byte "\n\r" = 17 byte
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)
Sự khác biệt trên Mac là: khi nhấn phím Enter, nó chỉ tương đương với việc gõ \n, do đó 15 byte "Tên tôi là Peng Huwan" + 1 byte "\n" = 16 byte
Những lời sáo rỗng về việc ghi và đọc file PHP (phải đọc)

Những sáo ngữ về viết và đọc file PHP (một bài viết phải đọc) ở trên là toàn bộ nội dung mà biên tập viên đã chia sẻ với các bạn, mong các bạn có thể tham khảo và mong các bạn ủng hộ mình nhiều.

Cuối cùng, bài viết về những câu nói sáo rỗng về việc ghi và đọc tệp PHP (một bài viết phải đọc) kết thúc ở đây. Nếu bạn muốn biết thêm về những câu nói sáo rỗng về việc ghi và đọc tệp PHP (một bài viết phải đọc), vui lòng tìm kiếm các bài viết của CFSDN. hoặc tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

25 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress