PHP CURL模拟GET及POST函数代码

 更新时间:2016年11月25日 16:29  点击:1382


<?php教程
function vcurl($url, $post = '', $cookie = '', $cookiejar = '', $referer = ''){
$tmpInfo = '';
$cookiepath = getcwd().'./'.$cookiejar;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
if($referer) {
curl_setopt($curl, CURLOPT_REFERER, $referer);
} else {
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
}
if($post) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
}
if($cookie) {
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
}
if($cookiejar) {
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiepath);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiepath);
}
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 100);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$tmpInfo = curl_exec($curl);
if (curl_errno($curl)) {
echo '<pre><b>错误:</b><br />'.curl_error($curl);
}
curl_close($curl);
return $tmpInfo;
}
?>

function xiazai($file_dir,$file_name)
//参数说明:
//file_dir:文件所在目录
//file_name:文件名
{
     $file_dir = chop($file_dir);//去掉路径中多余的空格
     //得出要下载的文件的路径
     if($file_dir != '')
     {
         $file_path = $file_dir;
         if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/')
             $file_path .= '/';
         $file_path .= $file_name;
     }           
     else
         $file_path = $file_name;   
   
     //判断要下载的文件是否存在
     if(!file_exists($file_path))
     {
         alert('对不起,你要下载的文件不存在');
         return false;
     }

     $file_size = filesize($file_path);

     header("Content-type: application/octet-stream;charset=gbk");
     header("Accept-Ranges: bytes");
     header("Accept-Length: $file_size");
     header("Content-Disposition: attachment; filename=".$file_name);
   
     $fp = fopen($file_path,"r");
     $buffer_size = 1024;
     $cur_pos = 0;
   
     while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
     {
         $buffer = fread($fp,$buffer_size);
         echo $buffer;
         $cur_pos += $buffer_size;
     }
   
     $buffer = fread($fp,$file_size-$cur_pos);
     echo $buffer;
     fclose($fp);
     return true;

}

header("Content-type: image/jpeg"); 
$filename = 'book_rabbit_rule.jpg';
/* 读取图档 */
$im = imagecreatefromjpeg($filename); 
/* 图片要截多少, 长/宽 */
$new_img_width = 120;
$new_img_height = 42; 
/* 先建立一个 新的空白图档 */
$newim = imagecreate($new_img_width, $new_img_height); 
// 输出图要从哪边开始 x, y ,原始图要从哪边开始 x, y ,要画多大 x, y(resize) , 要抓多大 x, y
imagecopyresampled($newim, $im, 0, 0, 7, 174, 120, 42, $new_img_width, $new_img_height); 
/* 放大成 500 x 500 的图 */
// imagecopyresampled($newim, $im, 0, 0, 100, 30, 500, 500, $new_img_width, $new_img_height); 
/* 将图印出来 */
imagejpeg($newim); 
/* 资源回收 */
imagedestroy($newim);
imagedestroy($im);
?>

档案内大概该有的注解都写好了(Source code 放在此篇最下面),解释一下主要参数即可:

imagecopyresampled($newim, $im, 0, 0, 7, 174, 120, 42, $new_img_width, $new_img_height); // 原始尺寸 120 x 42 
imagecopyresampled($newim, $im, 0, 0, 100, 30, 500, 500, $new_img_width, $new_img_height); // 图截出来后放到 500 x 500 
imagecopyresampled($newim, $im, 0, 0, 100, 30, 10, 10, $new_img_width, $new_img_height); // 图截出来后缩小到 10 x 10 

大概主要是这个 function 的操作而已,主要只看第一个原尺寸的那个参数对照就好了,下述是 imagecopyresampled 的参数,一个一个对照如下:
$newim: imagecreate($new_img_width, $new_img_height); 建立的空白图层 
$im: imagecreatefromjpeg($filename); 把原本的图片读进来 
0: 输出图要从哪边开始的 x 点(图片输出的点是可以指定的,没指定到的位置就会是你 create 的图层颜色或图)
0: 输出图要从哪边开始的 y 点(同上)
7: 原始图要从哪边开始 x (指定要从哪个 x 点开始截取)
174: 原始图要从哪边开始 y (指定要从哪个点开始截取,截取区块大小由下面两个参数去定)
120: 截图要截多大 width ,从上面的指定的位置,开始截取 120px 宽(如果要放大缩小也是由此处决定)
42: 截图要截多大 height ,从上面的指定的位置,开始截取 42px 高(如果要放大缩小也是由此处决定)
$new_img_width: 这是新的图,从上面写的第二组参数 0, 0 ,要开始画多宽(在此程式目前是指定截图的大小)
$new_img_height: 这是新的图,从上面的第二组参数 0, 0 ,要开始画多高(在此程式目前是指定截图的大小)

<?php教程 

002 /** 

003  * <SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=%CE%C4%BC%FE">文件</SPAN>传输,支持断点续传。 

004  * 2g以上超大文件也有效 

005  * @author MoXie 

006  */

007 class Transfer { 

008     /** 

009      * 缓冲单元 

010      */

011     const BUFF_SIZE = 5120; // 1024 * 5 

012     /** 

013      * 文件地址 

014      * @var <String> 

015      */

016     private $filePath; 

017     /** 

018      * 文件大小 

019      * @var <String> Php超大数字 <SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=%D7%D6%B7%FB">字符</SPAN>串形式描述 

020      */

021     private $fileSize; 

022     /** 

023      * 文件类型 

024      * @var <String> 

025      */

026     private $mimeType; 

027     /** 

028      * 请求区域(范围) 

029      * @var <String> 

030      */

031     private $range; 

032     /** 

033      * 是否写入日志 

034      * @var <Boolean> 

035      */

036     private $isLog = false; 

037     /** 

038      * 

039      * @param <String> $filePath 文件路径 

040      * @param <String> $mimeType  文件类型 

041      * @param <String> $range 请求区域(范围) 

042      */

043     function __construct($filePath, $mimeType = null , $range = null) { 

044         $this->filePath = $filePath; 

045         $this->fileSize = sprintf('%u',filesize($filePath)); 

046         $this->mimeType = ($mimeType != null)?$mimeType:"application/octet-stream"; //  bin 

047         $this->range = trim($range); 

048     } 

049     /** 

050      *  获取文件区域 

051      * @return <Map> {'start':long,'end':long} or null 

052      */

053     private function getRange() { 

054         /** 

055          *  Range: bytes=-128 

056          *  Range: bytes=-128 

057          *  Range: bytes=28-175,382-399,510-541,644-744,977-980 

058          *  Range: bytes=28-175n380 

059          *  type 1 

060          *  RANGE: bytes=1000-9999 

061          *  RANGE: bytes=2000-9999 

062          *  type 2 

063          *  RANGE: bytes=1000-1999 

064          *  RANGE: bytes=2000-2999 

065          *  RANGE: bytes=3000-3999 

066          */

067         if (!empty($this->range)) { 

068             $range = preg_replace('/[s|,].*/','',$this->range); 

069             $range = explode('-',substr($range,6)); 

070             if (count($range) < 2 ) { 

071                 $range[1] = $this->fileSize; // Range: bytes=-100 

072             } 

073             $range = array_combine(array('start','end'),$range); 

074             if (empty($range['start'])) { 

075                 $range['start'] = 0; 

076             } 

077             if (!isset ($range['end']) || empty($range['end'])) { 

078                 $range['end'] = $this->fileSize; 

079             } 

080             return $range; 

081         } 

082         return null; 

083     } 

084     /** 

085      * 向客户端发送文件 

086      */

087     public function send() { 

088         $fileHande = fopen($this->filePath, 'rb'); 

089         if ($fileHande) { 

090             // setting 

091             ob_end_clean();// clean cache 

092             ob_start(); 

093             ini_set('output_buffering', 'Off'); 

094             ini_set('zlib.output_compression', 'Off'); 

095             $magicQuotes = get_magic_quotes_gpc(); 

096             set_magic_quotes_runtime(0); 

097             // init 

098             $lastModified = gmdate('D, d M Y H:i:s', filemtime($this->filePath)).' GMT'; 

099             $etag = sprintf('w/"%s:%s"',md5($lastModified),$this->fileSize); 

100             $ranges = $this->getRange(); 

101             // headers 

102             header(sprintf('Last-Modified: %s',$lastModified)); 

103             header(sprintf('ETag: %s',$etag)); 

104             header(sprintf('Content-Type: %s',$this->mimeType)); 

105             $disposition = 'attachment'; 

106             if (strpos($this->mimeType,'image/') !== FALSE) { 

107                 $disposition = 'inline'; 

108             } 

109             header(sprintf('Content-Disposition: %s; filename="%s"',$disposition,basename($this->filePath))); 

110   

111             if ($ranges != null) { 

112                 if ($this->isLog) { 

113                     $this->log(json_encode($ranges).' '.$_SERVER['HTTP_RANGE']); 

114                 } 

115                 header('HTTP/1.1 206 Partial Content'); 

116                 header('Accept-Ranges: bytes'); 

117                 header(sprintf('Content-Length: %u',$ranges['end'] - $ranges['start'])); 

118                 header(sprintf('Content-Range: bytes %s-%s/%s', $ranges['start'], $ranges['end'],$this->fileSize)); 

119                 // 

120                 fseek($fileHande, sprintf('%u',$ranges['start'])); 

121             }else { 

122                 header("HTTP/1.1 200 OK"); 

123                 header(sprintf('Content-Length: %s',$this->fileSize)); 

124             } 

125             // read file 

126             $lastSize = 0; 

127             while(!feof($fileHande) && !connection_aborted()) { 

128                 $lastSize = sprintf("%u", bcsub($this->fileSize,sprintf("%u",ftell($fileHande)))); 

129                 if (bccomp($lastSize,self::BUFF_SIZE) > 0) { 

130                     $lastSize = self::BUFF_SIZE; 

131                 } 

132                 echo fread($fileHande, $lastSize); 

133                 flush(); 

134                 ob_flush(); 

135             } 

136             set_magic_quotes_runtime($magicQuotes); 

137             ob_end_flush(); 

138         } 

139         if ($fileHande != null) { 

140             fclose($fileHande); 

141         } 

142     } 

143     /** 

144      * 设置记录 

145      * @param <Boolean> $isLog  是否记录 

146      */

147     public function setIsLog($isLog = true) { 

148         $this->isLog = $isLog; 

149     } 

150     /** 

151      * 记录 

152      * @param <String> $msg  记录信息 

153      */

154     private function log($msg) { 

155         try { 

156             $handle = fopen('transfer_log.txt', 'a'); 

157             fwrite($handle, sprintf('%s : %s'.<SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=PHP">PHP</SPAN>_EOL,date('Y-m-d H:i:s'),$msg)); 

158             fclose($handle); 

159         }catch(Exception $e) { 

160             // null; 

161         } 

162     } 

163 } 

164 date_default_timezone_set('Asia/Shanghai'); 

165 error_reporting(E_STRICT); 

166 function errorHandler($errno, $errstr, $errfile, $errline) { 

167     echo '<p>error:',$errstr,'</p>'; 

168     exit(); 

169 } 

170 set_error_handler('errorHandler'); 

171 define('IS_DEBUG',true); 

172   

173 // 

174 // 

175 $filePath = '/Movie/The.Hurt.Locker.2008.x264.AC3-WAF.mkv'; 

176 $mimeType = 'audio/x-matroska'; 

177 $range = isset($_SERVER['HTTP_RANGE'])?$_SERVER['HTTP_RANGE']:null; 

178 if (IS_DEBUG) { 

179 //    $range = "bytes=1000-1999n2000"; 

180 //    $range = "bytes=1000-1999,2000";  

181 //    $range = "bytes=1000-1999,-2000";  

182 //    $range = "bytes=1000-1999,2000-2999";  

183 } 

184 set_time_limit(0); 

185 $transfer = new Transfer($filePath,$mimeType,$range); 

186 if (IS_DEBUG) { 

187     $transfer->setIsLog(true); 

188 } 

189 $transfer->send(); 

190 ?>

<?php教程 

002 $file_path = './download/download_cn.rar'; 

003   

004 //使用方法 

005 downFile($file_path); 

006   

007 // 服务器文件路径,下载文件名字(默认为服务器文件名),是否许可用户下载方式(默认可选),速度限制(默认自动),文件类型(默认所有) 

008 function downFile($fileName, $fancyName = '', $forceDownload = true, $speedLimit = 0, $contentType = '') {  

009     if (!is_readable($fileName))  

010     {  

011         header("HTTP/1.1 404 Not Found");  

012         return false;  

013     }  

014     

015     $fileStat = stat($fileName);  

016     $lastModified = $fileStat['mtime'];  

017     

018     $md5 = md5($fileStat['mtime'] .'='. $fileStat['ino'] .'='. $fileStat['size']);  

019     $etag = '"' . $md5 . '-' . crc32($md5) . '"';  

020     

021     header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $lastModified) . ' GMT');  

022     header("ETag: $etag");  

023     

024     if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModified)  

025     {  

026         header("HTTP/1.1 304 Not Modified");  

027         return true;  

028     }  

029     

030     if (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) < $lastModified)  

031     {  

032         header("HTTP/1.1 304 Not Modified");  

033         return true;  

034     }  

035     

036     if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&  $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)  

037     {  

038         header("HTTP/1.1 304 Not Modified");  

039         return true;  

040     }  

041     

042     if ($fancyName == '')  

043     {  

044         $fancyName = basename($fileName);  

045     }  

046     

047     if ($contentType == '')  

048     {  

049         $contentType = 'application/octet-stream';  

050     }  

051     

052     $fileSize = $fileStat['size'];  

053     

054     $contentLength = $fileSize;  

055     $isPartial = false;  

056     

057     if (isset($_SERVER['HTTP_RANGE']))  

058     {  

059         if (preg_match('/^bytes=(d*)-(d*)$/', $_SERVER['HTTP_RANGE'], $matches))  

060         {  

061             $startPos = $matches[1];  

062             $endPos = $matches[2];  

063     

064             if ($startPos == '' && $endPos == '')  

065             {  

066                 return false;  

067             }  

068     

069             if ($startPos == '')  

070             {  

071                 $startPos = $fileSize - $endPos;  

072                 $endPos = $fileSize - 1;  

073             }  

074             else if ($endPos == '')  

075             {  

076                 $endPos = $fileSize - 1;  

077             }  

078     

079             $startPos = $startPos < 0 ? 0 : $startPos;  

080             $endPos = $endPos > $fileSize - 1 ? $fileSize - 1 : $endPos;  

081     

082             $length = $endPos - $startPos + 1;  

083     

084             if ($length < 0)  

085             {  

086                 return false;  

087             }  

088     

089             $contentLength = $length;  

090             $isPartial = true;  

091         }  

092     }  

093     

094     // send headers  

095     if ($isPartial)  

096     {  

097         header('HTTP/1.1 206 Partial Content');  

098         header("Content-Range: bytes $startPos-$endPos/$fileSize");  

099     

100     }  

101     else 

102     {  

103         header("HTTP/1.1 200 OK");  

104         $startPos = 0;  

105         $endPos = $contentLength - 1;  

106     }  

107     

108     header('Pragma: cache');  

109     header('Cache-Control: public, must-revalidate, max-age=0');  

110     header('Accept-Ranges: bytes');  

111     header('Content-type: ' . $contentType);  

112     header('Content-Length: ' . $contentLength);  

113     

114     if ($forceDownload)  

115     {  

116         header('Content-Disposition: attachment; filename="' . rawurlencode($fancyName). '"');  

117     }  

118     

119     header("Content-Transfer-Encoding: binary");  

120     

121     $bufferSize = 2048;  

122     

123     if ($speedLimit != 0)  

124     {  

125         $packetTime = floor($bufferSize * 1000000 / $speedLimit);  

126     }  

127     

128     $bytesSent = 0;  

129     $fp = fopen($fileName, "rb");  

130     fseek($fp, $startPos);  

131     while ($bytesSent < $contentLength && !feof($fp) && connection_status() == 0 )  

132     {  

133         if ($speedLimit != 0)  

134         {  

135             list($usec, $sec) = explode(" ", microtime());  

136             $outputTimeStart = ((float)$usec + (float)$sec);  

137         }  

138     

139         $readBufferSize = $contentLength - $bytesSent < $bufferSize ? $contentLength - $bytesSent : $bufferSize;  

140         $buffer = fread($fp, $readBufferSize);  

141     

142         echo $buffer;  

143     

144         ob_flush();  

145         flush();  

146     

147         $bytesSent += $readBufferSize;  

148     

149         if ($speedLimit != 0)  

150         {  

151             list($usec, $sec) = explode(" ", microtime());  

152             $outputTimeEnd = ((float)$usec + (float)$sec);  

153     

154             $useTime = ((float) $outputTimeEnd - (float) $outputTimeStart) * 1000000;  

155             $sleepTime = round($packetTime - $useTime);  

156             if ($sleepTime > 0)  

157             {  

158                 usleep($sleepTime);  

159             }  

160         }  

161     }  

162     return true;  

163 }  

164 ?>

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20