作用:做为文件下载/视频播放时的中转/代理服务器。
使用方法:访问该php,出现网址输入框,粘贴网址到输入框,点击“下载”或者“播放”即可。
源代码下载:d.php(3.52 KB)
相关帖子:https://hu60.net/q.php/bbs.topic.85435.html
这个程序不会向你的空间写入任何文件,它是把内容一块一块的从服务器读取到内存然后直接发送给你的,因此可以支持大于虚拟主机空间的任意文件。
文件下载时支持断点续传,视频播放时支持拖动进度条。
对m3u8视频不起作用,因为m3u8只是视频的播放列表,真正的视频还是会去原来的地址获取。
备注:如果复制代码后得到500错误,请删除最开头多余的空白,保证EOF;
标记前面没有任何别的内容。建议通过上面的链接下载代码。
代码修改自proxy.php。
如果无法用于某些 https 网站,请修改第44行的ssl
为tls
。
-
<?php
-
@error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
-
@ignore_user_abort(0);
-
@set_time_limit(0);
-
$url = trim($_GET['url']);
-
$play = (bool)$_GET['play'];
-
if ($play && !empty($url)) {
-
$url = urlencode($url);
-
header('Content-Type: text/html; charset=utf-8');
-
echo <<<EOF
-
<!doctype html>
-
<html>
-
<head>
-
<meta charset="utf-8">
-
<title>视频中转</title>
-
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=1">
-
<style>
-
html, body, video {
-
width: 100%;
-
height: 100%;
-
}
-
</style>
-
</head>
-
<body>
-
<video src="?url=$url" controls>
-
</body>
-
</html>
-
EOF;
-
return;
-
}
-
if(!empty($url)) {
-
$urlArgs = parse_url($url);
-
$host = $urlArgs['host'];
-
$requestUri = $urlArgs['path'];
-
if (isset($urlArgs['query'])) {
-
$requestUri .= '?' . $urlArgs['query'];
-
}
-
$protocol = ($urlArgs['scheme'] == 'http') ? 'tcp' : 'ssl';
-
$port = $urlArgs['port'];
-
if (empty($port)) {
-
$port = ($protocol == 'tcp') ? 80 : 443;
-
}
-
$header = "{$_SERVER['REQUEST_METHOD']} {$requestUri} HTTP/1.1\r\nHost: {$host}\r\n";
-
unset($_SERVER['HTTP_HOST']);
-
$_SERVER['HTTP_CONNECTION'] = 'close';
-
if ($_SERVER['CONTENT_TYPE']) {
-
$_SERVER['HTTP_CONTENT_TYPE'] = $_SERVER['CONTENT_TYPE'];
-
}
-
foreach ($_SERVER as $x => $v) {
-
if (substr($x, 0, 5) !== 'HTTP_') {
-
continue;
-
}
-
$x = strtr(ucwords(strtr(strtolower(substr($x, 5)), '_', ' ')), ' ', '-');
-
$header .= "{$x}: {$v}\r\n";
-
}
-
$header .= "\r\n";
-
$remote = "{$protocol}://{$host}:{$port}";
-
$context = stream_context_create();
-
stream_context_set_option($context, 'ssl', 'verify_host', false);
-
$p = stream_socket_client($remote, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $context);
-
if (!$p) {
-
exit;
-
}
-
fwrite($p, $header);
-
$pp = fopen('php://input', 'r');
-
while ($pp && !feof($pp)) {
-
fwrite($p, fread($pp, 1024));
-
}
-
fclose($pp);
-
$header = '';
-
$x = 0;
-
$len = false;
-
$off = 0;
-
while (!feof($p)) {
-
if ($x == 0) {
-
$header .= fread($p, 1024);
-
if (($i = strpos($header, "\r\n\r\n")) !== false) {
-
$x = 1;
-
$n = substr($header, $i + 4);
-
$header = substr($header, 0, $i);
-
$header = explode("\r\n", $header);
-
foreach ($header as $m) {
-
if (preg_match('!^\\s*content-length\\s*:!is', $m)) {
-
$len = trim(substr($m, 15));
-
}
-
header($m);
-
}
-
$off = strlen($n);
-
echo $n;
-
flush();
-
}
-
} else {
-
if ($len !== false && $off >= $len) {
-
break;
-
}
-
$n = fread($p, 1024);
-
$off += strlen($n);
-
echo $n;
-
flush();
-
}
-
}
-
fclose($p);
-
return;
-
}
-
header('Content-Type: text/html; charset=utf-8');
-
echo <<<EOF
-
<!doctype html>
-
<html>
-
<head>
-
<meta charset="utf-8">
-
<title>文件中转</title>
-
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=1">
-
</head>
-
<body>
-
<h1>文件中转</h1>
-
<form action="" method="get">
-
文件地址:<input name="url">
-
<input type="submit" value="下载">
-
<input type="submit" value="播放" name="play">
-
</form>
-
</body>
-
</html>
-
EOF;
很高级啊。
这都被你看出来了,厉害!!!!