我想制作一个强制下载文件,用于从服务器下载文件,并在数据库中保存网址,我也不想向客户显示下载链接,我知道可以隐藏链接htaccess但我想限制我的链接仅适用于为每个链接支付费用的客户。
我使用php header()函数来完成我的目标,但问题与我在脚本下面的mime类型有关,而我不想为每个url定义mime类型(基于文件类型和扩展名) )在数组或类似的东西,因为我的文件中有各种各样的文件类型,我想与我的用户共享这些文件,我不能单独为每种文件类型定义一个mime类型
我需要一个很好的函数来从文件名(自动)获取mime类型,如mime_content_type(),但它与php扩展相关,我无法访问我的共享中的php.ini主机以及此功能已弃用。
以下代码与mp3和zip文件等扩展程序兼容,但通过此脚本下载的mp4文件已损坏且无法在媒体播放器中播放
php code:
<?php
require 'includes/connection.php';
$connection=newconnection();
if(isset($_GET['fileid']) && is_numeric($_GET['fileid'])){
$file_id=input_security($_GET['fileid']);
$linkque=mysqli_query($connection,"SELECT * FROM download_segments WHERE ds_id='".$file_id."'");
$checkexist=mysqli_num_rows($linkque);
$f_row=mysqli_fetch_array($linkque);
if($checkexist==0){
echo 'Invalid file id';
}else if($checkexist>=1 && $f_row['payment_model']=="free"){
$path=$f_row['url'];
$sep_parts = pathinfo($path);
$file_name = $sep_parts['basename'];
$file_ext = $sep_parts['extension'];
if (file_exists($path)) {
$mimetypes = array(
"avi" => "video/x-msvideo",
"exe" => "application/octet-stream",
"mp4" => "video/mp4",
"zip" => "application/zip",
"mp3" => "audio/mpeg",
"mpg" => "video/mpeg"
);
$mimedefault = "video/mp4";
$mtype=isset($mimetypes[$file_ext]) ? $mimetypes[$file_ext] : $mimedefault;
header('Content-Description: File Transfer');
header("Content-Type: " . $mtype);
header('Content-Disposition: attachment; filename="'.basename($path).'"');
//header('Content-Length: ' . filesize($path) );
//header("Pragma: no-cache");
//header('Expires: 0');
//header('Cache-Control: must-revalidate');
//header('Pragma: public');
readfile($path);
exit;
}else{
echo 'not exist';
}
}
}
?>