2010-09-20 31 views
17

Mã sau đây là một phần của dịch vụ web PHP mà tôi đã viết. Phải mất một số dữ liệu Base64 được tải lên, giải mã nó và nối nó vào một tệp. Điều này tất cả hoạt động tốt.Mã hóa PHP báo cáo kích thước cũ

Vấn đề là khi tôi đọc kích thước tệp sau thao tác chắp thêm, tôi nhận được kích thước tệp trước khi thực hiện nối thêm.

$fileOut = fopen($filepath.$filename, "ab") 
fwrite($fileOut, base64_decode($data)); 
fflush($fileOut); 
fclose($fileOut); 

$newSize = filesize($filepath.$filename); // gives old file size 

Tôi đang làm gì sai?

hệ thống là:

  • PHP 5.2.14
  • Apache 2.2.16
  • Linux kernel 2.6.18
+0

'b' được sử dụng để xuất dữ liệu nhị phân. Nó không nên gây ra vấn đề. –

Trả lời

34

Trên các hệ thống dựa trên Linux, dữ liệu lấy bằng filesize() là "statcached".

Hãy thử gọi clearstatcache(); trước cuộc gọi kích hoạt.

7

Theo hướng dẫn PHP:

Kết quả của chức năng này là được lưu trong bộ nhớ cache. Xem clearstatcache() để biết thêm chi tiết .

http://us2.php.net/manual/en/function.filesize.php

Về cơ bản, bạn phải xóa bộ nhớ cache stat sau ca phẫu thuật file:

$fileOut = fopen($filepath.$filename, "ab") 
fwrite($fileOut, base64_decode($data)); 
fflush($fileOut); 
fclose($fileOut); 

clearstatcache(); 

$newSize = filesize($filepath.$filename); 
2

PHP lưu trữ tất cả siêu dữ liệu tệp mà nó đọc trong bộ nhớ cache, vì vậy có khả năng kích thước tệp đã được lưu trữ trong bộ nhớ cache đó và bạn cần xóa nó. Xem clearstatcache và gọi điện trước khi bạn gọi filesize.

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