文章摘要
文章介绍了一个视频库系统,通过对接第三方视频链接,而不是本地存储完整视频文件,来节省主机空间。系统通过list.php脚本随机显示一个视频文件名,并根据文件名拼接第三方视频URL进行播放。data.txt文件存储所有视频文件名。文章还提供日志记录代码,可记录观看者的IP、时间、用户代理等信息,用于访问追踪和优化系统。
— 文章部分摘要由DeepSeek深度思考而成
因主机空间容量不足,更新了下代码,视频库直接对接三方的地址,本地仅存储视频列表信息即可,可自行采集视频过滤广告!
调用代码:
<video style="display: block;
width: 100%;
max-width: 430px;
margin: auto;
border-radius: 12px;" autoplay="" muted="" onended="this.src='https://www.ximi.me/video/list.php'" src="https://www.ximi.me/video/list.php">
</video>
搭建代码:
1.list.php
<?php
list.php
// 检查请求是否来自浏览器
$browserUserAgents = ['Mozilla', 'Chrome', 'Safari', 'Opera', 'Edge', 'Firefox'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$isBrowser = false;
foreach ($browserUserAgents as $browser) {
if (strpos($userAgent, $browser) !== false) {
$isBrowser = true;
break;
}
}
if (!$isBrowser) {
header('HTTP/1.1 403 Forbidden');
die('禁止非浏览器访问!');
}
// 视频文件名所在的文本文件路径
$dataFilePath = __DIR__ . '/data.txt';
// 检查data.txt文件是否存在且可读
if (!file_exists($dataFilePath) || !is_readable($dataFilePath)) {
http_response_code(500);
echo "data.txt 文件不存在或不可读。";
exit();
}
// 读取data.txt文件的所有行到一个数组中
$videoFileLines = file($dataFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 检查是否有视频文件名行
if (empty($videoFileLines)) {
http_response_code(404);
echo "data.txt 文件中没有视频文件名。";
exit();
}
// 随机选择一行(即一个视频文件名)
$randomLineIndex = array_rand($videoFileLines);
$videoFileName = $videoFileLines[$randomLineIndex];
// 假设视频文件存储在某个固定的URL路径下,这里只是拼接文件名
$videoUrlBase = "https://videos.xxapi.cn/";
$videoUrl = $videoUrlBase . $videoFileName;
// 重定向到视频文件的URL
header("Location: $videoUrl");
exit(); // 确保重定向后脚本停止执行
?>
2.data.txt
007d6303b2cc7a21.mp4
00e5dd4aba474201.mp4
027b5be166530aad.mp4
02d9070f4a1b7425.mp4
033d71e9b4f7ebc1.mp4
0392495cca8a3621.mp4
039c6490ca5bb33e.mp4
044c92f740fdc837.mp4
046dce0b1afd5682.mp4
04f3df95dcf90eaa.mp4
0519df895453f627.mp4
051dc1596ced6811.mp4
07f13e1fdd2eea39.mp4
0899e29f1be4e7b0.mp4
09452c58e6ba8d4a.mp4
09655ef318decbbb.mp4
0976562d28d8999c.mp4
09aadb36a6c09eab.mp4
0a1acc8bb1ba9d86.mp4
0a2fcf40e17c89c3.mp4
0a37e1eb9563ecf0.mp4
0ac7687308269582.mp4
0d13f467b37c72bd.mp4
0d20619c5f04e9ad.mp4
0e96be1d89420d85.mp4
0efa2bb67337018a.mp4
10b12b5b638e547b.mp4
11219f92f3b89292.mp4
12890cb5877f663f.mp4
133045dc377e0989.mp4
14778564ecf77e5c.mp4
149961e7cd52d65e.mp4
171c2ae5fdf9dd62.mp4
178f84802d078975.mp4
18177a3fbd22ad92.mp4
182d4860764f12c3.mp4
18814d27efa38d8b.mp4
1997273f58e0144a.mp4
19e36b1c4ac8b063.mp4
19efd0b4d77e9473.mp4
1af8f779c037d11e.mp4
1ca823bda2ca661c.mp4
1d9db189db696275.mp4
1e6dea4dbb1315a5.mp4
1ecb0a74ac507b36.mp4
2191493c30a604ca.mp4
2243ee81b3f3fff7.mp4
22c3dbbe3ac07975.mp4
22d0f330754cf678.mp4
236c2eb47017879f.mp4
2501b3c6c8aa0f83.mp4
25f9e6e37399749e.mp4
2623ddd25527e43f.mp4
26c754320e2d67c1.mp4
279c50d2996b309c.mp4
27fae8d4f158843b.mp4
29f05f2f9cc2d262.mp4
2a6d04d1f2b90704.mp4
2b3308991b7a5050.mp4
2c8e39e5ec0a6d64.mp4
2d4a5a8b9a60ac5d.mp4
2e9f03bc0a4b2273.mp4
3295a48206704a4a.mp4
32a35be1b66c5084.mp4
32b48d7bf2d5be5b.mp4
33247c08dd7b4b07.mp4
35b3c6cb577be1e3.mp4
35c489f858d640f8.mp4
35edb2d9b3a26c67.mp4
36c5738389a27118.mp4
375683435615fda0.mp4
376af3d921bc2051.mp4
38426ce29760aa15.mp4
3882e505062669d1.mp4
38a24224bafd8cd5.mp4
39ade31bf4cea2ab.mp4
3a56f75c0602cec0.mp4
3a92f8b203db8392.mp4
3b63925cfb8643ea.mp4
3c077e9e90d39ce1.mp4
3c7e57a5edaf0b00.mp4
3db5dd98d9162440.mp4
3e5926b2f102e19e.mp4
3f0c12dbe5f2afcd.mp4
3ff081ae6f11cd21.mp4
401f853ddf6e3c46.mp4
40c4f18f17ff7630.mp4
423fd578510c2122.mp4
42516a92fe686eb2.mp4
42516a92fe686eb2.mp4
437e8bcde53ace99.mp4
4439c750b05179ca.mp4
444f52cffe6684ee.mp4
45e2650310d27f8c.mp4
462b994582c91016.mp4
4870e73c3fa03d58.mp4
495f88aa3a12fca6.mp4
49887552db8185ac.mp4
4a0f7d9d5dade957.mp4
4a38ac1ec00caaa4.mp4
4b162c323fff946a.mp4
4bc83beba898830f.mp4
4c2577976febbed5.mp4
4c4cdefda6d73a51.mp4
4e4e9c9f75d37315.mp4
4e60abfba5c4fb84.mp4
4e78880cd0af66dd.mp4
4f26845f1d1f6f26.mp4
4fe600163cd1d924.mp4
502b00c7db73d470.mp4
506a97014c96cc41.mp4
50faa01f3e555360.mp4
5108414cfdcf4346.mp4
51824d6229b844fb.mp4
538979ce7c825134.mp4
53bb3a327c9b4768.mp4
53d339f106a41fbd.mp4
549fa38e53762eeb.mp4
555bff39917eca21.mp4
574e985d60ce714a.mp4
580060d44a18eb99.mp4
581e2b4618181ee2.mp4
58892ccec228d1e1.mp4
588ad4858928fa6f.mp4
59b321ec394968ba.mp4
5b8015b82bae5dab.mp4
5ba49170c93ae107.mp4
5ba68a9769a1ac6a.mp4
5bb4f308876df84f.mp4
5c61de00c15f74c2.mp4
5cb8579455bc5ea9.mp4
5d09aa7a4217217e.mp4
5f69f5aa2fdcf09e.mp4
60fe07570ca97136.mp4
611d61413e920a84.mp4
62b637f068cb180a.mp4
63585e1138a76243.mp4
63b7f043f86258a6.mp4
64a1ed00b47bd252.mp4
66feefc40936ed98.mp4
6715b15f0f44a08f.mp4
67c10ad6fcbe512c.mp4
68110a13985eaff5.mp4
689a7d9351d434ba.mp4
68adf1633c35f6da.mp4
68f169dd1e12c3c5.mp4
6914b9b2953c2953.mp4
6a0182cdc0c7ffad.mp4
6a20cfdbbf2bf95e.mp4
6a6691d0fc0d7c5d.mp4
6a81055d37b9c2e5.mp4
6acf5d40e3ee3995.mp4
6c5a86ec3a1bbc93.mp4
6cf86036ccf8423e.mp4
6ece18d2f3ffefb9.mp4
70c2096c7d51b53b.mp4
71a7194b4a074293.mp4
720c5e03ac678c91.mp4
7313d3abbb916cec.mp4
750652f313382008.mp4
782db43289bbeb2d.mp4
78ab1c18c6637b5d.mp4
792b62f2f70cd6cc.mp4
7996ad543d3f8269.mp4
7b6a9a9e8a4cc8c8.mp4
7b6be4abecf6255f.mp4
7c92a4c372e25ad8.mp4
7ca0b69dc4946be3.mp4
7cce2713106aefae.mp4
7d9966cdb81bb862.mp4
7e4d6870284b03f7.mp4
7e4f3180417d408c.mp4
7f0a9228abafae7a.mp4
7f417529869937ee.mp4
7fa431ac9fa98f61.mp4
811214300e60147d.mp4
813990ef3e51fc4e.mp4
82bf1dd14f6226e6.mp4
82dc378728e76371.mp4
82ff40111fa2ef41.mp4
83bafd9ae996f2d6.mp4
84173315716f5861.mp4
84c2f2a67db84361.mp4
854344cc402525f3.mp4
85a057b714add3d7.mp4
86e6d42d414a0cd1.mp4
8715504c710a2bc2.mp4
88e34aa0b2e33048.mp4
88efb70d91bc5d8d.mp4
895911a8053fbdb8.mp4
8962144266a83858.mp4
89837e343a3ec355.mp4
8b6b1b0d9fae99d8.mp4
8c6a25c052e7a29c.mp4
8cd9a223099445b3.mp4
8cfdf6d7bf37d718.mp4
8dad7176679ab6fa.mp4
8daf805c922a40c8.mp4
8ddfdf873adb8e56.mp4
8e085c65ce1cb3f6.mp4
8e3eea47cc832c1e.mp4
911b565e1bdb0d7a.mp4
929c136f42d84c2e.mp4
93c1625249b7b449.mp4
9460ebf166bd54d3.mp4
966af4d9bd5e2e07.mp4
971691a788f00777.mp4
97ea3ca00e8c48a4.mp4
99c0755c3348505d.mp4
9a8af5466390e06f.mp4
9ac398b93a4c3628.mp4
9b52e458b9399968.mp4
9c8703ae30cd15b7.mp4
9ccc3c19c93f51e0.mp4
9ee9fda693934369.mp4
9eeb14ea748906ec.mp4
9f41a80d0a6d7443.mp4
a02e9dc54dc44ccc.mp4
a12e1e3d73acae10.mp4
a2454126f4f56039.mp4
a2a944080936675c.mp4
a31c507d40994d60.mp4
a44d843312acd140.mp4
a5129c0e3aee02ac.mp4
a59fd055be0926c9.mp4
a5f6555a9714d80f.mp4
a5ff30148bf43a10.mp4
a775d1bb67766401.mp4
a8cc50e767131729.mp4
a99fd86474b01156.mp4
a9ef2fd99fbfb35e.mp4
aac116ae95a45361.mp4
aaf619aee0652839.mp4
ac7fdafe2fa2f9d4.mp4
acd0f8354a360465.mp4
add184f127fc9c49.mp4
adf723105d8507ee.mp4
ae0dea902f429550.mp4
ae7919ef4eccaeb1.mp4
ae80aa407ced326c.mp4
ae95fd56911d6001.mp4
af283f12fd8d6879.mp4
b1055a6aae26c6a3.mp4
b160bd4d5310fdc0.mp4
b20f2d8a8db15b81.mp4
b26c28e605317e63.mp4
b27ec0011d49ed78.mp4
b2c3aa947fe48815.mp4
b301f5003f663cd3.mp4
b30eaeadec947800.mp4
b36fea18a1edeff9.mp4
b5ef7ce6d01e9c4b.mp4
b6440a6f8333ec16.mp4
b6f813be7b1f64fa.mp4
b799ce7d35a5655b.mp4
b82c625ebd57bfbe.mp4
b852ae2cac3fc448.mp4
b8c717db0e2eb95d.mp4
b8ce6ad7477009ca.mp4
b932763774ba39c5.mp4
b94468da1002a6ae.mp4
b9ccbac6c146dec8.mp4
ba8cfde338b38f5a.mp4
bad4c326509dc010.mp4
bc1d0af6c138b044.mp4
bc34988ed6a63fd4.mp4
bcb97c7a946ff462.mp4
bcd07667cf0d8017.mp4
bf901b42e5a2505f.mp4
bf9f4b0fcb52fd34.mp4
bfd8dee9bb6097c2.mp4
c0d8627c42ea1fa8.mp4
c12399ba9ed6fd8b.mp4
c20804eed7cf832c.mp4
c28ece718d6ba2c2.mp4
c29441c0d6468545.mp4
c2a71dd63822a58b.mp4
c2fa73f35ff01482.mp4
c3ded9fbcae084ed.mp4
c44757d7197d4524.mp4
c647e41310585b24.mp4
c68cf3ac4a4eb1c4.mp4
c6fb781ba86c1e0f.mp4
c7db1e9ed6896253.mp4
c958b2dd04a4acf5.mp4
c9f60ba297bd852c.mp4
ca01b434653598d1.mp4
cb768a962632d130.mp4
cc2e0e292e4f3098.mp4
cc94508e461815dd.mp4
ce5eb46aae163d98.mp4
ce6535d70893c8d1.mp4
ceb353dd6e1cd8f5.mp4
cebf78c8d3619011.mp4
ceef982a38f86e01.mp4
d1889abc08e1466e.mp4
d1e38b51db387653.mp4
d513094ec6fef009.mp4
d7ea978a38b92b24.mp4
d877df44826a21ba.mp4
da4fd737d979e5d3.mp4
da6e4e10aab65d38.mp4
dab377b9b06fb0ec.mp4
db06f1c660278d73.mp4
dcad0db8318b819c.mp4
dcdc4b9e1cd97dac.mp4
dce9dc7b5e0641f5.mp4
dcede048c44e5f74.mp4
dd47330cf2ffe6ed.mp4
ddad1b093d6e2eb2.mp4
de2df45fdf4b86ed.mp4
de49183554dd6835.mp4
df24b480cf8e2111.mp4
df40602dfd51c695.mp4
df6f67d8a21e4e63.mp4
dfc2b90f27ef4b14.mp4
dff3bd374923ec2d.mp4
e011f43f386d11e6.mp4
e1416f688c817b09.mp4
e4e8dfabd9ded4d5.mp4
e5f2113e8f4c3fb2.mp4
e5f2113e8f4c3fb2.mp4
e6f03f70b7e81ef1.mp4
e727f534b5acc2b2.mp4
e821c6bc577acf3f.mp4
e9051e770ee575e3.mp4
e92f9bf83b48b497.mp4
eaf270377335a0bf.mp4
eb125170d8879a78.mp4
ec4219ce25e48c9f.mp4
ec9baf1cf99116a0.mp4
ed2b20a625acd20d.mp4
eda6c15d32245e57.mp4
ef9190d3bfee8ac0.mp4
f003ecd37eebd0fa.mp4
f0850bc76d08251d.mp4
f0f77d93baa318a6.mp4
f1b000f4db665cf2.mp4
f22c5b7783cf5178.mp4
f22c65de46b9c10d.mp4
f49d6168d1cfd272.mp4
f7fd1a6922e8c0c0.mp4
f8b4668dbf1e635a.mp4
f952b6a17a5b13e4.mp4
fa8902012e9b616d.mp4
fc2a2ed3d5357626.mp4
fcaca402b571464c.mp4
fe36fca3dec8f2e3.mp4
0e58fa1c17c2ca0e.mp4
1acd235a62f01dc2.mp4
2e24a67db0d13973.mp4
318b5426aaf3c597.mp4
32a82b11c10bd3e2.mp4
447e0ed2b12027bf.mp4
48744c5e991a06d7.mp4
49ed0226903e3358.mp4
4e11b4226462562b.mp4
536e7d28af95f835.mp4
56184c98aa1522ef.mp4
59061d25f3f78076.mp4
5f7fb8a377318f4a.mp4
6e6b165a6e50554c.mp4
790b3d382ee6eaaf.mp4
7ac1690b79aff624.mp4
929c136f42d84c2e.mp4
9fcc4add719052a9.mp4
a9490ecb1a2a9df2.mp4
dddc426bdfd5e064.mp4
e438d2f5f9ee9c1a.mp4
ef2a2c7462733ad3.mp4
f2758ad7045dff75.mp4
f276b4d23f89408d.mp4
f6a41e92463ae4b0.mp4
f8ceefb8ba81d8de.mp4
fd53d889110c72e3.mp4
日志记录可以用这段代码,添加进输入视频的前一行
//================================= 日志记录==================================================
// 获取客户端IP地址的函数
function getClientIP() {
$keys = array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR');
foreach ($keys as $key) {
if (array_key_exists($key, $_SERVER)) {
if (filter_var($_SERVER[$key], FILTER_VALIDATE_IP)) {
return $_SERVER[$key];
}
}
}
return 'UNKNOWN';
}
// 获取页面地址的函数
function getCurrentUrl() {
$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$host = $_SERVER['HTTP_HOST'];
$url = $protocol . $host . $_SERVER['REQUEST_URI'];
return $url;
}
$currentUrl = getCurrentUrl();
// 使用函数获取IP地址
$ip = getClientIP();
// 日志文件路径,请使用绝对路径,并放在网站根目录外。
$logFile = __DIR__ . '/list_log.php'; // 日志文件名,改为当前目录下的log.php
$message = "IP: " . $ip . " - 文件名:" . $imgName . " - 用户代理: " . $_SERVER['HTTP_USER_AGENT'] . PHP_EOL . "</br>";
// 将变量内容追加到日志文件
$result = file_put_contents($logFile, date('Y-m-d H:i:s') . " - " . $message, FILE_APPEND);
// 错误处理
if ($result === false) {
error_log("Failed to write to log file: " . $logFile);
}
//================================= 日志记录 End ==============================================
list.php源的日志访问位置: list.php改为list_log.php 访问即是日志记录;
在大佬这个页面播放的也有日志记录的;代码中的‘ $imgName’需要替换为‘$videoFileName’
本站文章部分内容可能来源于网络,仅供大家学习参考,如有侵权,请联系站长📧cutwork@qq.com进行删除处理!
THE END