PHP 下载远程网页图片并且保存在本地实例
fopen函数实例
ob_start : 打开输出缓冲
readfile : 读入一个文件并写入到输出缓冲
返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。
ob_get_contents : Return the contents of the output buffer(返回输出缓冲的内容)
This will return the contents of the output buffer without clearing it or FALSE, if output buffering isn’t active. (如果输出缓冲没有活动(打开),则返回 FALSE)
ob_end_clean() : Clean (erase) the output buffer and turn off output buffering(清除输出缓冲)
代码如下 | 复制代码 |
|
php下载远程图片函数 可伪造来路
$gurl 要下载的图片地址
$rfurl 来路。如果目标图像做了防盗链设置,可以绕过。
$filename 下载图片保存的文件名,相对路径,不要用realpath
$gcookie 调整cookie 伪造的cookie
$JumpCount 跳转计数
$maxtime 最大次数
调用方法:DownImageKeep(“http://www.baidu.com/img/baidu_jgylogo2.gif”,”http://baidu.com”,”a.gif”,”",0,10);
代码如下 | 复制代码 |
function DownImageKeep($gurl, $rfurl, $filename, $gcookie=”", $JumpCount=0, $maxtime=30) //获取应答头 if(preg_match(“/^3/”, $m_httphead["http-state"])) //到达指定大小结束 //获取详细应答头 |
诸多大互联网公司的面试都会有这么个问题,有个4G的文件,如何用只有1G内存的机器去计算文件中出现次数做多的数字(假设1行是1个数组,例如QQ号码)。如果这个文件只有4B或者几十兆,那么最简单的办法就是直接读取这个文件后进行分析统计。但是这个是4G的文件,当然也可能是几十G甚至几百G的文件,这就不是直接读取能解决了的。
同样对于如此大的文件,单纯用PHP做是肯定行不通的,我的思路是不管多大文件,首先要切割为多个应用可以承受的小文件,然后批量或者依次分析统计小文件后再把总的结果汇总后统计出符合要求的最终结果。类似于比较流行的MapReduce模型,其核心思想就是“Map(映射)”和“Reduce(化简)”,加上分布式的文件处理,当然我能理解和使用到的只有Reduce后去处理。
假设有1个10亿行的文件,每行一个6位-10位不等的QQ号码,那么我需要解决的就是计算在这10亿个QQ号码中,重复最多的前10个号码,使用下面的PHP脚本生成这个文件,很可能这个随机数中不会出现重复,但是我们假设这里面会有重复的数字出现。
代码如下 | 复制代码 |
$fp = fopen('qq.txt','w+'); |
生成文件的世界比较长,Linux下直接使用php-client运行PHP文件会比较节省时间,当然也可以使用其他方式生成文件。生成的文件大约11G。
然后使用Linux Split切割文件,切割标准为每100万行数据1个文件。
代码如下 | 复制代码 |
split -l 1000000 -a 3 qq.txt qqfile |
qq.txt被分割为名字是qqfileaaa到qqfilebml的1000个文件,每个文件11mb大小,这时再使用任何处理方法都会比较简单了。我还是使用PHP进行分析统计:
代码如下 | 复制代码 |
$results = array(); |
这样每个样本取前10个,最后放到一起分析统计,不排除有个数在每个样本中都排名第11位但是总数绝对在前10的可能性,所以后面统计计算算法还需要改进。
也许有人说使用Linux中的awk和sort命令可以完成排序,但是我试了下如果是小文件还可以实现,但是11G的文件,不管是内存还是时间都无法承受。下面是我改的1个awk+sort的脚本,或许是写法有问题,求牛人指导。
代码如下 | 复制代码 |
awk -F '\@' '{name[$1]++ } END {for (count in name) print name[count],count}' qq.txt |sort -n > 123.txt |
互联网几何级增长,未来不管是大文件处理还是可能存在的大数据都存在很大的需求空间
实例1
直接使用txt文件进行统计的代码
代码如下 | 复制代码 |
<?php function counter($f_value) |
上面使用的是txt文件,下面我们来介绍一个mysql数据库操作实例
代码如下 | 复制代码 |
CREATE TABLE `mycounter` ( |
函数
代码如下 | 复制代码 |
<?PHP public function ShowMyCounter(){ //定义变量 $IsGone = FALSE; //读取数据 $querysql = "SELECT * FROM `mycounter` WHERE id = Ƈ' "; $queryset = mysql_query($querysql); $row = mysql_fetch_array($queryset); //获得时间量 $DateNow = date('Y-m-d'); $RecordDate = $row['RecordDate']; $DateNow_explode = explode("-",$DateNow); $RecordDate_explode = explode("-",$RecordDate); //判断是否已过去一天 if( $DateNow_explode[0] > $RecordDate_explode[0]) $IsGone = TRUE; else if( $DateNow_explode[0] == $RecordDate_explode[0] ){ if( $DateNow_explode[1] > $RecordDate_explode[1] ) $IsGone = TRUE; else if( $DateNow_explode[1] == $RecordDate_explode[1] ){ if( $DateNow_explode[2] > $RecordDate_explode[2] ) $IsGone = TRUE; }else BREAK; }else BREAK; //根据IsGone进行相应操作 IF($IsGone) { $RecordDate = $DateNow; $CounterToday = 0; $CounterLastDay = $row['CounterToday']; $upd_sql = "update mycounter set RecordDate = '$RecordDate',CounterToday = '$CounterToday',CounterLastDay = '$CounterLastDay' WHERE id = Ƈ' "; mysql_query($upd_sql); } //再次获取数据 $querysql = "SELECT * FROM `mycounter` WHERE id = Ƈ' "; $queryset = mysql_query($querysql); $Counter = $row['Counter']; $CounterToday = $row['CounterToday']; $CounterLastDay = $row['CounterLastDay']; if($row = mysql_fetch_array($queryset) ){ if( $_COOKIE["user"] != "oldGuest" ){ $Counter = ++$row['Counter']; $CounterToday = ++$row['CounterToday']; $upd_sql = "update mycounter set counter = '$Counter',CounterToday = '$CounterToday' WHERE id = Ƈ' "; $myquery = mysql_query($upd_sql); } echo "总访问量:".$Counter; echo " "; echo "今日流量:".$CounterToday; echo " "; echo "昨日流量:".$CounterLastDay; }else{//如果数据库为空时,相应的操作 } } ?> |
当然,需要在文件第一行开始写出如下代码:
代码如下 | 复制代码 |
<?PHP |
如果是静态页面我们上面的方法是不可以实现的,但下面再举一个不错的统计实例
代码如下 | 复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <mce:script language="javascript" src="count.php?aid=1&t=show" mce_src="count.php?aid=1&t=show"></mce:script> <mce:script language="javascript" src="count.php?aid=1" mce_src="count.php?aid=1"></mce:script> </head> <body> <h1>php统计静态html页面浏览访问次数代码</h1> <hr> </body> </html> |
count.php代码
代码如下 | 复制代码 |
<?php |
数据库
代码如下 | 复制代码 |
-- |
问题原因:
如果开启了IPv6,curl默认会优先解析 IPv6,在对应域名没有 IPv6 的情况下,会等待 IPv6 dns解析失败 timeout 之后才按以前的正常流程去找 IPv4。在程序中我对curl获取内容都作了较为严格的超时限制,所以就会造成无法获取内容的问题。
解决的方法是设置默认访问为ipv4,php的curl设置方法具体如下
代码如下 | 复制代码 |
$ch = curl_init(); //设置curl请求连接时的最长秒数,如果设置为0,则无限 |
注:curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4) 只有在php版本5.3及以上版本,curl版本7.10.8及以上版本时,以上设置才生效。
404页面是一种友好的错误提示页面,在php中我们可以利用php,apache,hatcess三种方法来实现向浏览器发送404错误页面状态,下面我来介绍其它的php header函数实现404错误页面的具体方法。先来了解header函数
header() 函数向客户端发送原始的 HTTP 报头,header(string,replace,http_response_code)
php header 404写法:
Php代码
代码如下 | 复制代码 |
header("HTTP/1.1 404 Not Found");exit; |
如果以上代码不凑效,可以试试以下代码:
Php代码
代码如下 | 复制代码 |
header("Status: 404 Not Found"); |
上面只是404状态页面很难看,如果我们要验证需要如下操作
代码如下 | 复制代码 |
@header("http/1.1 404 not found"); |
这样不但有错误提示信息同时还会有一个漂亮的页面哦,我在实例应用中的一个实例
代码如下 | 复制代码 |
|
如果讲到apache那就简单多了,ErrorDocument 404 /404.html
注意了,如果你写好之后一定要利用专题404错误页面工具进行测试哦,否则可能返回200就不好了,一定要看到是404状态才行。
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
- 当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <?php $lan = substr( $HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
- 共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
- 这篇文章主要为大家详细介绍了Visual Studio 2015下载和安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
- ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
C#中图片旋转和翻转(RotateFlipType)用法分析
这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29