Cài đặt bộ đếm tải xuống - đánh giá các plugin cho WordPress. Tạo bộ đếm tải file bằng PHP và MySQL Bộ đếm tải file html

// Xóa chuyển đổi chế độ trích dẫn ma thuật $_POST["content"] = addedlashes($_POST["content"]);

// Viết lại nội dung của file file_put_contents($_POST["filename"], "$_POST");

4.9. Bộ đếm tải tập tin

Hoạt động của tất cả các bộ đếm tải xuống tệp dựa trên thực tế là khách truy cập không được cung cấp tệp dưới dạng liên kết tải xuống mà là liên kết đến tập lệnh tính đến việc tải xuống và gửi tệp đến trình duyệt của người dùng.

Chúng tôi sẽ xây dựng bộ đếm theo cách các liên kết tải xuống tệp là các liên kết đến trang hiện tại, chuyển tên tệp dưới dạng tham số, ví dụ: index.php?down=archive.zip . Tập lệnh sẽ kiểm tra xem tham số down có được chuyển hay không và nếu có, nó sẽ ghi nhật ký tải xuống kho lưu trữ trong filecount.txt. Khi trang được tải lại, các giá trị bộ đếm cho mỗi kho lưu trữ sẽ được trích xuất từ ​​tệp để xuất ra cửa sổ trình duyệt. Tệp sẽ được chuyển để tải xuống bằng cách gửi tiêu đề Vị trí HTTP cho khách truy cập chỉ ra đường dẫn đến kho lưu trữ đã tải xuống. Tập lệnh bộ đếm tải xuống tệp có thể trông giống như tập lệnh được hiển thị trong Liệt kê 4.31.

Liệt kê 4.31. Bộ đếm tải tập tin

// Đặt mức xử lý lỗi error_reporting(E_ALL & ~E_NOTICE);

// Đăng ký tên file trong một mảng

$file_name = array("archive1.zip","archive2.zip","archive3.zip");

// Tên file nơi số liệu thống kê được lưu trữ $countname = "filecount.txt";

// Nếu file tồn tại,

// đọc số liệu thống kê hiện tại vào một mảng if(file_exists($countname))

// Lấy nội dung của bộ đếm

$content = file_get_contents($countname);

// Giải nén mảng

$count = hủy tuần tự hóa($content);

// Nếu không có file đó, hãy tạo nó,

// và đặt lại số liệu thống kê

// Điền vào mảng $count các giá trị 0 foreach($file_name as $file)

$count[$file] = 0;

// Đóng gói mảng và đặt nó vào bộ đếm file_put_contents($countname, serialize($count));

// Kiểm tra xem giá trị của tham số down có được truyền hay không

// thông qua phương thức GET

if(isset($_GET["down"]))

// Kiểm tra xem giá trị của tham số $_GET["down"] có được bao gồm không

// vào mảng $file_name

if(in_array($_GET["down"],$file_name))

// Đăng ký sự thật rằng tập tin này đã được tải xuống

//Tăng giá trị của bộ đếm bằng phím

// $_GET["down"] một

$count[$_GET["xuống"]]++;

// Ghi đè file bộ đếm file_put_contents($countname, serialize($count));

echo "Tệp $file đã được tải ".intval($count[$file])." lần
";

Tên của các tệp đã tải xuống được lưu trữ trong mảng $file_name; việc thêm một kho lưu trữ mới sẽ dẫn đến việc đăng ký tự động của nó trong hệ thống. Việc đăng ký trước trong mảng là cần thiết vì nhiều lý do. Đầu tiên, khi chấp nhận một tên mảng thông qua tham số down, bạn cần kiểm tra xem nó có nằm trong số các file được phép tải hay không. Thứ hai, việc xử lý tên tệp trong một mảng sẽ thuận tiện hơn nhiều. Như vậy, mảng $count lưu trữ số lượng file tải về được xây dựng tự động dựa trên mảng file đã đăng ký trong hệ thống,

Thật thuận tiện khi đóng gói một mảng thành một chuỗi bằng cách sử dụng hàm serialize(), sau đó giải nén nó trở lại thành một mảng bằng hàm unserialize().

GHI CHÚ

Điều quan trọng cần nhớ là tất cả các tiêu đề HTTP phải được gửi trước khi gửi nội dung chính, nếu không chúng sẽ không được gửi và trình thông dịch PHP sẽ đưa ra cảnh báo "Cảnh báo: Không thể sửa đổi thông tin tiêu đề - các tiêu đề đã được gửi bởi"

(Cảnh báo: Không thể sửa đổi thông tin tiêu đề - tiêu đề đã được gửi). Điều này được quy định bởi giao thức HTTP: các tiêu đề được gửi trước, sau đó là nội dung của tài liệu, do đó, bất kỳ đầu ra nào tới cửa sổ trình duyệt đều được coi là kết thúc gửi tiêu đề và bắt đầu gửi nội dung của tài liệu. Nếu không thể tránh khỏi việc xuất ra cửa sổ trình duyệt trước khi các tiêu đề được gửi đi, bạn phải sử dụng các chức năng kiểm soát đầu ra, đặt tất cả đầu ra vào bộ đệm và gửi nó ở cuối tập lệnh.

Như bạn có thể thấy trong Liệt kê 4.31, tập lệnh xử lý tình huống trong lần chạy đầu tiên trong đó tệp filecount.txt bị thiếu - nó được tạo tự động trong lần tải trang đầu tiên, được kích hoạt bởi các giá trị 0 cho mỗi tệp trong mảng $file_name. Có thể thấy kết quả của tập lệnh từ Liệt kê 4.31 trong Hình. 4.4.

Cơm. 4.4. Kết quả của bộ đếm tập tin

4.10. Lưu tập tin văn bản và đồ họa

Việc nhấp vào liên kết tới tệp văn bản hoặc HTML sẽ khiến chúng được hiển thị trong cửa sổ trình duyệt, điều này không phải lúc nào cũng thuận tiện, đặc biệt nếu tệp được thiết kế để tải xuống. Số phận tương tự đang chờ đợi các tệp đồ họa và nói chung, bất kỳ tệp nào mà trình duyệt có thể hiển thị. Trình duyệt của khách truy cập "tìm hiểu" về nội dung của tệp từ máy chủ, vì mỗi tệp được kèm theo các tiêu đề HTTP thông báo cho khách hàng về nội dung, kích thước của tệp đã tải xuống, nhu cầu đặt cookie, v.v. không thể xác định loại tệp, nó được gửi đơn giản dưới dạng luồng nhị phân.

Bạn có thể ngăn chặn hành vi này bằng cách gửi các tiêu đề HTTP được hiển thị trong Liệt kê 4.32.

Liệt kê 4.32. Một tập lệnh cho phép bạn lưu các tập tin văn bản và đồ họa

$filename = basename($_GET["down"]); header("Bố trí nội dung: file đính kèm; filename=$filename"); header("Loại nội dung: ứng dụng/octet-stream"); header("Độ dài nội dung: ".filesize($_GET["down"]));

echo file_get_contents($_GET["down"]); ?>

Tập lệnh trong Liệt kê 4.32 lấy tên tệp làm tham số GET, ví dụ:

index.php?down=filetext.txt. Hàm basename() lấy tên

file (trong trường hợp tham số GET down chứa đường dẫn tới file). Tiêu đề HTTP Bố trí nội dung chỉ định tên của tệp sẽ được lưu, được xác định bởi thuộc tính tên tệp. Trong đoạn script trên, tham số tên tệp giống với tên của tệp được gửi, tuy nhiên, một tên tùy ý có thể được chuyển làm tham số tên tệp. Tiêu đề HTTP kiểu nội dung cho biết rằng dữ liệu được truyền là nhị phân và trình duyệt không nên giải thích. Tiêu đề HTTP có độ dài nội dung truyền tải kích thước của tệp tới máy khách. Dòng cuối cùng hiển thị nội dung tệp được truyền qua tham số $_GET["down"], được truy xuất bằng hàm file_get_contents(). Kết quả của tập lệnh từ Liệt kê 4.32 được hiển thị trong Hình. 4.5.

GHI CHÚ

Điều quan trọng là sau khi xuất nội dung của tệp, không có gì khác được xuất ra luồng: không phải bằng cấu trúc echo cũng như bằng đầu ra trực tiếp - nếu không mọi thứ sẽ được thêm vào cuối tệp. Điều này áp dụng cho cả khoảng trắng và dòng mới có thể có sau thẻ ?> kết thúc.

Cơm. 4.5. Hộp thoại tải file

Tôi quyết định xem một trong các tập lệnh của tôi được tải xuống từ trang web bao nhiêu lần. Để làm được điều này, tôi quyết định viết một bộ đếm tải file cho trang web. Có rất nhiều cách triển khai vấn đề này trên Internet, tuy nhiên, hãy xem giải pháp của tôi.

Logic đằng sau bộ đếm tải xuống khá đơn giản. Để triển khai nó, chúng tôi sẽ sử dụng ajax yêu thích của tôi. Chúng tôi đính kèm vào nút khi sự kiện clik xảy ra lệnh gọi qua ajax tới tệp php của bộ đếm. Trong php, yêu cầu ajax được xử lý và tổng số cuộc đua được ghi vào một tệp văn bản. Sau khi ghi thành công, phản hồi được trả về kèm theo tổng số lượt tải xuống và người dùng được chuyển hướng đến liên kết để tải xuống tệp (tệp được tải xuống). Đây là logic đơn giản, bây giờ chúng ta hãy bắt đầu thực hiện nó. Hãy tạo trước một tệp test.zip có thể tải xuống. Hãy mã hóa nút và hiển thị bộ đếm cuộc đua.

Tải file Số cuộc đua:

Chúng tôi đã tạo một nút với id="btnSend" , chúng tôi sẽ hiển thị bộ đếm trong một khoảng với id="countView" và chúng tôi sẽ lưu trữ một liên kết đến tệp đã tải xuống trong thuộc tính data-download

Bây giờ hãy đính kèm trình xử lý nhấp chuột vào nút. Ở đây chúng ta sẽ sử dụng js và jquery. Bạn có thể đọc về cách triển khai clik bằng jquery. Nhưng trước khi cài đặt trình xử lý nhấp chuột, chúng ta sẽ truy cập ajax vào tệp count.php, tệp này sẽ chứa tất cả công việc của bộ đếm. Bạn có thể đọc thêm về truyền dữ liệu ajax. Điều này là cần thiết để xuất ra từ tệp nơi bộ đếm ghi số lượt tải xuống đã được thực hiện và hiển thị chúng trong một khoảng với id="countView"

/*lấy số lượt tải xuống hiện tại*/ $(document).ready(function())( // cấm lưu vào bộ đệm của yêu cầu ajax // nếu không bộ đếm sẽ không thành công $.ajaxSetup((cache: false)); var html ; $.ajax (( //cách chúng tôi sẽ chuyển loại dữ liệu: "GET", // nơi chúng tôi sẽ chuyển url: "count.php", // dữ liệu nào chúng tôi sẽ chuyển dữ liệu: (flag: 2), // sự kiện sau khi nhận được phản hồi từ count.php thành công : function(data)( html=data; //hiển thị số lượt tải xuống hiện tại $("#countView").html(html); ) )); /*đính kèm một sự kiện vào nút tải xuống tệp*/ var clickevent=false; //nhấp cờ kiểm tra //click handler $("#btnSend").click(function())( if(!clickevent)( $.ajax(( //how chúng tôi sẽ chuyển kiểu dữ liệu: "GET", // nơi chúng tôi sẽ chuyển nó url: "count.php", // chúng tôi đang truyền dữ liệu gì: (flag: 1), //sự kiện trước khi gửi ajax beforeSend: function( ))( //nếu nút được bấm thì true clickevent=true; ), //sự kiện sau khi nhận được phản hồi, //nhận dữ liệu trong dữ liệu thành công: function(data)( //sau khi hoàn thành các hành động, chúng tôi cho phép nó một lần nữa // để xử lý việc nhấp chuột vào nút clickevent=false; html=dữ liệu; //hiển thị bộ đếm mới $("#countView").html(html); //lấy link từ data-download //chuyển hướng đến link tải, tải file window.location.href = $("#btnSend").data("download"); ) )); ) return false;//cấm xử lý sự kiện click )); ));

Để ngăn việc nhấn nhầm nút gửi lần nữa, tôi đã đưa cờ clickevent vào tập lệnh. Cho đến khi phản hồi từ count.php trả về với dữ liệu bộ đếm được cập nhật, việc nhấp vào nút sẽ bị cấm. Tôi nghĩ hoạt động của mã sau khi nhấp vào nút ít nhiều rõ ràng. Sau khi nhấp vào nút tải xuống, dữ liệu sẽ được chuyển đến tệp count.php, nơi dữ liệu được xử lý và cập nhật sẽ được trả về, chuyển hướng đến liên kết tải xuống sẽ xảy ra và theo đó, tệp sẽ được tải xuống.

Bây giờ chúng ta hãy xem trọng tâm của tập lệnh của chúng ta, cụ thể là tệp count.php.

Hàm clearInt ($date)( //giảm ngày thành số không âm return abs((int)$date); ) if($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest") ( //kiểm tra xem cờ nào là đã nhận if (clearInt($_GET["flag"]==1)) ( //mở tệp để đọc $f=fopen("mycount.txt","a+"); //đóng quyền truy cập vào tệp từ người khác các chương trình đàn($ f,LOCK_EX); //lấy giá trị bộ đếm từ tệp $count=fread($f,100); //thêm bộ đếm @$count++; //ghi đè lên tệp ftruncate($f,0) ; //viết một bộ đếm mới đọc fwrite ($f,$count); //đóng file fclose($f); //trả về giá trị echo $count; ) if(clearInt($_GET["flag"]= =2)) ( $c=fopen(" mycount.txt","a+"); đàn($c,LOCK_EX); $festc=fread($c,100); fclose($c); //trả về giá trị echo $festc; ) )

Ở đây tôi cũng nghĩ như vậy, mọi thứ đều đơn giản. Nếu cờ 1 xuất hiện thì chúng ta viết lại bộ đếm. Nếu cờ 2 xuất hiện thì dữ liệu về số lượt tải xuống sẽ được trả về đơn giản. Tôi nghĩ mọi thứ khác đều rõ ràng từ các nhận xét trong mã.

Bộ đếm tải xuống Joomla

Tôi quyết định gắn một bộ đếm tương tự vào một trong các dự án Joomla của tôi. Tất nhiên, về mặt lý thuyết, bạn cần phải viết một mô-đun riêng hoặc tích hợp mã vào bộ điều khiển của thành phần nội dung com, để dữ liệu bộ đếm được ghi không phải vào một tệp mà vào cơ sở dữ liệu và cho từng bài viết riêng biệt. Nhưng không có thời gian cho việc phát triển như vậy và tôi đã giải quyết vấn đề một cách đơn giản hơn. Tôi cần bộ đếm cho một trang. Tôi lấy tệp count.php và chuyển nó sang mẫu Joomla hiện đang được kết nối (trong thư mục gốc của mẫu trang/your_template). Đừng quên chèn mã được xác định ("_JEXEC") hoặc chết ở đầu count.php. (cái này dành cho Joomla). Chúng tôi chèn nút tải xuống vào trang chúng tôi tạo và mã js cũng có thể được nhúng vào trang hoặc được kết nối dưới dạng một tệp riêng biệt. Ví dụ: tôi có nó dưới dạng một tệp riêng biệt (nó nằm trong thư mục js của mẫu). Trong chính mẫu, trong tiêu đề, kết nối xảy ra thông qua mã

Do đó, yêu cầu nên được viết lại một chút để có cấu trúc chính xác để nhận dữ liệu được truyền. Bạn có thể đã đoán rằng chúng ta sẽ cần một điều kiện dựa trên biến được truyền quầy tính tiền.

Trên nhiều trang web, bạn có thể thấy các liên kết để tải xuống các tập tin. Ví dụ: các công ty sản xuất đăng hướng dẫn cho một sản phẩm cụ thể trên trang chính thức của họ. Ngoài ra, các nhà phát triển phần mềm cũng cung cấp tải xuống chương trình của họ miễn phí, do đó cho phép người dùng làm quen với các chức năng và hoạt động của nó.

Khi cung cấp một tệp để tải xuống miễn phí, điều quan trọng là phải biết tệp đó đã được tải xuống bao nhiêu lần. Trước hết, điều này là cần thiết đối với số liệu thống kê, việc phân tích số liệu này sẽ giúp xác định tính hữu ích của thông tin đối với người dùng cuối.

Làm cách nào để đặt bộ đếm tải xuống trên trang web WordPress?

Không có cách nào để xem những số liệu thống kê này trong số các công cụ WordPress. Do đó, chúng tôi sẽ sử dụng giải pháp của bên thứ ba - plugin Kama Click Counter.

Plugin Kama Click Counter

Plugin Kama Click Counter miễn phí cung cấp tất cả các công cụ cần thiết để đếm chính xác số lượt tải xuống của một tệp cụ thể. Vì vậy, trước tiên, nó cần phải được cài đặt và kích hoạt. Ví dụ: chúng tôi sẽ hiển thị trên trang bài đăng một liên kết đến tệp pdf để chúng tôi đếm số lượt tải xuống. Cần lưu ý rằng các tệp được tải lên trang web bằng các phương pháp Thư viện phương tiện WordPress tiêu chuẩn (Phương tiện -> Thêm mới). Tiếp theo, bạn cần mở bài viết hoặc trang để chỉnh sửa. Trong phần nội dung, bạn cần đặt con trỏ vào vị trí đặt liên kết đến tệp và nhấp vào nút xuất hiện trên thanh công cụ của trình soạn thảo trực quan.

Trong cửa sổ bật lên, plugin sẽ yêu cầu bạn chọn tệp đã tải xuống trước đó. Để thực hiện việc này, hãy nhấn nút có biểu tượng kính lúp.

Trong thư viện tệp phương tiện, chọn tệp mong muốn và nhấp vào nút Chọn tệp.

Do đó, một mã ngắn đặc biệt sẽ được chèn vào phần nội dung của bài đăng hoặc trang, dùng để hiển thị liên kết để tải xuống tệp.

Sau khi cập nhật tài liệu (nút Cập nhật), bạn có thể truy cập trang web để xem.

Plugin cũng có thể hiển thị số liệu thống kê tải xuống trong phần người dùng của trang web – trong một tiện ích. Lưu ý rằng theo mặc định, plugin không hiển thị con số cụ thể trong tiện ích về nội dung đã tải xuống và số lần tải xuống. Chỉ hiển thị danh sách các tệp được tải xuống thường xuyên nhất. Để thực hiện việc này, hãy đi tới phần quản trị Giao diện -> Tiện ích và kéo tiện ích KSS:Top Downloads đến vị trí mong muốn trong thanh bên.

Bạn có thể thấy tiện ích này có sẵn một số tùy chọn cho phép bạn sửa đổi danh sách.

Tại đây bạn có thể thiết lập các thông số cơ bản sau:

  • tiêu đề tiện ích (trường Tiêu đề);
  • số lượng tệp đầu ra trong danh sách (có bao nhiêu liên kết hiển thị?);
  • sắp xếp kết quả (sắp xếp kết quả như thế nào?);
  • tùy chỉnh giao diện của mẫu (Mẫu và khối CSS của mẫu).

Một tính năng đặc biệt của plugin là khả năng tùy chỉnh mẫu linh hoạt. Tại đây, bạn có thể sử dụng cái gọi là thẻ, thay vào đó thông tin này hoặc thông tin kia sẽ được hiển thị.

Sau khi hoàn tất và lưu tất cả cài đặt tiện ích (nút Lưu), bạn có thể xem kết quả trên trang web.