技巧:详解PHP实现定时任务的五种方法
优采云 发布时间: 2022-11-03 04:13技巧:详解PHP实现定时任务的五种方法
详解PHP实现定时任务的五种方法
更新时间:2016-07-25 09:52:14 发布者:daisy
这些天,我需要使用 PHP 编写一个定期爬取网页的服务器应用程序。我在网上搜索了解决方案,找到了几种解决方案,总结如下。
对于一个网站来说,定时运行任务是比较重要的任务,比如定时发布文档、定时清理垃圾信息等等。目前的网站大部分都是用PHP开发的动态语言,而PHP的实现决定了它没有Java、.Net等AppServer的概念,而http协议是无状态协议。PHP 只能由用户触发和调用。调用后会自动退出内存,没有常驻内存。
如果必须使用 PHP 来实现定时任务,可以有以下解决方案:
1.简单直接的鲁莽
cron.php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
$run = include 'config.php';
if(!$run) die('process abort');
<p>
//ToDo
sleep($interval);// 等待5分钟
}
while(true);</p>
通过更改 config.php 的返回 0 来停止程序。一个可行的方法是在config.php文件中与一个特殊的表单进行交互,通过HTML页面配置一些变量
缺点:占用系统资源,运行时间长,会有一些意想不到的隐患。比如内存管理问题。
3.简单的改进
php脚本sleep一段时间后通过访问自身继续执行。这就像一场接力赛。这确保了每个 PHP 脚本的执行时间不会太长。它不受time_out 的限制。
因为每个循环php文件都是独立执行的,所以这种方法避免了time_out的限制。但最好像上面那样添加控制代码。cofig.php ,以便可以终止进程。
4.服务器计划任务
Unix平台
如果您使用的是 Unix 系统,则需要在 PHP 脚本前添加一行特殊代码以使其可执行,以便系统知道使用什么程序来运行该脚本。为 Unix 系统添加的第一行代码不影响脚本在 Windows 下的运行,因此您也可以使用此方法编写跨平台脚本。
1.在crontab中使用php执行脚本
就像在 Crontab 中调用普通的 shell 脚本(具体 Crontab 用法)一样,使用 PHP 程序调用 PHP 脚本,每小时执行一次 myscript.php 如下:
# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php
/usr/local/bin/php 是 PHP 程序的路径。
2. 使用 Crontab 中的 URL 执行脚本
如果你的 PHP 脚本可以通过 URL 触发,你可以使用 lynx 或 curl 或 wget 来配置你的 Crontab。
以下示例使用 Lynx 文本浏览器访问 URL 以每小时执行一个 PHP 脚本。Lynx 文本浏览器默认以会话模式打开 URL。但是,如下所示,我们使用 lynx 命令行上的 -dump 选项将 URL 输出转换为标准输出。
00 * * * * lynx -dump http://www.sf.net/myscript.php
下面的示例使用 CURL 访问 URL 以每 5 分钟执行一次 PHP 脚本。Curl 默认在标准输出上显示输出。使用“curl -o”选项,您还可以将脚本的输出转储到临时文件 temp.txt。
<p>
*/5 * * * * /usr/bin/curl -o temp.txt http://www.sf.net/myscript.php</p>
以下示例使用 WGET 访问 URL 以每 10 分钟执行一次 PHP 脚本。-q 选项表示安静模式。“-O temp.txt”表示将输出发送到临时文件。
*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.sf.net/myscript.php
5.ini_set函数使用详解
PHP ini_set 用于设置 php.ini 的值,该值在函数执行时生效。脚本结束后,设置无效。不用打开php.ini文件就可以修改配置,对于虚拟空间来说非常方便。
函数格式:
string ini_set(string $varname, string $newvalue)
并非所有参数都可以配置,请参阅手册以获取列表。
常用设置:
@ ini_set('memory_limit', '64M');
menuy_limit:设置脚本可以申请的最大内存字节数,这有助于编写不好的脚本消耗服务器上的可用内存。@ 符号表示不输出错误。
@ini_set('display_errors', 1);
display_errors:设置错误信息的类别。
@ini_set('session.auto_start', 0);
session.auto_start:是否自动开启会话处理,设置为1时,程序可以使用不带session_start()的session手动开启会话,
如果参数为0,并且没有手动打开会话,会报错。
@ini_set('session.cache_expire', 180);
session.cache_expire:指定客户端缓存中会话页面的有限期限(分钟)。默认值为 180 分钟。如果设置了 session.cache_limiter=nocache,则此处的设置无效。
@ini_set('session.use_cookies', 1);
session.use_cookies:客户端是否使用cookies保存会话ID;
@ini_set('session.use_trans_sid', 0);
session.use_trans_sid:是否使用明文显示URL中的SID(会话ID),
不允许使用默认设置,因为它会给您的用户带来安全风险:
用户可以通过 email/irc/QQ/MSN 等方式告诉其他人收录有效 sid 的 URL。
收录有效 sid 的 URL 可以保存在公共计算机上。
用户可以将具有固定 SID 的 URL 保存在他们的采集夹或浏览历史记录中。基于 URL 的会话管理总是比基于 cookie 的会话管理风险更大,应该禁用。
PHP 计时任务是一个非常有趣的东西。以上是本文提供的一些解决方案。您也可以通过本文的思路开发自己的解决方案。希望能帮助到每个有需要的人。
技巧:SEO外链高级操作策略
许多SEO认为反向链接对SEO影响不大,但事实并非如此。外部链接对SEO还是很有帮助的,但前提是高质量的外部链接。
由于几乎所有优质的网站都不允许其他网站在自己的平台上发外链,所以好的外链平台越来越少,而且越来越多更难获得它们。太多的SEO会去一些垃圾网站发布外链,所以外链质量很差,当然对SEO没有帮助。
接下来,汨罗SEO来聊聊SEO的高级运营策略。
首先,我们需要了解外部链接的作用
1 吸引蜘蛛到 网站
如果网站的内容是收录,需要吸引蜘蛛到网站进行爬取,蜘蛛通过连接发现新的内容和网站,所以去发布外部的外部链接可以吸引地址爬取页面
2 增加网站的权重
外链也是一个连接,所以外链也可以传递权重,所以优质的外链可以给网站加票,有利于排名
3. 给网站带来流量
如果一个网站 想要产生收益,它必须有用户。通过外部链接,我们可以吸引潜在用户到我们的网站浏览和转化
外部链接的形式
1.纯文本
纯文本形式的外部链接是无法点击的,源码中是一个URL。例如:
2.链接形式
链接表单是一个可点击的外部链接,它的第二个文本也是一个链接栏比如源代码中的A标签
3.锚文本形式
锚文本是可点击的外部链接,其锚文本是可点击的文本。例如:汨罗SEO
外链的有效原理
1.以上链接只对收录的页面生效
2. 收录页面的权重影响外链的质量。网站的权重越高,上述外链传递的权重就越大,
外链操作过程中需要注意的事项:
1.不要欺骗外部链接。在百度眼里,如果一个网站作弊,会导致被k站封杀
1.购买链接:从一些外链购买平台购买,黑色网站等锚文本点也会导致K
锚文本过于单一:如果一个网站的所有锚文本都来自同一个关键词,那么明显是故意发外链,也会被判定为作弊
全部指向首页:如果一个网站的外链全部指向首页,也是作弊的表现
外链群发:不要使用任何外链群发工具进行外链群发
所以正确的外链思维
1、外链来源不能太单一,要多找外链平台
2、外链要追求稳定,最好不要发布经常删除外链的平台
3、不要在垃圾平台发布外链,都是垃圾外链
4.垃圾外链越多,风险越大,所以最好只建立稳定安全的外链,然后关注用户需求
5.如果想要稳定的外链,可以考虑进入一些SEO圈子,交换友情链接
6. 最好引导用户帮助我们发布外部链接,比如送一些小礼物
7.如果垃圾外链过多,使用百度站长平台拒绝这些垃圾外链