如何采集微信公共账号里面的图片

做页面内容抓起,遇到图片获取是必不可免的,这在之前的项目的有提过,但那个做法是很简单的,传统的图片存储。所有按正常的方式可以得到想要的结果。

但技术一直在进步嘛!!现在的WEB的流量中图片占70%的流量,在移动互联网时代,这种情况是不能忍的,所有就出现了微信的这种情况

[php]

$url = http://mmbiz.qpic.cn/mmbiz/jZa4drp6SdD6u2bGeiakB9BSfJCoFJLyKLdt2Kmve55TvibSFjgtFCe2A1G0fLNsX84SbMb96EPVb0Je6afnQaSg/640?wx_fmt=jpeg&tp=webp&wxfrom=5

[/php]

上面这个链接,是可以通过游览器打开的,但你从链接上面根本看出来是什么格式? 其实不是看不出来,是我们不认识这种格式,webp. 这是Google推出的一种移动图片压缩格式

这种格式怎么用?有什么用!,暂时不在这里讨论。

我发现他的原因是

[php]

$image = get_headers($url); //只获取访问URL的返回的表头

[/php]

PHP图片返回的头

PHP图片返回的头

这样就知道,这个URL的指定的图片的后缀名是什么了吧。。然后用普通的方式下载图片,后缀名用webp就OK了。。现在只能用游览器打开。。

你要是有时间,可以把他转换成JEPG格式的,,一个WEBTOOLS:https://cloudconvert.com/

这种格式在移动互联网时代应该会成为主流,毕竟能省很多流量。

PHP程序登录搜狐广告获取广告联盟数据

一直有一个想法,每次都要登录去看联盟昨天收益多少?每天都要登录和麻烦,能不能做一个汇总发邮件的功能呢?

可惜了,验证码绕不过去,只能想一个办法。先在服务器手动打一次验证码,然后在通过定时器,每隔10分钟请求一个页面

这样的话Cookies就不会失效,,然后每周只需要跟我汇总数据就Ok了。。

远程提交表单的原理,可以参考:PHP后台远程登录正方教务系统

参考的代码还是一样的如下

获取验证码Code.php

[php]
define("SITE_PATH", $_SERVER[‘DOCUMENT_ROOT’]);
$LoginUrl = "http://union.sogou.com/";
$url = $LoginUrl."validateCode";
$filedir = SITE_PATH."/TMP/Cookies";
$cookie_file = $filedir."/cookie.txt";

if(!mkdirs($filedir))
{
  echo "目录创建失败";
   exit;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
//curl_setopt($ch, CURLOPT_REFERER, "http://125.89.69.234");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, "10");

$response = curl_exec($ch);
curl_close($ch);
header("Content-type:image/gif");
echo $response;

//创建目录
function mkdirs($dir)
{
     if(!is_dir($dir))
{
if(!mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir,0777)){
return false;
}
}
return true;
}
[/php]

获取数据的页面,这里需要通过表单来提交手动的验证码

[php]

define("SITE_PATH", $_SERVER[‘DOCUMENT_ROOT’]);
require_once SITE_PATH.’/class/SimpleHtmlDom.class.php’;
class GetData{

private $url ;

public function __construct(){

$this->url = "http://union.sogou.com/index.action?searchBean.timeSegment=yestoday";
$this->LoginUrl = "http://union.sogou.com/";
$this->PostData = $this->LoginUrl."loginauth.action";
$this->table = "dwz_union";

}

public function post($code)
{
$POST[‘loginFromPage’] = "homePage";
$POST[‘username’] = "xxxxxx";
$POST[‘password’] = "xxxxx";
$POST[‘activecode’] = $code;
$POST[‘button.x’]="14";
$POST[‘button.y’]="16";

foreach($POST as $key=>$value)
{
$tmp[] = $key."=".$value;
}

$postStr = implode("&", $tmp);

$filedir = SITE_PATH."/TMP/Cookies";
$cookie_file = $filedir."/cookie.txt";

$result = $this->curl($this->PostData, "http://union.sogou.com/loginauth.action", $postStr, $cookie_file);

$url = "http://union.sogou.com/index.action";

$postArr = "searchBean.timeSegment=yestoday";

$response = $this->curl($url, " http://union.sogou.com/index.action?pid=dengwz7788", $postArr, $cookie_file);

$this->saveData($response);
}

private function saveData($response)
{

$dom = str_get_html($response);

$tmp = $dom->find(‘div.rtable table tbody tr’,1)->plaintext;

$data = preg_split("/\s+/i", $tmp);

$this->link();

$date = date(‘Y-m-d’,strtotime(‘-1 day’));
$datetime = date(‘Y-m-d H:i:s’);
$money = $data[‘4’];
$shows = $data[‘2’];
$times = $data[‘3’];

$sql = "select sum(money) as total from {$this->table}";

$query = mysql_query($sql);

$totaTmp = mysql_fetch_row($query);

var_dump($totalTmp);

if(empty($totaTmp[‘0’]))
{
$total = $money;
}else{
$total = $totaTmp[‘0’]+$money;
}

$sql = "insert into {$this->table}(date,datetime,money,shows,times,total) values(‘{$date}’,'{$datetime}’,'{$money}’,'{$shows}’,'{$times}’,'{$total}’)";

mysql_query($sql);
}

private function link()
{
$link = mysql_connect(‘localhost’, ‘root’, ”);
mysql_select_db(‘dblog’, $link);
mysql_query(‘SET NAMES utf8’);
}

private function saveHtml($infomation,$filedir,$filename)
{

if(!$this->mkdirs($filedir))
{
return 0;
}

$sf = $filedir."/".$filename;
$fp=fopen($sf,"w"); //写方式打开文件
fwrite($fp,$infomation); //存入内容
fclose($fp); //关闭文件
}

//创建目录
private function mkdirs($dir)
{
if(!is_dir($dir))
{
if(!$this->mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir,0777)){
return false;
}
}
return true;
}

public function login()
{

$filedir = SITE_PATH."/TMP/Cookies";

if(!$this->mkdirs($filedir))
{
echo "目录创建失败";
exit;
}

$cookie_file = $filedir."/cookie.txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->LoginUrl);
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
//curl_setopt($ch, CURLOPT_REFERER, "http://125.89.69.234");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, "10");

$response = curl_exec($ch);

curl_close($ch);

// 鍏抽棴CURL浼氳瘽

}

private function curl($url,$url2,$fields,$cookie_file)
{

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: union.sogou.com" ));
curl_setopt($ch, CURLOPT_REFERER,$url2);

$response = curl_exec($ch);

//echo curl_error($ch);
curl_close($ch);
return $response;
}

}

$GetData = new GetData();

if(isset($_POST[‘code’]))
{
$GetData->POST($_POST[‘code’]);

}

[/php]

PHP代码下载

一道PHP笔试题(进阶必备)

上次,一个前辈发了一道PHP笔试给我,题目大致如下

[php]

$arr = array(‘1′,’2′,’3’);

foreach($arr as $key=>&$val){}

foreach($arr as $key=>$val){}

var_dump($arr);

[/php]

问答案是什么?

看完我就懵了?根本不知道问题的考点在那里,看完两个foreach的区别在一个是取了地址,一个没有取地址,,这样会影响结果吗?

结果输出的结果居然是

[php]
array(
0 => string ‘1’ (length=1)
1 => string ‘2’ (length=1)
2 => &string ‘2’ (length=1)
)
[/php]

继续阅读

LOL数据远程获取

好久没更新博客了,主要最近有一个想法,打算把它实现出来。

过几天网站就要上线了。

最近完成了一个小功能,就是LOL数据获取,

比如:我给你一个号,你把这个号是否打过排位?战斗力是多少?胜率和所在的总场数数据获取过来

数据都在多玩的网站上可查,所以该做的功能就是远程抓取。

LOL数据图

LOL数据图

功能没啥亮点,就是简单的实现。 继续阅读

PHP的文件上传处理

最近遇到一个事,把自己坑了好久,我想说说我开始的想法

PHP的上传机制封装的很完全,基本几行代码就能实现,他的实现流程是这样的

UPLOAD到文件到临时目录中–>使用move_uploadde_file()到指定的目录 

这就是PHP上传流程,或者你在中途再进行一些验证。例如判断是不是通过upload方式提交的文档,或者文件的扩展是不是我们允许的

等等一系列验证。我给出简单的代码也算是抛砖引玉了。

[php]
$targetFolder = ‘/uploads’; // 定义根目录
if (!empty($_FILES)) {
$tempFile = $_FILES[‘Filedata’][‘tmp_name’];
if(is_uploaded_file($tempFile))
{
$targetPath = $_SERVER[‘DOCUMENT_ROOT’] . $targetFolder;
$targetFile = rtrim($targetPath,’/’) . ‘/’ . $_FILES[‘Filedata’][‘name’];
$fileTypes = array(‘jpg’,’jpeg’,’gif’,’png’); // 允许的后缀扩展
$fileParts = pathinfo($_FILES[‘Filedata’][‘name’]);
if (in_array($fileParts[‘extension’],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo ‘1’;
} else {
echo ‘非法上传文档.’;
}
}else
{
echo "非法上传文件";
}
}
[/php]

上面的这种方式基本就满足了文件上传。但我需要的不是这样的。 继续阅读

Centos 下安装php的redis扩展

redis

redis

在完全不懂liunx的前提下,抱着摸索的心里用centos 强大的yum 功能实现了LAMP分步安装,这里就不讲这些,都不是重点。重点是后面坑爹redis安装。

PHP-redis 下载连接:http://windows.php.net/downloads/pecl/snaps/redis/2.2.4/百度了半天都找不到,今天特意贴出来,方便一下查看

怎么下载redis安装包?提前是你要先完成Wget的功能安装,然后才能实现网页内容的抓起,下载地址网上一搜一大把。下载一个下载包?然后解压。

他们都说的很简单tar什么的。但为什么我解压不了? 继续阅读

安装PHP扩展须知

其实PHP环境基本上现在分为两种:Apache和IIS(这里说的是window平台)

由于这两种调用的CGI不一样,IIS一般用的是fastcgi,而Apache一般用的ISAPI(这里说的是一般情况,你可以自己修改)

由于这两个CGI就出现了 线性安全和非线性安全 二种模式编辑的扩展(听说是这个PHP扩展开发人员就是在参照Liunx环境开发的)

简单的记住是:fastcgi 不需要线性安全检查,所以,IIS下使用fastcgi就选非线性安全扩展。反之

为什么要这样?因为IIS每次连接都会做线性安全检查,不需要PHP再去处理了。

分清了线性安全和非线性安全的问题后?有来了一个VC6和VC9两种编译区别?

VC6是什么?

VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。

VC9是什么?

VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?

如果你是在windows下使用Apache+PHP的,请选择VC6版本;

如果你是在windows下使用IIS+PHP的,请选择VC9版本。

就这么理解吧。挺不错的

然后,在安装PHP扩展安装不上,而且又不会报错的情况上。现在查找错误?

你需要的借鉴apache提供的错误日志。查看环境日志是一个不错的习惯。Thinkphp在运行的过程会产生一个runtime文件

里面就有程序执行记录。日志系统是很重要的查BUG和分析错误的工具。

—-

快定位出本次PHP是否为线性安全?打印出PHPinfo()

php

 

从这个字段可以看出,我安装的PH是TS 线性安全的,并且是VC11的版本。。

基于thinkphp开发一个管理系统后台

日志

前几天,跳槽到了另一家公司做PHP,但我发现为嘛我整天都是在写jquery。

一来就要我写一个WEB管理里面,然各种网上找UI。还真让找到了

WEB后台管理系统

WEB后台管理系统

不错吧~当时我看到这个页面我灵感就来了,然后各种微创新。

主要是做一个数据处理,JS 对json的解析,jquery对json的解析可以能见到 继续阅读

PHP定时更新程序设计

说道定时器,我以前一直进入一个死胡同,而且一直迷惑不解的是:“服务器怎么能直接去执行PHP代码?”

现在回想起来,我以前的想法是错误的,网页的执行流程

 打开WEB页面 —- 加载HTML代码 (包括CSS,javascript)— 执行PHP代码 — 完成 

粗约的就先理解成上面的这个样子。

我们都知道PHP做成服务器端的脚本,它是有超时设置的,可以通过 set_time_limit() 函数来处理。但这样处理PHP代码十分

消耗CPU资源。所以不建议通过循环处理PHP代码来实现。

一般的情况是用javascript来处理。

[javascript]
$(function(){
var tims = 1000*60*60*10; //设置延迟处理的时间,这里设置的是10个小时
 setInterval(function(){
//要执行的码
$.post("./data.php",{ postdata },function(datas){
if(id.data == 1)
{
  $("body").append(id.info+"<br/>");
}
});
},tims);
},json);
[/javascript]

上面是WEB前台要执行的javascript代码,通过延时执行ajax来达到自动处理的效果 继续阅读

创新实验室大一学生培养计划—WEB开发组

日志

WEB开发职位

1. web前端开发工程师

职位要求:

计算机及相关专业本科以上学历 

精通JavaScriptAjaxWeb开发技术,有良好的程序设计和架构能力 

精通html/xhtmlcss等网页制作技术,熟悉页面架构和布局 

熟悉PHP程序开发; 

熟悉web标准,对表现与数据分离,html语义化等有深刻理解 

web技术钻研有强烈兴趣,有良好的学习能力和强烈的进取心 

思维缜密、思路清晰,较好的逻辑分析能力 

良好的沟通和口头、书面表达能力 

2. Web架构师

职位要求:

本科(含)以上 

具有5年以上互联网产品研发经验  继续阅读