PHP 第29章 windows计划任务 PHP 第29章 windows计划任务

2017-03-08

一、自动执行 php 代码

1.1、新建auto.bat执行php代码

①、新建 auto.txt

在任意目录新建一份空的 auto.txt,这里我们在 F 盘根目录新建

②、在 auto.txt 的同级目录下新建 auto.php

$p = fopen('auto.txt', 'a');
$date = date('Y-m-d',time());
fwrite($p, $date);
fclose($p);

③、新建 auto.bat

  • 什么是 .bat:一种简单的脚本,DOS 批处理则是基于 DOS 命令的,用来自动地批量地执行 DOS 命令以实现特定操作的脚本

  •  注意 .bat 不要用"记事本"编辑,否则会因为编码的问题执行失败,推荐用 Sublime Text 或者 EditPlus

  • 用 auto.bat 执行 auto.php

"D:\Program Files\phpStudy\php70n\php.exe" -q "F:\auto.php"

备注:"D:\Program Files\phpStudy\php70n\php.exe" 为本地 php.exe 的所在目录

④ 如果想让 cmd 执行后不关闭,在 auto.bat 中添加 pause(换行添加)

"D:\Program Files\phpStudy\php70n\php.exe" -q "F:\auto.php"
pause

⑤、手动执行 auto.bat

双击 auto.bat,执行完毕后打开 auto.txt,你会发现 auto.txt 多了一些文本

https://file.lulublog.cn/images/3/2022/08/meeEtd3V5eV6vCEX2TXv25c3c35356.png

1.2、创建 windows 计划任务

①、点击 windows 系统左下角的“开始”按钮,搜索“任务计划”后打开

https://file.lulublog.cn/images/3/2022/08/zYNZ1Fc8IzO6OOZoFOE65uO1cu2nl5.png

②、在右侧点击“创建基本任务”

https://file.lulublog.cn/images/3/2022/08/LE8dO825xtiYshdEEI2iczexK21BO8.png

  • 名称:test ; 描述:测试任务计划,点击下一步

  • 触发器:每天 ;开始于当前时间的下一分钟,我当前时间是10:19,下一分钟就是 10:20,每隔一天发生一次,点击下一步

  • 操作:启动程序

  • 选择auto.bat

③、测试是否自动执行

10:20分时,打开 auto.txt 查看执行结果

https://file.lulublog.cn/images/3/2022/08/av0jJLm0mY404vMbBH0L4JKV000vha.png

如果遇到需要输入密码的地方,输入服务器的密码!!!

二、PHP 定时完成数据库的备份

2.1、手动备份数据库(表的)方法

①、备份数据

cmd控制台:

mysqldump –u root –proot 数据库 [表名1 表名2..]  > 文件路径

比如: 把temp数据库备份到 d:\temp.bak

mysqldump –u root –proot temp > d:\mysqlBackup\temp.bak

如果你希望备份是,数据库的某几张表

mysqldump –u root –prot temp dept > d:\mysqlBackup\temp.dept.bak

②、如何使用备份文件恢复数据

mysql控制台:

source d:\mysqlBackup\temp.dept.bak

2.2、使用定时器来自动完成

把备份数据库的指令,写入到 bat文件, 然后通过任务管理器去定时调用 bat文件.

mytask.bat 内容是:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump" -u root -proot temp dept > d:\temp.dept.bak

注:如果你的 mysqldump.exe 文件路径有空格,则一定要使用 "" 包括.

把 mytask.bat 做成一个任务,并定时调用在 2:00 调用一次。

现在问题是,每次都是覆盖原来的备份文件,不利用我们分时间段进行备份。

2.3、利用 bat 执行 php文件

①、mytask2.bat

C:\myenv\php-5.3.5\php.exe C:\myenv\apache\htdocs\mytask.php

②、mytask.php代码:

$db = 'yilishabai';
$time = time();
$file = 'E:\mysqlBackup\\'.$db.'_'.date("Ymd",$time).'.bak';
if(!file_exists($file)){
    $command = '"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump" -uroot -proot '.$db.'>'.$file;
    exec($command);
    //只备份三天,所以删除三天前的备份
    $delFile = 'del E:\mysqlBackup\\'.$db.'_'.date("Ymd",$time-3*3600*24).'.bak';
    exec($delFile);
}

 ③、exec语法: string exec(string command, string [array], int [return_var]);

exec返回值: 字符串

Exec参数说明

  • Command – 需要执行的命令

  • Array –  是输出值

  • return_var –是返回值0或1,如果返回0则执行成功,返回1则执行失败。

测试是否有权限执行 exec 命令

exec('cd c:', $output,$return_val);
print_r($return_val);

如果返回 0 则表示有权限执行,如果返回 1 则表示没有权限。那么你就要修改服务器配置。

④、IIS cmd 权限配置

IIS 的配置,进入你要配置的网站,如下图:右键点击权限

01.png

查看 iis 用户,这里为 Users ,如果没有则添加(添加后需要重启服务器)

01.png

右键 "C:\WINDOWS\system32\cmd.exe"

https://file.lulublog.cn/images/3/2022/08/zQf22UUIyzfQPafpxDpvMdpSz4cdSF.png

添加 USers 用户,勾选“读取和运行权限”。

https://file.lulublog.cn/images/3/2022/08/yZ1Jyg08QmZ080U310HQjM62tTZ383.png

⑤、php.ini 配置

打开 php.ini 中,如果 disable_functions 中有 exec,则将其去掉,并重启服务器

阅读 3045