10/10/2018, 11:19

source code download file trong php

Xin chào..
mình đang cần làm 1 trang download trong php không biết bạn nào có không.. share cho mình với...
Tran Vu viết 13:27 ngày 10/10/2018
Hoặc bạn redirect đến link đó bằng js, bạn tham khảo bài viết này đi, hoặc google đi cái này đơn giản mà ...

http://www.ddth.com/showthread.php?t=128446
truong_nx viết 13:20 ngày 10/10/2018
Đây là 1 ví dụ đơn giản , cho phép dấu đi direct link và đồng thời ghi lại log file down load như số lượng download , IP download , link từ trang nào ..

<?php

define('ALLOWED_REFERRER', '');
// MUST end with slash (i.e. "/" )
define('BASE_DIR','/home/data/store/');

// log downloads? true/false
define('LOG_DOWNLOADS',true);

// log file name
define('LOG_FILE','downloads.log');

// Allowed extensions list in format 'extension' => 'mime type'
// If myme type is set to empty string then script will try to detect mime type
// itself, which would only work if you have Mimetype or Fileinfo extensions
// installed on server.
$allowed_ext = array (

// archives
'zip' => 'application/zip',

// documents
'pdf' => 'application/pdf',
'doc' => 'application/msword',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',

// executables
'exe' => 'application/octet-stream',

// images
'gif' => 'image/gif',
'png' => 'image/png',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',

// audio
'mp3' => 'audio/mpeg',
'wav' => 'audio/x-wav',

// video
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo'
);



################################################## ##################
### DO NOT CHANGE BELOW
################################################## ##################

// If hotlinking not allowed then make hackers think there are some server problems
if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
) {
die("Internal server error. Please contact system administrator.");
}

// Make sure program execution doesn't time out
// Set maximum script execution time in seconds (0 means no limit)
//set_time_limit(0);

if (!isset($_GET['f']) || empty($_GET['f'])) {
die("Please specify file name for download.");
}

// Get real file name.
// Remove any path info to avoid hacking by adding relative path, etc.
$fname = basename($_GET['f']);

// Check if the file exists
// Check in subfolders too
function find_file ($dirname, $fname, &$file_path) {

$dir = opendir($dirname);

while ($file = readdir($dir)) {
if (empty($file_path) && $file != '.' && $file != '..') {
if (is_dir($dirname.'/'.$file)) {
find_file($dirname.'/'.$file, $fname, $file_path);
}
else {
if (file_exists($dirname.'/'.$fname)) {
$file_path = $dirname.'/'.$fname;
return;
}
}
}
}

} // find_file

// get full file path (including subfolders)
$file_path = '';
find_file(BASE_DIR, $fname, $file_path);

if (!is_file($file_path)) {
die("File does not exist. Make sure you specified correct file name.");
}

// file size in bytes
$fsize = filesize($file_path);

// file extension
$fext = strtolower(substr(strrchr($fname,"."),1));

// check if allowed extension
if (!array_key_exists($fext, $allowed_ext)) {
die("Not allowed file type.");
}

// get mime type
if ($allowed_ext[$fext] == '') {
$mtype = '';
// mime type is not set, get from server settings
if (function_exists('mime_content_type')) {
$mtype = mime_content_type($file_path);
}
else if (function_exists('finfo_file')) {
$finfo = finfo_open(FILEINFO_MIME); // return mime type
$mtype = finfo_file($finfo, $file_path);
finfo_close($finfo);
}
if ($mtype == '') {
$mtype = "application/force-download";
}
}
else {
// get mime type defined by admin
$mtype = $allowed_ext[$fext];
}

// Browser will try to save file with this filename, regardless original filename.
// You can override it if needed.

if (!isset($_GET['fc']) || empty($_GET['fc'])) {
$asfname = $fname;
}
else {
// remove some bad chars
$asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']);
if ($asfname === '') $asfname = 'NoName';
}

// set headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename=\"$asfname\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);

// download
// @readfile($file_path);
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}

// log downloads
if (!LOG_DOWNLOADS) die();
//////////////////////////////////
//Display count
$filename = "count.txt";
$handle = fopen($filename, "r");
$count = fread($handle, filesize($filename));
fclose($handle);

$count = $count + 1;
//echo "So luong download : " .$count ."<br>" ;
$handle= fopen($filename, "w");
fwrite($handle, $count);
fclose($handle);

/////////////////////////////////
$f = @fopen(LOG_FILE, 'a+');
if ($f) {
@fputs($f,$count." ". date("m.d.Y g:ia")." ".$_SERVER['REMOTE_ADDR']. " ".$_SERVER['HTTP_REFERER']." ".$fname."\n");
@fclose($f);
}

?>

Chú ý bạn nên tạo 1 file count.txt để lưu số lượng down load đặt cùng thư mục với file download này

New c.rack cho BkavPro http://bkav.plus.vn
BossFTP viết 13:29 ngày 10/10/2018
Được gửi bởi neo063
Xin chào..
mình đang cần làm 1 trang download trong php không biết bạn nào có không.. share cho mình với...
Ko rõ ý bạn lắm

Thử cái này xem http://oxyz.info/indexof
sin216 viết 13:36 ngày 10/10/2018
a` bạn ơi cho mình hỏi cái này nhe
đoạn code đếm số lượt download của bạn có hiệu quả khi người dùng download bằng IDM không vậy. Mình cũng viết một code tương tự, nhưng thay vì lưu vào file txt thì mình cho nó lưu trực tiếp vào CSDL luôn. Rắc rối là nếu người dùng tải file bằng browser thì nó đếm chính xác, còn khi tải file bằng IDM thì nó lại không chính xác.
Mình test đi, test lại nhiều lần thì phát hiện ra là khi clickvào nút download, trình duyệt sẽ gọi trình download của nó trước (lúc này biến đếm số lần download sẽ tăng lên 1), nếu trên máy có IDM trình duyệt sẽ tự động chuyển sang download bằng IDM, IDM được gọi lại (lúc này biến đếm lượt download lại tăng lên 1). Khi bấm Start download thì biến đếm lại tiếp tục tăng lên 1 nữa . Kết quả là nó đếm không chính xác . Các pro giúp mình với nhe
tesulakata viết 13:20 ngày 10/10/2018
------------ ko hiểu code php kia cho lắm
tuanta200 viết 13:29 ngày 10/10/2018
Thanks bác để tí em test đến cty em test na
thanhaba viết 13:35 ngày 10/10/2018
hix, sao file dơn về ko đọc dc nhỉ
langthanghanoi viết 13:24 ngày 10/10/2018
Trong các hàm php, mình thấy hàm copy() cũng hay đó. Bạn sử dụng hàm này để upload được 100M đấy. Thử coi!
Bài liên quan
0