Tôi đã triển khai giải pháp tương tự trên trang web lưu trữ tệp.
Điều bạn muốn làm là sử dụng cuộc gọi lại register_shutdown_function cho phép bạn phát hiện kết thúc thực thi tập lệnh php bất kể kết quả.
Sau đó, bạn muốn đặt tệp của mình ở vị trí không thể truy cập web trên máy chủ và tải xuống qua php: ý tưởng là bạn muốn có thể theo dõi số lượng byte đã được chuyển đến khách hàng.
Đây là một cách cơ bản thực hiện (ví dụ :)
<?php
register_shutdown_function('shutdown', $args);
$file_name = 'file.ext';
$path_to_file = '/path/to/file';
$stat = @stat($path_to_file);
//Set headers
header('Content-Type: application/octet-stream');
header('Content-Length: '.$stat['size']);
header('Connection: close');
header('Content-disposition: attachment; filename='.$file_name);
//Get pointer to file
$fp = fopen('/path/to/file', 'rb');
fpassthru($fp);
function shutdown() {
$status = connection_status();
//A connection status of 0 indicates no premature end of script
if($status == 0){
//Do whatever to increment the counter for the file.
}
}
>?
Rõ ràng là có cách để cải thiện, vì vậy nếu bạn cần biết thêm chi tiết hoặc hành vi khác, xin vui lòng cho tôi biết!
Nguồn
2010-02-24 21:48:26
Các tệp đó có kích thước lớn như thế nào? Kb? Mb? <100 Mb? – Strae
DK-Wamp đã nói "Tôi có thể có các chi tiết khác về chủ đề này không? // Tôi đã cố gắng sử dụng tập lệnh này nhưng không hoạt động đối với tôi. :(// Tôi biết đó là chủ đề cũ nhưng tôi hy vọng Tìm một giải pháp. " – Veedrac