2019年11月26日 | 标签:

定时执行php的原理 最好的是利用操作系统的功能

用php的话会一直占用内存去计算(比如给php设置一个初始值 然后sleep多少秒执行一次) 这样的方法php会一直允许 当有几百个任务的时候 内存就耗尽

还有一种就是操作系统法  操作系统内部都有定时器 liunux有大名鼎鼎的cron 在windows中是 计划任务

本例就是在windows下面定时允许php的方法

定时任务的原理

1.单击“开始”按钮,然后依次选择“程序”→““控制面板”→“任务计划”),启动Windows 2003的任务计划管理程序。

查看更多精彩图片

1选择你要定期执行的文件 windows里面就用bat批处理文件 后面交代了写法
查看更多精彩图片

2先选择每天执行 然后再重复

查看更多精彩图片

 

3这里要输入执行的权限 用的管理员的帐号密码

查看更多精彩图片

4打开高级属性

查看更多精彩图片

5选择日程安排下的高级

查看更多精彩图片

6这里你可以选择重复

查看更多精彩图片

附赠bat文件和php文件的写法

写php注意网上的代码的双引号要换成英文的 还有分号

当然你开启display error的时候看到语法错误 第一个就要想到标点中英文问题

 

每隔一分钟 自动执行php文件 写入到txt文件中

 

1、 编辑如下代码,并保存为test.php:
<?php
$fp = @fopen(“test.txt”, “a+”);
fwrite($fp, date(“Y-m-d H:i:s”) . ” PHP代码自动运行!\r\n”);
fclose($fp);
?>

就这段代码 网上的全部是错的 原因就是里面的双引号 是中文输入法的双引号

可能是最开始的版本是正确的 但是有的cms自动替换安全的中文双引号 就导致这个结果

txt文件的换行是\r\n

在写php的过程中 也碰到一个查错的问题 所以在php的配置文件php。ini里面 打开报错展示

 display_errors = On

 

同时最好顺便把时区也交代下
date.timezone = “Asia/Shanghai”

 

新建一个文本文件,打开输入:”D:\php4\php.exe” -q “D:\php4\test.php ” 保存为.bat格式(注意空格)。
D:\php4\php.exe 是php安装路径下的那个文件,具体路径修改成自己的,D:\php4\test.php是要定时运行的程序的路径。
2、添加一个任务计划,选择那个.bat文件

3、时间设置为每隔1分钟运行一次,然后运行这个任务。

每分钟运行这里也是有技巧的

右键点新任务 选属性-日程安排-高级-选重复时间 如图 搞定

查看更多精彩图片

4、现在我们来看看d:\php4\test.txt文件的内容时候是否成功。如果内容为如下所示,那么恭喜你成功了。

定时执行php的原理 最好的是利用操作系统的功能

用php的话会一直占用内存去计算(比如给php设置一个初始值 然后sleep多少秒执行一次) 这样的方法php会一直允许 当有几百个任务的时候 内存就耗尽

还有一种就是操作系统法  操作系统内部都有定时器 liunux有大名鼎鼎的cron 在windows中是 计划任务

本例就是在windows下面定时允许php的方法

定时任务的原理

1.单击“开始”按钮,然后依次选择“程序”→““控制面板”→“任务计划”),启动Windows 2003的任务计划管理程序。

查看更多精彩图片

1选择你要定期执行的文件 windows里面就用bat批处理文件 后面交代了写法
查看更多精彩图片

2先选择每天执行 然后再重复

查看更多精彩图片

 

3这里要输入执行的权限 用的管理员的帐号密码

查看更多精彩图片

4打开高级属性

查看更多精彩图片

5选择日程安排下的高级

查看更多精彩图片

6这里你可以选择重复

查看更多精彩图片

附赠bat文件和php文件的写法

写php注意网上的代码的双引号要换成英文的 还有分号

当然你开启display error的时候看到语法错误 第一个就要想到标点中英文问题

 

每隔一分钟 自动执行php文件 写入到txt文件中

 

1、 编辑如下代码,并保存为test.php:
<?php
$fp = @fopen(“test.txt”, “a+”);
fwrite($fp, date(“Y-m-d H:i:s”) . ” PHP代码自动运行!\r\n”);
fclose($fp);
?>

就这段代码 网上的全部是错的 原因就是里面的双引号 是中文输入法的双引号

可能是最开始的版本是正确的 但是有的cms自动替换安全的中文双引号 就导致这个结果

txt文件的换行是\r\n

在写php的过程中 也碰到一个查错的问题 所以在php的配置文件php。ini里面 打开报错展示

 display_errors = On

 

同时最好顺便把时区也交代下
date.timezone = “Asia/Shanghai”

 

新建一个文本文件,打开输入:”D:\php4\php.exe” -q “D:\php4\test.php ” 保存为.bat格式(注意空格)。
D:\php4\php.exe 是php安装路径下的那个文件,具体路径修改成自己的,D:\php4\test.php是要定时运行的程序的路径。
2、添加一个任务计划,选择那个.bat文件

3、时间设置为每隔1分钟运行一次,然后运行这个任务。

每分钟运行这里也是有技巧的

右键点新任务 选属性-日程安排-高级-选重复时间 如图 搞定

查看更多精彩图片

4、现在我们来看看d:\php4\test.txt文件的内容时候是否成功。如果内容为如下所示,那么恭喜你成功了。

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 “开始干活了”;

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>