<?php
error_reporting(0);
header('Content-type:text/json');
//只要苹果cms采集有官方链接 资源站弹幕就会匹配
//使用教程设置好 苹果cms数据库 就可以 远程数据库也行
//BY: 小云
$api = "https://dm.jlzj.xyz/dmku/?ac=dm&url="; //弹幕接口
$ml = "dm/dm/"; //目录
if (!file_exists($ml)) {
if (mkdir($ml, 0777, true)) {
}
}
$jm = $_GET["url"];
if(strstr($jm,"index.m3u8")){
if(empty($jm) == true) {
$data['code'] = 201;
$data['调用ip'] = $userip;
$data['msg'] = '缺少参数';
exit(json_encode($data, 456));
}
$file = $ml . md5($jm) . '.m3u8';
if (file_exists($file) == true) {
$url = file_get_contents($file);
// $data['code'] = 200;
// $data['url'] = $url;
// $data['yurl'] = $jm;
// exit(json_encode($data, 456));
header('cache-control:public');
header('Access-Control-Allow-Origin:*');
header('content-type:application/octet-stream;');
header("Location: $api$url");
exit();
}
//$servername = "99.885.82.65:3306"; //远程服务器ip
$servername = "localhost";//本地服务器
$username = "";//服务器账号
$dbname = "";//服务器账号
$password = "";//服务器密码
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * FROM `mac_vod` WHERE `vod_play_url` LIKE '%$jm%'";
$result = mysqli_query($conn, $sql);
if (!$result) {
die("Query failed: " . mysqli_error($conn));
}
while ($row = mysqli_fetch_assoc($result)) {
// echo $row["vod_play_url"];
mysqli_close($conn);
if(strstr($row["vod_play_url"],"qq.com") == true || strstr($row["vod_play_url"],"iqiyi.com") == true || strstr($row["vod_play_url"],"youku.com") == true || strstr($row["vod_play_url"],"mgtv.com") == true || strstr($row["vod_play_url"],"bilibili.com") == true) {
$str = $row["vod_play_url"];
$array = explode('$$$', $str);
$pattern = '/qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com/';
foreach ($array as $key1 => $value) {
if (preg_match($pattern, $value)) {
// echo "匹配键名:$key1\n";/////////////
$count = count(array_filter($array));
if ($count > 1) {
//$array = $array[2];
foreach ($array as $key => $value) {
if (strpos($value, $jm) !== false) { // 查找包含“香”的值
$array1 = explode('#', $array[$key]);
// 步骤1:直接查找索引
//$index = array_search('https://v.cdnlz3.com/20250219/33896_74eb80a8/index.m3u8', $array1);
foreach ($array1 as $key => $value) {
if (strpos($value, $jm) !== false) { // 查找包含“香”的值
$array2 = explode('#', $array[$key1]);
$position = strpos($array2[$key], '$');
if ($position !== false) {
$url = substr($array2[$key], $position + 1);
//echo $array2[$key];
//echo $rightPart;
file_put_contents($file,$url);
// $data['code'] = 200;
// $data['url'] = $url;
// $data['yurl'] = $jm;
// echo json_encode($data,456);
header('cache-control:public');
header('Access-Control-Allow-Origin:*');
header('content-type:application/octet-stream;');
header("Location: $api$url");
exit();
}
}
}
}
}
}
}
}
}
}
}
header('cache-control:public');
header('Access-Control-Allow-Origin:*');
header('content-type:application/octet-stream;');
header("Location: $api$jm");
exit();
?>
以下是对该PHP脚本的详细使用说明,包含部署步骤、配置要点及安全建议:
一、功能说明
这是一个苹果CMS视频弹幕匹配接口,核心功能:
- 根据视频URL匹配官方源地址(腾讯/爱奇艺等)
- 缓存解析结果提升性能
- 对接第三方弹幕接口
二、部署流程
1. 环境准备
# 安装PHP+MySQL环境(以Ubuntu为例) sudo apt install php mysql-server php-mysql chmod -R 755 /var/www/html/ # 确保缓存目录可写
2. 文件部署
# 创建项目目录 mkdir -p /var/www/html/dmapi/ # 上传脚本并重命名 mv your_script.php /var/www/html/dmapi/index.php
3. 数据库配置
// 修改脚本中的数据库连接部分 $servername = "localhost"; // 远程数据库填IP:端口 $username = "cms_user"; // 数据库用户名 $password = "SecurePass123!"; // 数据库密码 $dbname = "apple_cms_db"; // 数据库名称
三、使用方法
1. 基础调用
GET /dmapi/?url=https://example.com/video/index.m3u8
2. 参数说明
参数 | 必填 | 示例值 | 说明 |
---|---|---|---|
url | 是 | 视频m3u8地址 | 需要带index.m3u8后缀 |
3. 响应处理
- 匹配成功:302重定向到弹幕接口
- 未匹配:直接转发原始URL到弹幕接口
- 错误响应示例:
{ "code": 201, "调用ip": "192.168.1.1", "msg": "缺少参数" }
四、安全加固建议
1. 防御SQL注入
// 修改查询部分为预处理语句 $stmt = $conn->prepare("SELECT * FROM mac_vod WHERE vod_play_url LIKE ?"); $search_term = "%" . $jm . "%"; $stmt->bind_param("s", $search_term); $stmt->execute();
2. 目录权限优化
# 限制缓存目录权限 chown www-data:www-data dm/dm/ chmod 750 dm/dm/
3. 输入验证
// 添加URL格式验证 if(!preg_match('/^https?:\/\/.*index\.m3u8$/', $jm)){ http_response_code(400); exit("Invalid URL format"); }
五、调试技巧
1. 日志记录
phpCopy Code
// 在关键位置添加日志
file_put_contents('debug.log', date('[Y-m-d H:i:s]')." Processing: $jm\n", FILE_APPEND);
2. 错误排查流程
graph TD A[请求无响应] --> B{检查错误日志} B -->|连接失败| C[验证数据库配置] B -->|查询为空| D[检查vod_play_url字段] B -->|权限问题| E[检查目录权限]
3. 性能优化建议
- 添加缓存过期机制
// 在文件存在检查处添加时间判断 if (file_exists($file) && time()-filemtime($file) < 3600) { // 使用缓存 }
- 建立数据库索引
ALTER TABLE mac_vod ADD INDEX idx_vodurl (vod_play_url(255));
六、典型应用场景
1. 播放器集成示例
<video controls> <source src="/dmapi/?url=<?=%20$videoUrl%20?>" type="application/x-mpegURL"> </video>
2. 弹幕显示效果
// 使用第三方弹幕库 const dmPlayer = new DanmakuPlayer({ url: '/dmapi/?url=' + encodeURIComponent(videoUrl) });
该脚本需配合苹果CMS的数据库结构使用,核心是通过解析vod_play_url字段中的多源地址配置,实现官方视频源的精准匹配。建议在测试环境充分验证后再部署到生产环境。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容