cuốn sách gpt4 ai đã làm

php - filesize() 始终读取 0 字节,即使文件大小不是 0 字节

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 06:04:43 31 4
mua khóa gpt4 Nike

Tôi đã viết một số mã bên dưới mà tôi hiện đang kiểm tra nên không có truy vấn cơ sở dữ liệu nào trong mã.

Mã dưới đây cho thấy if(filesize($filename) != 0) luôn luôn đi đến khác, mặc dù tệp không phải là 0 byte mà là 16 byte dữ liệu ở đó. Tôi chẳng đi đến đâu cả, dường như luôn nghĩ tệp này là 0 byte.

Tôi nghĩ việc hiển thị mã của mình sẽ dễ dàng hơn (có thể có các lỗi khác, nhưng tôi sẽ kiểm tra từng lỗi khi thực hiện và xử lý từng lỗi một). Tôi không nhận được bất kỳ lỗi PHP hay bất cứ điều gì.

$filename = 'memberlist.txt';
$file_directory = dirname($filename);
$fopen = fopen($tên tệp, 'w+');

// kiểm tra xem tập tin có tồn tại và có thể ghi được không
if(file_exists($filename) && is_writable($file_directory)){

// xóa statcache nếu không kích thước tập tin có thể không chính xác
Clearstatcache();

// để kiểm tra, hiển thị 0 byte mặc dù tệp là 16 byte
// tập tin có bên trong không có dấu ngoặc kép: '1487071595 ;
echo "Kích thước thực sự của tập tin là ".filesize($filename)." bytes.\n";

// kiểm tra xem file có chứa dữ liệu không, cũng đã thử !==
// luôn đi đến nơi khác mặc dù kích thước không phải là 0 byte
if(filesize($filename) != 0){

// đọc file vào mảng
$fread = tệp ($tên tệp);

// lấy thời gian hiện tại
$current_time = thời gian();

foreach($fread as $read){
$var = nổ(';', $read);
$oldtime = $var[0];
$member_count = $var[1];
}
if($current_time - $oldtime >= 86400){
// 24 giờ trở lên nên chúng tôi truy vấn db và ghi số lượng thành viên mới vào tệp
echo 'hơn 24 giờ đã trôi qua'; // để kiểm tra

} khác {
// dưới 24 giờ nên không truy vấn db mà chỉ đọc số lượng thành viên từ tệp
echo 'chưa đầy 24 giờ đã trôi qua';
}
} else { // CHÚNG TÔI LUÔN KẾT THÚC TẠI ĐÂY
// tệp khác trống nên chúng tôi thêm dữ liệu
$current_time = thời gian().' ;
$member_count = 582; // giá trị này sẽ đến từ cơ sở dữ liệu
fwrite($fopen, $current_time.$member_count);
fclose($fopen);
//echo "Tệp trống nên hãy ghi dữ liệu mới vào tệp. Kích thước tệp thực tế là ".filesize($filename)." bytes.\n";
}

} khác {
// tập tin không tồn tại hoặc không thể ghi vào
echo 'file không tồn tại hoặc không thể ghi được';
}

Về cơ bản, mã sẽ nằm trên trang danh sách thành viên hiện đang truy xuất tất cả thành viên và đếm số lượng thành viên đã đăng ký. Điểm chính trong tập lệnh là nếu thời gian nhỏ hơn 24 giờ, chúng tôi đọc member_count từ tệp, nếu không, nếu 24 giờ trở lên trôi qua, chúng tôi truy vấn cơ sở dữ liệu, lấy số lượng thành viên và ghi số mới vào tập tin này nhằm mục đích giảm số lượng trang danh sách thành viên.

Cập nhật 1:

Mã này:

echo "Kích thước thực tế của tập tin là ".filesize($filename).."bytes.\n";

Luôn xuất nội dung sau, ngay cả khi nó không phải là 0 byte.

Kích thước tệp thực tế là 0 byte.

Cũng đã thử

var_dump (kích thước tệp ($ tên tệp));

Đầu ra:

int(0)

câu trả lời hay nhất

Bạn đang sử dụng:

fopen($tên file, "w+") 

Theo hướng dẫn w+ thể hiện:

Mở để đọc và ghi; đặt con trỏ tệp vào đầu tệp và cắt ngắn tệp về độ dài bằng 0. Nếu tệp không tồn tại, hãy thử tạo nó.

Vì vậy, kích thước tệp là 0 là chính xác.

bạn có thể cần r+

Về php - filesize() luôn đọc 0 byte, ngay cả khi kích thước tệp không phải là 0 byte, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42225750/

31 4 0
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