Đã được một thời gian kể từ khi chúng tôi thực hiện một hướng dẫn thích hợp về PHP & MySQL tại Tutorialzine, vì vậy hôm nay chúng tôi đang tạo một trình theo dõi tải xuống tệp đơn giản nhưng mạnh mẽ
Mỗi tệp sẽ có một hàng tương ứng trong cơ sở dữ liệu, nơi lưu tổng số lượt tải xuống. PHP sẽ cập nhật cơ sở dữ liệu MySQL và chuyển hướng khách truy cập đến các tệp thích hợp
Để theo dõi số lượt tải xuống, bạn chỉ cần tải các tệp của mình lên thư mục tệp và sử dụng một URL đặc biệt để truy cập chúng
Ghi chú. Hướng dẫn này khá cũ và không hoạt động trong PHP7 trở lên. Chúng tôi đang giữ nó trực tuyến chỉ như một tài liệu tham khảo
Bước 1 - XHTML
Bước đầu tiên là đặt đánh dấu XHTML của trình theo dõi. Nó khá đơn giản - chúng ta có div trình quản lý tệp, chứa danh sách không có thứ tự với mỗi tệp dưới dạng phần tử li
Các tệp sẽ được theo dõi, được đưa vào thư mục tệp trong thư mục gốc của tập lệnh [bạn có thể xem cấu trúc tệp được tổ chức như thế nào trong tệp zip trình diễn]. PHP sau đó lặp qua tất cả các tệp và thêm từng tệp dưới dạng phần tử li riêng biệt vào danh sách không có thứ tự
thử nghiệm. php
- photoShoot-1.0.zip 0 download
Lưu ý thuộc tính href của siêu liên kết - nó chuyển tên của tệp dưới dạng tham số để tải xuống. php. Đây là nơi diễn ra quá trình theo dõi tải xuống, như bạn sẽ thấy trong giây lát
Bạn không bị giới hạn trong giao diện này để cung cấp tính năng theo dõi tải xuống - bạn chỉ cần đăng liên kết để tải xuống. php trong các bài đăng trên blog hoặc trang web của bạn và tất cả các bản tải xuống sẽ được theo dõi chính xác
'.$val.' '.[int]$file_downloads[$val].' download '; }Nó đơn giản như vậy - một vòng lặp foreach trên mảng $files_array và một câu lệnh echo in tất cả đánh dấu vào trang
Bây giờ, hãy xem xét kỹ hơn cách chính xác các bản tải xuống được theo dõi
Tải xuống. php
// Error reporting: error_reporting[E_ALL^E_NOTICE]; // Including the connection file: require['connect.php']; if[!$_GET['file']] error['Missing parameter!']; if[$_GET['file']{0}=='.'] error['Wrong file!']; if[file_exists[$directory.'/'.$_GET['file']]] { /* If the visitor is not a search engine, count the downoad: */ if[!is_bot[]] mysql_query[" INSERT INTO download_manager SET filename='".mysql_real_escape_string[$_GET['file']]."' ON DUPLICATE KEY UPDATE downloads=downloads+1"]; header["Location: ".$directory."/".$_GET['file']]; exit; } else error["This file does not exist!"]; /* Helper functions: */ function error[$str] { die[$str]; } function is_bot[] { /* This function will check whether the visitor is a search engine robot */ $botlist = array["Teoma", "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot", "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp", "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz", "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot", "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot", "Butterfly","Twitturls","Me.dium","Twiceler"]; foreach[$botlist as $bot] { if[strpos[$_SERVER['HTTP_USER_AGENT'],$bot]!==false] return true; // Is a bot } return false; // Not a bot }
Điều quan trọng là phải kiểm tra xem liệu khách truy cập có phải là robot của công cụ tìm kiếm đang quét các liên kết của bạn chứ không phải người thật hay không. Robot là một điều tốt vì chúng giúp bạn được đưa vào các dịch vụ như Google Tìm kiếm, nhưng trong tình huống như thế này, có thể làm sai lệch số liệu thống kê tải xuống của bạn. Đây là lý do tại sao hàng cơ sở dữ liệu chỉ được cập nhật sau khi khách truy cập vượt qua xác thực is_bot[]
Bước 4 - MySQL
Như đã đề cập ở bước trước, số lượt tải xuống được lưu dưới dạng một hàng trong bảng download_manager trong cơ sở dữ liệu MySQL của bạn. Trước tiên, hãy giải thích cách hoạt động của truy vấn cụ thể này
Tải xuống. php
INSERT INTO download_manager SET filename='filename.doc' ON DUPLICATE KEY UPDATE downloads=downloads+1
Nó yêu cầu MySQL chèn một hàng mới vào bảng download_manager và đặt trường tên tệp của hàng thành giá trị của tệp được yêu cầu để tải xuống. Tuy nhiên, trường tên tệp được định nghĩa là một chỉ mục duy nhất trong bảng. Điều này có nghĩa là một hàng chỉ có thể được chèn một lần, nếu không sẽ xảy ra lỗi khóa trùng lặp
Đây là nơi bắt đầu phần thứ hai của truy vấn - CẬP NHẬT KHÓA TRÊN DUPLICATE sẽ yêu cầu MySQL tăng cột tải xuống lên một nếu tệp đã tồn tại trong cơ sở dữ liệu
Bằng cách này, các tệp mới sẽ được tự động chèn vào cơ sở dữ liệu khi chúng được tải xuống lần đầu tiên
Bước 5 - jQuery
Để làm cho quá trình theo dõi tải xuống gần giống như thời gian thực, sẽ là một bổ sung thú vị để cập nhật bộ đếm bên cạnh tên tệp sau khi người dùng bắt đầu tải xuống. Nếu không, họ sẽ phải bắt đầu làm mới trang để số liệu thống kê mới cho bộ đếm được hiển thị
Chúng tôi sẽ đạt được điều này với một thủ thuật jQuery nhỏ
kịch bản. js
$[document].ready[function[]{ /* This code is executed after the DOM has been completely loaded */ $['ul.manager a'].click[function[]{ var countSpan = $['.download-count',this]; countSpan.text[ parseInt[countSpan.text[]]+1]; }]; }];
Chúng tôi chỉ gán một trình xử lý nhấp chuột cho các liên kết trỏ đến các tệp và mỗi khi một trong số chúng được nhấp vào, chúng tôi sẽ tăng số bên trong thẻ counter span
Bước 6 - htaccess
Còn một việc nữa chúng ta cần làm, trước khi chúng ta gọi nó là một ngày. tải gì. php làm là chuyển hướng khách truy cập đến tệp được yêu cầu đã được chuyển dưới dạng tham số. Tuy nhiên, bạn có thể nhận thấy rằng, đối với một số loại tệp nhất định, hành vi mặc định của trình duyệt là mở chúng trực tiếp. Thay vào đó, chúng tôi muốn bắt đầu tải xuống. Điều này đạt được với một vài dòng bên trong một. htaccess, được tìm thấy trong thư mục tệp
ForceType application/octet-stream
Với điều này, Bộ đếm tải xuống tệp của chúng tôi đã hoàn tất
Phần kết luận
Để chạy bản trình diễn trên máy chủ của riêng bạn, bạn sẽ cần tạo lại bảng download_manager trong cơ sở dữ liệu MySQL mà bạn có quyền truy cập. Bạn có thể tìm thấy mã SQL cần thiết sẽ tạo bảng cho bạn trong bảng. sql, mà bạn có thể tìm thấy trong kho lưu trữ tải xuống
Sau này, chỉ cần thêm chi tiết đăng nhập của bạn cho cơ sở dữ liệu [do máy chủ web của bạn cung cấp] vào cấu hình. php
Bạn nghĩ sao?
BootstrapStudio
Công cụ thiết kế web mang tính cách mạng để tạo các trang web và ứng dụng đáp ứng
Những bài viết liên quan
Ứng dụng đánh dấu trang đơn giản với PHP, JS & MySQL
CSS . PHP
Tạo Web Chat AJAX [Phần 1] - PHP và MySQL
PHP . MySQL
Tiện ích "Ai đang trực tuyến" với PHP, MySQL & jQuery
CSS . jQuery
AJAX-ed Todo List Với PHP, MySQL & jQuery
CSS . jQuery
Tính năng đề xuất ứng dụng w/ PHP, MySQL & jQuery
CSS . jQuery
Tạo một hệ thống đăng ký siêu đơn giản với PHP và MySQL
PHP . MySQL
Michael
bài viết tuyệt vời. tôi không biết về. thủ thuật htaccess. Tốt để biết. Bạn cũng có thể đăng cấu trúc bảng MySQL trong hướng dẫn không?
Martin Angelov
Cảm ơn bạn đã mang nó lên. Tôi đã thêm cấu trúc bảng vào Bước 4
giai điệu
ừm Martin Angelov bạn đến từ bulgaria?
djb
hướng dẫn rất tốt
gurza
Cảm ơn bạn cho hướng dẫn này. Nhưng tôi nghĩ có một vấn đề lớn trong phương pháp này
Khi tôi nhấn nút 'tải xuống', bộ đếm được tăng lên. Tôi có thể hủy tải xuống và nhấn 'tải xuống' lần nữa
Có thể giải pháp là thêm phiên kiểm tra. Bằng cách này, bạn chỉ có thể tăng bộ đếm trong một phiên. Bạn nghi gi?
Bloggerzbible
nó rất đẹp. Làm tốt lắm
thợ săn tay sai
Gurza. Mặc dù, jquery/javascript là phía máy khách, tập lệnh truy cập là phía máy chủ, vì vậy phương pháp này là chính xác. Việc bạn có nhấn hủy hay không là tùy thuộc vào máy khách, nhưng máy chủ vẫn sẽ phản hồi rằng đã xảy ra quá trình tải xuống đã cố gắng. Cách duy nhất để 'đếm hoàn thành' xảy ra là ứng dụng bên thứ 3/điều khiển x đang hoạt động. Máy chủ web sẽ không bao giờ biết liệu quá trình tải xuống phía máy khách đã hoàn tất hay chưa nếu không có ứng dụng phía máy khách. Nếu bạn đang tìm kiếm một giải pháp jquery/flash[active x] cung cấp tỷ lệ phần trăm tải xuống có gọi lại khi kết thúc, tôi khuyên bạn nên uploadify [ http. //www. tải lên. com/]. Việc triển khai trình quản lý tải xuống dựa trên phiên sẽ không thể xác định liệu quá trình tải xuống đã hoàn tất hay chưa
Martin Angelov
@ Gurza
@Taylor Hunt
Để có thể theo dõi thời điểm tải xuống hoàn tất phía máy chủ, bạn có thể tùy chọn đọc tệp và xuất hoàn toàn bằng PHP [với tiêu đề phù hợp] thay vì chuyển hướng trình duyệt
Bằng cách này, khi bạn đọc và xuất vài byte cuối cùng của tệp, bạn sẽ biết chắc chắn rằng máy khách đã tải xuống thành công và cập nhật bảng data_manager
Tuy nhiên, điều này nằm trên mức hướng dẫn và giải pháp hiện tại [có chuyển hướng] sẽ đủ cho hầu hết người dùng
gurza
@Taylor Hunt
@Martin Angelov
Có, phương pháp là chính xác và hướng dẫn này sẽ đủ cho hầu hết người dùng. Nhưng
Chúng ta có thể ghi vào biến phần khi người dùng bắt đầu tải xuống. Và kiểm tra biến này nếu quá trình tải xuống sẽ được bắt đầu lại
Daniel Bidmon
rất hay để sử dụng trong hệ thống cms tự tạo
Q
Hướng dẫn tuyệt vời, tôi chắc chắn sẽ sử dụng nó khi tôi đưa lên phần tải xuống trên trang web của mình
Fernando
Công việc tuyệt vời, hướng dẫn tuyệt vời cảm ơn bạn
denbagus
hướng dẫn tốt đẹp. Cảm ơn
Artur
Ótimo trabalho
Parabens hướng dẫn
Jason
THÍCH CÁI NÀY. Rất thích xem một cách để theo dõi xem ai đang tải xuống. Giống như cửa sổ bật lên hộp bóng tối hoặc trang trình bày ra hoặc xuống hỏi mọi người về những thông tin cơ bản như Tên, Email, Điện thoại. Tôi muốn theo dõi xem ai đang tải xuống các tệp của tôi để giải quyết các vấn đề về quyền và tín dụng
dù sao đi nữa, YÊU trang web, Yêu tất cả những thứ tuyệt vời mà tôi đang học. Cám ơn rất nhiều
jason
Ni-cô-la M
Hướng dẫn tuyệt vời, cảm ơn bạn
MadTogger
Hướng dẫn tuyệt vời, cảm ơn bạn
Tôi đã tìm kiếm trên Internet một Bộ đếm tải xuống phù hợp cho trang web Drupal của mình và điều này làm mọi thứ tôi cần.
Tôi đã thực hiện một vài thay đổi của riêng mình để làm cho nó phù hợp hơn với trang web của tôi, xem tại đây. -
www. người điên. đồng. uk/trang/phần mềm
vẫn đang trong giai đoạn đầu tùy chỉnh nó nhưng điều chính là xương trần hoạt động
Làm tốt lắm Martin, tôi thực sự đánh giá cao nó
Chúc mừng. ,
as_you_2007
hướng dẫn tốt. Một câu hỏi, nhiều lần chúng tôi không thực sự tải xuống tệp ngay cả khi chúng tôi nhấp vào liên kết tải xuống [chúng tôi hủy vì nhiều lý do sau đó], nhưng bạn đã thêm số lượng
[email được bảo vệ]
Hướng dẫn tuyệt vời và nó thực sự sẽ giúp tôi bắt đầu phần tải xuống trên trang web của mình
mrteetd
Tôi đã cài đặt tập lệnh này trên trang web của mình và tôi muốn thêm hiệu ứng di chuột qua để hiển thị mô tả tệp cho tên tệp trên máy chủ của tôi. Tôi đã thấy cách MadTogger thực hiện và nó trông khá ổn, nhưng để giảm thiểu dung lượng, tôi hy vọng ai đó có thể giúp tôi với hiệu ứng di chuột qua. Vì tên của tệp không thực sự có trong tệp php nên tôi khá khó sử dụng nó. Bất kỳ đề nghị tôi sẽ đánh giá cao. Nhân tiện, kịch bản tuyệt vời
tìm kiếm video
cảm ơn tôi có thể làm cái này để xem không ??
Hugo Richel
Xuất sắc. Một hướng dẫn tuyệt vời một lần nữa. theo kịp. D
kerron
Làm cách nào tôi có thể giới hạn nó để một người chỉ có thể tải xuống một lần cho mỗi tệp?
Brett Widmann
Đây là một hướng dẫn tuyệt vời. Cám ơn vì đã chia sẻ
cây thạch nam
@Jason
Rất thích xem một cách để theo dõi xem ai đang tải xuống
Đúng
Đây chính xác là truy vấn của tôi. Có lẽ chúng ta có thể cùng nhau tham gia và nhờ Martin làm việc đó [tôi chắc rằng có những người khác cũng sẽ quan tâm đến việc đó]
tự nhiên
hướng dẫn rất hay. Cảm ơn rất nhiều vì đã chia sẻ phương pháp với chúng tôi
Thomas
chào Martin. Cảm ơn cho hướng dẫn này. Nó giúp tôi với dự án khóa học của tôi trong học viện của tôi
Màn hình kết quả
http. //img. sxsoft. ru/v. php?id=1ea48da84222409421a92c8b1e68c5d5. png
tomcent
Cảm ơn bạn rất nhiều cho hướng dẫn này
Tôi đã sao chép các tệp vào trang web của mình [trích dẫn sở thích phi thương mại], chỉnh sửa bố cục của trang một chút [tiêu đề đã thay đổi, xóa liên kết "quay lại hướng dẫn", v.v.]
Nhưng ở phía dưới vẫn có một liên kết đến trang này như lời cảm ơn của tôi đến các bạn
Gửi email cho tôi nếu bạn muốn liên kết đến trang
tomcent
macvajal
Tôi muốn xem một cái gì đó, vì tôi có thể chia các bản tải xuống thành các thư mục, ý tôi là trong thư mục xuất hiện cấu hình. thư mục php $ = 'tệp',
Bây giờ tôi cần tải các tệp từ nhiều thư mục và chúng có thể được chia theo cách này
BRONES
Đó là một hướng dẫn tuyệt vời. tuyệt vời nó hoạt động cho trang web của tôi. Cảm ơn
Alx
Tôi chỉ có một câu hỏi về CSS. tôi muốn làm p. Liên hệ với chúng tôi ở cuối trang [nguyên trạng] mà không che các thành phần khác của trang khi tôi thay đổi kích thước trang tại trình duyệt của mình. Tôi đã cố gắng thay đổi phần tử vị trí nhưng toàn bộ phần không ở dưới cùng
Có giải pháp đơn giản nào không?
alex
Bất kỳ cách nào để đi sâu vào các thư mục. Vì vậy, nếu có một thư mục được liệt kê, tôi có thể nhấp vào nó và mở nó, sau đó tải xuống các tệp được liệt kê. ngay bây giờ nó nghĩ các thư mục là các tệp
Alex
hướng dẫn tuyệt vời. Cám ơn vì cái này
Nhưng câu hỏi của tôi sẽ là một cái gì đó như thế này
Bất cứ khi nào bạn nhấp vào nút tải xuống, bộ đếm sẽ tăng lên một. Tuy nhiên, có bất kỳ khả năng nào mà bộ đếm không tăng lên nếu bạn tải xuống tệp từ cùng một IP không?
Cảm ơn
Alex
Alex
Hoặc có thể để tích hợp một số biểu mẫu phản hồi để quá trình tải xuống chỉ hoạt động nếu phản hồi được gửi. D
nhiều nắng
công việc tốt đẹp. Cảm ơn
NICO
Tôi gặp vấn đề là nó không hoạt động khi cố tải xuống các tệp PDF
Tôi đã mất một thời gian để tìm ra, nhưng cuối cùng đã thay đổi
tập tin htaccess để
< tập tin. >
Ứng dụng ForceType/octet-stream
Bộ tiêu đề đính kèm Nội dung-Bố trí
đã làm công việc
NICO
nguyệt quế
CHÀO
Cám ơn vì cái này. Tôi không cập nhật bảng mặc dù bảng dường như được tạo chính xác và cơ sở dữ liệu đang được kết nối với [tôi cho rằng điều này vì tôi thấy lỗi nếu tôi cố tình thay đổi mật khẩu cơ sở dữ liệu không chính xác]
Nếu tôi truy cập tải xuống. php bằng trình duyệt web, nó thông báo tham số không chính xác, tôi không chắc liệu điều này có phải là sự cố hay đó là dự kiến?
jmv38
Martin, tôi muốn cảm ơn bạn rất nhiều. Tôi hầu như không biết gì về PHP, nhưng nhờ ví dụ tuyệt vời của bạn, tôi đã có thể từ iPad của mình để xây dựng một trang web theo dõi lượt tải xuống của người dùng của tôi. Trước đây tôi đã chia sẻ mã mà không biết có ai đang sử dụng nó không. Gói hướng dẫn và mã này rất dễ sử dụng. Cảm ơn một lần nữa
tháng tám
Tôi đang cố kết nối hệ thống bảng trượt Đăng nhập của bạn với trình quản lý tải xuống này. Có một số vấn đề nhưng tôi sẽ đến đó. Trang web của bạn và những thứ bạn đặt trên đó thật tuyệt vời. Cảm ơn rất nhiều
Aleš
Cảm ơn vì mã. Làm thế nào để bạn yêu cầu trang truy cập vào. htaccess bên trong thư mục tệp? . Cảm ơn