<?php
set_time_limit(0);
if(isset($_GET['url']) && isset($_GET['filename'])){
if(httpcopy($_GET['url'], $_GET['filename'])){
echo("Done.");
}else{
echo("Down Error.");
}
}else{
die('Input error.');
}
function httpcopy($url, $file="", $timeout=60) {
$file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
$dir = pathinfo($file,PATHINFO_DIRNAME);
!is_dir($dir) && @mkdir($dir,0755,true);
$url = str_replace(" ","%20",$url);
if(function_exists('curl_init')) {
echo "curl ";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$temp = curl_exec($ch);
if(@file_put_contents($file, $temp) && !curl_error($ch)) {
return $file;
} else {
return false;
}
} else {
echo "copy ";
$opts = array(
"http"=>array(
"method"=>"GET",
"header"=>"",
"timeout"=>$timeout)
);
$context = stream_context_create($opts);
if(@copy($url, $file, $context)) {
//$http_response_header
return $file;
} else {
return false;
}
}
}
?>
这段代码是PHP语言编写的,它的作用是从一个指定的URL下载文件,并将其保存到服务器上。下面是代码的逐行解释:
set_time_limit(0);
– 设置脚本的执行时间无限制,这样脚本可以运行任意长的时间。if(isset($_GET['url']) && isset($_GET['filename'])){
– 检查是否有GET请求的参数url
和filename
。if(httpcopy($_GET['url'], $_GET['filename'])){
– 如果httpcopy
函数成功执行,即文件下载成功。echo("Done.");
– 输出“Done.”表示文件下载并保存成功。}else{
– 如果httpcopy
函数执行失败。echo("Down Error.");
– 输出“Down Error.”表示下载过程中出现了错误。}else{
– 如果没有GET请求的参数url
或filename
。die('Input error.');
– 终止脚本执行并输出“Input error.”表示输入错误。function httpcopy($url, $file="", $timeout=60) {
– 定义了一个名为httpcopy
的函数,它接受三个参数:文件的URL、文件名(可选,默认为空),以及超时时间(默认60秒)。$file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
– 如果没有提供文件名,就使用URL的最后一部分作为文件名。$dir = pathinfo($file,PATHINFO_DIRNAME);
– 获取文件名的目录路径。!is_dir($dir) && @mkdir($dir,0755,true);
– 如果目录不存在,则创建目录,权限设置为755。$url = str_replace(" ","%20",$url);
– 将URL中的空格替换为%20
,因为URL中不能直接包含空格。if(function_exists('curl_init')) {
– 检查服务器是否支持cURL。echo "curl ";
– 如果支持cURL,输出“curl”。- 使用cURL进行文件下载,如果成功则保存到指定的文件路径。
else {
– 如果服务器不支持cURL。echo "copy ";
– 输出“copy”。- 使用PHP的
stream_context_create
和copy
函数进行文件下载,如果成功则保存到指定的文件路径。 }
– 函数定义结束。
这段代码存在安全风险,因为它允许通过URL参数直接下载文件到服务器,这可能会导致恶意文件被下载和执行。在实际应用中,这样的脚本应该进行严格的安全检查和限制。