2019年11月24日 | 标签:

 

php周期运行在liunux很简单 但是在windows就不容易了 主要通过计划任务 但是计划任务只能设置固定的运行间隔时间 比如我想设置每隔3天运行  过段时间我又想改为每隔2天运行  这样就要去修改计划任务

能不能只修改php代码 就实现自定义的运行间隔时间呢 答案是可以的

交代原理

在php文件目录下创建一个txt文件 然后设置这个php是每天运行, 在txt文件中的第一行设置一个1/3这样的数 每次运行一次分子就加一变成2/3 每次运行分子加一 然后求余数 如果余数为0 就允许 那么分母就是要每个n天运行的间隔

通过php可以修改这里的分母 每次允许可以修改分子为5

 

$contents=file_get_contents(“db.txt”);
$firstline=explode(“*”,$contents,3);//1/3
$firstline1=explode(“/”,$firstline[1]);//$firstline[1]=1/3
$f0=(int)$firstline1[0];//已经运行的天数$firstline1[0]
$f1=(int)$firstline1[1]; //已经运行的运行间隔天数 $firstline1[1]
$firstline1[0]++;
$new=$firstline1[0].”/”.$firstline1[1];
$old=$firstline[1];
$contents=str_replace($old,$new,$contents);
file_put_contents(“db.txt”,$contents);
if ($f0%$f1!==0) echo “还可以再偷懒”.($f1-$f0%$f1).”天”;
else
echo “开始干活了”;

php周期运行在liunux很简单 但是在windows就不容易了 主要通过计划任务 但是计划任务只能设置固定的运行间隔时间 比如我想设置每隔3天运行  过段时间我又想改为每隔2天运行  这样就要去修改计划任务

能不能只修改php代码 就实现自定义的运行间隔时间呢 答案是可以的

交代原理

在php文件目录下创建一个txt文件 然后设置这个php是每天运行, 在txt文件中的第一行设置一个1/3这样的数 每次运行一次分子就加一变成2/3 每次运行分子加一 然后求余数 如果余数为0 就允许 那么分母就是要每个n天运行的间隔

通过php可以修改这里的分母 每次允许可以修改分子为5

 

$contents=file_get_contents(“db.txt”);
$firstline=explode(“*”,$contents,3);//1/3
$firstline1=explode(“/”,$firstline[1]);//$firstline[1]=1/3
$f0=(int)$firstline1[0];//已经运行的天数$firstline1[0]
$f1=(int)$firstline1[1]; //已经运行的运行间隔天数 $firstline1[1]
$firstline1[0]++;
$new=$firstline1[0].”/”.$firstline1[1];
$old=$firstline[1];
$contents=str_replace($old,$new,$contents);
file_put_contents(“db.txt”,$contents);
if ($f0%$f1!==0) echo “还可以再偷懒”.($f1-$f0%$f1).”天”;
else
echo “开始干活了”;

没有评论 (269 views)
2019年11月23日 | 标签:

先看效果

www.xcar.com.cn
www.pcauto.com.cn
www.jimi168.com
www.feelcars.com
www.chinaunix.net
www.cheshi.com
www.app111.com
auto.sohu.com
auto.sina.com.cn
auto.people.com.cn
auto.msn.com.cn
auto.china.com
auto.163.com
抓取这13个网站
我使用了curl 单线程抓取 所有内容然后放入变量中
耗时是33秒
然后我使用curl的多线程抓取 然后放置内容到函数中 用事是8秒 速度快了4倍以上 平均1秒可以分析2个网页
这还是在网速很卡的情况下
所以可以预估的是
如果是我多线程 设置好参数 查询13个社交平台的数据进行分析 是可以在3秒之内完成结果的
我们先进行打基数
直接看代码
先是单线程代码
<?php
$curl = curl_init();// 初始化一个 cURL 对象
curl_setopt($curl, CURLOPT_URL, ‘http://www.163.com’);// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_HEADER, 0);// 设置header
curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36”);   //直接用chrome的开发工具打开网页然后抄下你的发送的request中agent参数
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);// 设置cURL 参数,要求结果保存到字符串中如果是0就是直接打印在频幕上 如果不设置就直接打印在屏幕上 这里我们需要保存在字符串所以是true。
$data = curl_exec($curl);// 运行cURL,请求网页
curl_close($curl);// 关闭URL请求 释放内存
echo $data;// 显示获得的数据
?>
上面就是最简单的例子 获取网页 然后复制到变量 再显示网页上
需要主要就是returntransfer要设置为1 确保返回给变量 然后就是agent数据要用chrome里面查询到的
关于更多的setopt 可以这里查询
http://php.net/manual/zh/function.curl-setopt.php
然后我们做一个循环 查询13个网站
<?php
$urls = array(
‘www.xcar.com.cn’,
‘www.pcauto.com.cn’,
‘www.jimi168.com’,
‘www.feelcars.com’,
‘www.chinaunix.net’,
‘www.cheshi.com’,
‘www.app111.com’,
‘auto.sohu.com’,
‘auto.sina.com.cn’,
‘auto.people.com.cn’,
‘auto.msn.com.cn’,
‘auto.china.com’,
‘auto.163.com’
);
$curl = curl_init();
//开始计时,放在头部
$pagestartime=microtime();
foreach($urls as $url){
// 初始化一个 cURL 对象
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 0);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36”);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 运行cURL,请求网页
$data = curl_exec($curl);
 @$totaldata=$totaldata.$data;
}
// 关闭URL请求
curl_close($curl);
//结束计时,放在最底部
$pageendtime = microtime();
$starttime = explode(” “,$pagestartime);
$endtime = explode(” “,$pageendtime);
$totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
$timecost = sprintf(“%s”,$totaltime);
echo “页面运行时间: $timecost seconds”;
echo $totaldata;
?>
这里我们使用了计时器 查看查询这些网址并且赋值给变量要多久
需要注意的是先输出时间 再输出html源代码 否则源代码这么长 显示出来要等很久
再看看使用curl的多线程的方法
<html>
 <meta  charset=”gb2312″>
 <?php
 set_time_limit(0);
//开始计时,放在头部
$pagestartime=microtime();
$urls = array(
‘www.xcar.com.cn’,
‘www.pcauto.com.cn’,
‘www.jimi168.com’,
‘www.feelcars.com’,
‘www.chinaunix.net’,
‘www.cheshi.com’,
‘www.app111.com’,
‘auto.sohu.com’,
‘auto.sina.com.cn’,
‘auto.people.com.cn’,
‘auto.msn.com.cn’,
‘auto.china.com’,
‘auto.163.com’
);
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
  $conn[$i] = curl_init($url);
  curl_setopt($conn[$i], CURLOPT_USERAGENT, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36”);
  curl_setopt($conn[$i], CURLOPT_HEADER ,0);
  curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
  curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);  // 设置不将爬取代码写到浏览器,而是转化为字符串
  curl_multi_add_handle ($mh,$conn[$i]);
}
do {
  curl_multi_exec($mh,$active);
} while ($active);
foreach ($urls as $i => $url) {
  $data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串
  @$totaldata=$totaldata.$data;
} // 获得数据变量,并写入文件
foreach ($urls as $i => $url) {
  curl_multi_remove_handle($mh,$conn[$i]);
  curl_close($conn[$i]);
}
curl_multi_close($mh);
//结束计时,放在最底部
$pageendtime = microtime();
$starttime = explode(” “,$pagestartime);
$endtime = explode(” “,$pageendtime);
$totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
$timecost = sprintf(“%s”,$totaltime);
echo “页面运行时间: $timecost seconds”;
echo $totaldata;
?>
</html>

先看效果

www.xcar.com.cn
www.pcauto.com.cn
www.jimi168.com
www.feelcars.com
www.chinaunix.net
www.cheshi.com
www.app111.com
auto.sohu.com
auto.sina.com.cn
auto.people.com.cn
auto.msn.com.cn
auto.china.com
auto.163.com
抓取这13个网站
我使用了curl 单线程抓取 所有内容然后放入变量中
耗时是33秒
然后我使用curl的多线程抓取 然后放置内容到函数中 用事是8秒 速度快了4倍以上 平均1秒可以分析2个网页
这还是在网速很卡的情况下
所以可以预估的是
如果是我多线程 设置好参数 查询13个社交平台的数据进行分析 是可以在3秒之内完成结果的
我们先进行打基数
直接看代码
先是单线程代码
<?php
$curl = curl_init();// 初始化一个 cURL 对象
curl_setopt($curl, CURLOPT_URL, ‘http://www.163.com’);// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_HEADER, 0);// 设置header
curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36”);   //直接用chrome的开发工具打开网页然后抄下你的发送的request中agent参数
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);// 设置cURL 参数,要求结果保存到字符串中如果是0就是直接打印在频幕上 如果不设置就直接打印在屏幕上 这里我们需要保存在字符串所以是true。
$data = curl_exec($curl);// 运行cURL,请求网页
curl_close($curl);// 关闭URL请求 释放内存
echo $data;// 显示获得的数据
?>
上面就是最简单的例子 获取网页 然后复制到变量 再显示网页上
需要主要就是returntransfer要设置为1 确保返回给变量 然后就是agent数据要用chrome里面查询到的
关于更多的setopt 可以这里查询
http://php.net/manual/zh/function.curl-setopt.php
然后我们做一个循环 查询13个网站
<?php
$urls = array(
‘www.xcar.com.cn’,
‘www.pcauto.com.cn’,
‘www.jimi168.com’,
‘www.feelcars.com’,
‘www.chinaunix.net’,
‘www.cheshi.com’,
‘www.app111.com’,
‘auto.sohu.com’,
‘auto.sina.com.cn’,
‘auto.people.com.cn’,
‘auto.msn.com.cn’,
‘auto.china.com’,
‘auto.163.com’
);
$curl = curl_init();
//开始计时,放在头部
$pagestartime=microtime();
foreach($urls as $url){
// 初始化一个 cURL 对象
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 0);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36”);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 运行cURL,请求网页
$data = curl_exec($curl);
 @$totaldata=$totaldata.$data;
}
// 关闭URL请求
curl_close($curl);
//结束计时,放在最底部
$pageendtime = microtime();
$starttime = explode(” “,$pagestartime);
$endtime = explode(” “,$pageendtime);
$totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
$timecost = sprintf(“%s”,$totaltime);
echo “页面运行时间: $timecost seconds”;
echo $totaldata;
?>
这里我们使用了计时器 查看查询这些网址并且赋值给变量要多久
需要注意的是先输出时间 再输出html源代码 否则源代码这么长 显示出来要等很久
再看看使用curl的多线程的方法
<html>
 <meta  charset=”gb2312″>
 <?php
 set_time_limit(0);
//开始计时,放在头部
$pagestartime=microtime();
$urls = array(
‘www.xcar.com.cn’,
‘www.pcauto.com.cn’,
‘www.jimi168.com’,
‘www.feelcars.com’,
‘www.chinaunix.net’,
‘www.cheshi.com’,
‘www.app111.com’,
‘auto.sohu.com’,
‘auto.sina.com.cn’,
‘auto.people.com.cn’,
‘auto.msn.com.cn’,
‘auto.china.com’,
‘auto.163.com’
);
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
  $conn[$i] = curl_init($url);
  curl_setopt($conn[$i], CURLOPT_USERAGENT, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36”);
  curl_setopt($conn[$i], CURLOPT_HEADER ,0);
  curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
  curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);  // 设置不将爬取代码写到浏览器,而是转化为字符串
  curl_multi_add_handle ($mh,$conn[$i]);
}
do {
  curl_multi_exec($mh,$active);
} while ($active);
foreach ($urls as $i => $url) {
  $data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串
  @$totaldata=$totaldata.$data;
} // 获得数据变量,并写入文件
foreach ($urls as $i => $url) {
  curl_multi_remove_handle($mh,$conn[$i]);
  curl_close($conn[$i]);
}
curl_multi_close($mh);
//结束计时,放在最底部
$pageendtime = microtime();
$starttime = explode(” “,$pagestartime);
$endtime = explode(” “,$pageendtime);
$totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
$timecost = sprintf(“%s”,$totaltime);
echo “页面运行时间: $timecost seconds”;
echo $totaldata;
?>
</html>
没有评论 (187 views)
2019年11月22日 | 标签:

 

今天用div css 模仿公司的网站 总结下心得

首先要有大局观 看看网站从上到下 可以横着切成几个部分 例如我的例子中他就分 head main more info footer
这个4个部分 然后要用一个大的div 叫container的把这4个都包起来 方便整个页面的居中定位和以后增加背景色
然后这个4个部分都可以继承这个container的宽度
这里有个知识点 如果div里面没内容的话 div的背景色是不现实
只用增加一个高度属性就可以  每一个部分我们可以增加一个4边的图片的边框 边框的制作也是有技巧 我们也是横着
切3次 顶部边框一个长的,中间边框其实就是左柱 和右柱 向下填充用的是background:url() repeat-y,这里注意下比如说这个head 里面内嵌3个 自身的背景就用边框的左右 里面内嵌的第一个是边框顶部 第2个是边框底部;就可以把这4个
部分加漂亮的外边框(有阴影 有反光的 切3刀就可以)
有了整体定位以后 还有内部的定位问题 如果一个大的div里面嵌套小的div 你要定位的话记得小div用position:relative 这养可以定位 父子关系,兄弟关系的div 及同级别的 是可以用margin定位的
还有ul li的问题li和ul都是内敛元素 可以用display:block来解决 定义高低 同时加上float:left 就可以横着了排列
css精灵 这个技巧很重要 方便把小的icon或者大的点图片合并在一个图里面 再通过background:url以及background:postion来显示 这样5个图片整合在一个图片里面 分别显示的时候 通过postion移动现实就可以配合li使用 效果更加
还有一些小的图表也可以的

今天用div css 模仿公司的网站 总结下心得

首先要有大局观 看看网站从上到下 可以横着切成几个部分 例如我的例子中他就分 head main more info footer
这个4个部分 然后要用一个大的div 叫container的把这4个都包起来 方便整个页面的居中定位和以后增加背景色
然后这个4个部分都可以继承这个container的宽度
这里有个知识点 如果div里面没内容的话 div的背景色是不现实
只用增加一个高度属性就可以  每一个部分我们可以增加一个4边的图片的边框 边框的制作也是有技巧 我们也是横着
切3次 顶部边框一个长的,中间边框其实就是左柱 和右柱 向下填充用的是background:url() repeat-y,这里注意下比如说这个head 里面内嵌3个 自身的背景就用边框的左右 里面内嵌的第一个是边框顶部 第2个是边框底部;就可以把这4个
部分加漂亮的外边框(有阴影 有反光的 切3刀就可以)
有了整体定位以后 还有内部的定位问题 如果一个大的div里面嵌套小的div 你要定位的话记得小div用position:relative 这养可以定位 父子关系,兄弟关系的div 及同级别的 是可以用margin定位的
还有ul li的问题li和ul都是内敛元素 可以用display:block来解决 定义高低 同时加上float:left 就可以横着了排列
css精灵 这个技巧很重要 方便把小的icon或者大的点图片合并在一个图里面 再通过background:url以及background:postion来显示 这样5个图片整合在一个图片里面 分别显示的时候 通过postion移动现实就可以配合li使用 效果更加
还有一些小的图表也可以的
没有评论 (234 views)