1、模拟下载php程序2.php
<?php
$file_name = "down";
$file_name1 = "down.zip"; //下载文件名
$file_name2 = "1.txt"; //下载文件名
$file_dir = "./down/"; //下载文件存放目录
$parameter = $_GET["parameter"];
if($parameter == 0){
$file_name = $file_name1;
}else{
$file_name = $file_name2;
}
//检查文件是否存在
$file_name = $file_name1;
if (! file_exists ( $file_dir . $file_name )) {
// header('HTTP/1.1 404 NOT FOUND');
echo '{"msg":"无新文件","serviceFlag":1}';
} else {
//以只读和二进制模式打开文件
$file = fopen ( $file_dir . $file_name, "rb" );
//告诉浏览器这是一个文件流格式的文件
Header ( "Content-type: application/octet-stream" );
//请求范围的度量单位
Header ( "Accept-Ranges: bytes" );
//Content-Length是指定包含于请求或响应中数据的字节长度
Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header ( "Content-Disposition: attachment; filename=" . $file_name );
//读取文件内容并直接输出到浏览器
echo fread ( $file, filesize ( $file_dir . $file_name ) );
fclose ( $file );
exit ();
}
?>
2、自动下载文件存储到指定路径,并以原名称存储
<?php
/*
if (!function_exists('getallheaders')) {
function getallheaders() {
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
echo "server:<br>";
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
echo "<hr>";
echo "headers:<br>";
echo "<pre>";
print_r(getallheaders());
echo "</pre>";
*/
$url = "http://127.0.0.1:8090/tielu/2.php";
$save_dir = "D:/MYOA/webroot/guoziwei/download";
//$res = getFile($url, $save_dir, $filename, 1);
//var_dump($res);
$re=curlPost($url,$data='');
//echo $re;
$arr=json_decode($re);
//print_r($arr);
$msg=iconv("utf-8","gb2312",$arr->msg);
//echo $msg;
if($msg!="无新文件"){
//$filename = $_REQUEST['filename'];
if($filename==""){
$filename = date("YmdHis").".zip";
}
$res = getFile($url, $save_dir, $filename, 1);
var_dump($res);
}
function getFile($url, $save_dir = '', $filename = '', $type = 0) {
if (trim($url) == '') {
return false;
}
if (trim($save_dir) == '') {
$save_dir = './';
}
if (0 !== strrpos($save_dir, '/')) {
$save_dir.= '/';
}
//创建保存目录
if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) {
return false;
}
//获取远程文件所采用的方法
if ($type) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, TRUE); //需要response header
curl_setopt($ch, CURLOPT_NOBODY, FALSE); //需要response body
$content = curl_exec($ch);
// curl_close($ch);
/*****************************/
$response = $content;
//分离header与body
$header = '';
$body = '';
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); //头信息size
$header = substr($response, 0, $headerSize);
//var_dump($header);
$body = substr($response, $headerSize);
//echo $header."<hr>";
//echo $body."<hr>";
$farr = array();
if(preg_match('/Content-Disposition: .*filename=([^ ]+)/', $header, $matches)) {
// print_r($matches);
$farr=explode("\n",$matches[1]);
// print_r($farr);
$filename=substr($farr[0],0,-1);
//rename($filename, $targetPath . $matches[1]);
}
}
/*****************************/
curl_close($ch);
} else {
ob_start();
readfile($url);
$content = ob_get_contents();
ob_end_clean();
}
$size = strlen($content);
//文件大小
if($filename==""){
$filename = date("YmdHis").".zip";
}
$fp2 = @fopen($save_dir . $filename, 'a');
fwrite($fp2, $content);
fclose($fp2);
unset($content, $url);
return array(
'file_name' => $filename,
'save_path' => $save_dir . $filename
);
}
function curlPost($url,$data=array())
{
//echo "aaaa";
$ch1 = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $data;
curl_setopt_array($ch1, $params); //传入curl参数
$content = curl_exec($ch1); //执行
curl_close($ch1); //关闭连接
// echo $content."4444";
return $content;
}
?>