Tôi đến từ nền C và C++ nhưng cũng chơi với một số nội dung web. Tất cả chúng tôi là C folks (hy vọng) biết rằng gọi số feof
trên FILE*
trước khi đọc là một lỗi. Đây là cái gì đó thường xuyên đưa người mới đến C và C++. Đây có phải là trường hợp thực hiện PHP không?Hành vi feof của PHP so với C
Tôi cho rằng đó là do tệp có thể là ổ cắm hoặc bất kỳ thứ gì khác mà không thể biết kích thước trước khi đọc xong. Nhưng chỉ là về tất cả các ví dụ PHP (ngay cả những người được tìm thấy trên php.net Tôi đã nhìn thấy trông giống như thế này (và báo động đi tắt trong đầu của tôi):
$f = fopen("whatever.txt", "rb");
while(!feof($f)) {
echo fgets($f);
}
fclose($f);
Tôi biết nó là thích hợp hơn để viết những dòng này như thế này và tránh điều này vấn đề:
$f = fopen("whatever.txt", "rb");
while($line = fgets($f)) {
echo $line;
}
fclose($f);
nhưng điều đó ngoài vấn đề. Tôi đã thử nghiệm nếu mọi thứ thất bại nếu tôi làm "sai cách", nhưng tôi không thể làm cho hành vi không chính xác. nhưng tôi thấy nó đáng để thử.
Vì vậy, có sai khi gọi feof
trước một số fread
bằng PHP không?
Có một vài cách mà PHP có thể đã làm điều này khác với phiên bản của C, nhưng tôi cảm thấy chúng có nhược điểm.
chúng có thể được đặt mặc định là! EOF. Điều này là phụ tối ưu vì nó có thể không chính xác đối với một số trường hợp góc.
họ có thể nhận được kích thước tệp trong một cuộc gọi
fopen
, nhưng điều này không thể hoạt động trên tất cả các loại tài nguyên tệp, mang lại hành vi không nhất quán và sẽ chậm hơn.
Bạn đã tạo tài khoản của mình chỉ để cung cấp cho chúng tôi khoản đóng góp có giá trị này? –
trong C nó chắc chắn là một lỗi hợp lý để gọi 'feof' trước một thao tác có thể đặt cờ EOF. 'fopen' không phải là một trong những hoạt động đó. –
Arrrggghhh! Nó chắc chắn không phải là một lỗi, logic, cú pháp, hay cách khác. Nó hoàn toàn hợp lệ. Nếu bạn hiểu nó làm gì - nó sẽ hoạt động chính xác như mong đợi, như MightyE đã giải thích ở trên. Câu hỏi đóng khung tình trạng là một lỗi; không phải vậy. – Anonymous