[TOC] ## 通过ip查地址接口 1. 查询ip所在地 `http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=114.114.114.114` 2. 查询当前所在地 `http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json` ## https双向认证 查看我的[github](https://github.com/idcpj/phplib/blob/master/src/Phplib/Curl.php) ## ping++ 网页支付技巧 把[\Pingpp\Charge::create()](https://github.com/PingPlusPlus/pingpp-php/blob/master/example/recharge/recharge.php) 方法生成的json对象[pingpp.createPayment](https://www.pingxx.com/docs/client/web) ```js //\Pingpp\Charge::create()返回的json变为js对象 var object={ "id": "ch_LO0800TKunLGCy9ufHHmLmPS", "object": "charge", ... } pingpp.createPayment(object, function(result, err){ // 可按需使用 alert 方法弹出 log console.log(result); console.log(err.msg); console.log(err.extra); if (result == "success") { // 只有微信公众号 (wx_pub)、QQ 公众号 (qpay_pub)支付成功的结果会在这里返回,其他的支付结果都会跳转到 extra 中对应的 URL } else if (result == "fail") { // Ping++ 对象不正确或者微信公众号 / QQ公众号支付失败时会在此处返回 } else if (result == "cancel") { // 微信公众号支付取消支付 } }); ``` ## 用2倍数 判断是否开启某个功能 ``` //如功能值为 8 $op = 8; return ($val & $op) == $op ; //true 开启 false 关闭 ``` ## php curl post 发送文件 ``` $param=[ 'file1'=>new CURLFile('Application.zip','text/html','file1'), 'file2'=>new \CURLFile('bom.php','text/html','file2'), 'file1_path'=>"data/CF598B75-2107-750D-3401-96B7E4155A62/board/2019-07-02/5d1ad45c33c46-2.zip", 'file2_path'=> "data/CF598B75-2107-750D-3401-96B7E4155A62/board/2019-07-02/5d1ad45c4250312a-2.bat", ]; $ch = curl_init('http://127.0.0.1:8010/api/send/accept_file'); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $param); $res = curl_exec($ch); $curl_errno = curl_error($ch); print_r($res); print_r($curl_errno); ``` ## 限速下载 ``` public function down(){ //设置时间不超时,不然下载30s 后就会中断 set_time_limit(0); $pathToFile = SITE_PATH.$_GET['file'];//文件绝对路径 $downloadName = basename($pathToFile);//下载后的文件名 $download_rate = 1000;// 设置下载速率(30 kb/s) if (file_exists($pathToFile) && is_file($pathToFile)) { header('Cache-control: private');// 发送 headers header('Content-Type: application/octet-stream'); header('Content-Length: ' . filesize($pathToFile)); header('Content-Disposition: filename=' . $downloadName); ob_clean(); $file = fopen($pathToFile, "r"); while (!feof($file)) { print fread($file, round($download_rate * 1024));// 发送当前部分文件给浏览者 flush();// flush 内容输出到浏览器端 // 终端1秒后继续 sleep(1);// 终端1秒后继续 } fclose($file);// 关闭文件流 } else { $this->send('abort'); } } ``` ## 把网络的文件保存到本地且文件保持同步 ``` /* *功能:php完美实现下载远程图片保存到本地 *参数:文件url,保存文件目录,保存文件名称,使用的下载方式 *当保存文件名称为空时则使用远程文件原来的名称 */ function getImage($url,$save_dir='',$filename='',$type=0){ if(trim($url)==''){ return array('file_name'=>'','save_path'=>'','error'=>1); } if(trim($save_dir)==''){ $save_dir='./'; } if(trim($filename)==''){//保存文件名 $ext=strrchr($url,'.'); if($ext!='.gif'&&$ext!='.jpg'){ return array('file_name'=>'','save_path'=>'','error'=>3); } $filename=time().$ext; } if(0!==strrpos($save_dir,'/')){ $save_dir.='/'; } //创建保存目录 if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){ return array('file_name'=>'','save_path'=>'','error'=>5); } //获取远程文件所采用的方法 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); $img=curl_exec($ch); curl_close($ch); }else{ ob_start(); readfile($url); $img=ob_get_contents(); ob_end_clean(); } //$size=strlen($img); //文件大小 $fp2=@fopen($save_dir.$filename,'a'); fwrite($fp2,$img); fclose($fp2); unset($img,$url); return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0); } //=============demo =================// $url ='https://mmbiz.qpic.cn/mmbiz_jpg/tnoJFTuLBa99ic78GjkCnFAVia2jTa71gnJxMKhC6XcnKC0zuS5mv4nicuzjUiaLFmcv6sARbbJM2qDwTEw6PWVU3w/640?wx_fmt=jpeg'; $res = $v($url,'testimg','test.jpeg',1); var_export($res); //array ( 'file_name' => 'test.jpeg', 'save_path' => 'testimg//test.jpeg', 'error' => 0, ) ```