自动PHP脚本
我有一个php/mysql问题: 我正在设计一个网站,它接受xml提要并将它们放入mysql表中。从该表中,我希望mysql获取这些新信息并执行一系列计算,然后更改数据库另一部分中的字段。新更新的信息将显示在网站上 我了解如何:自动PHP脚本,php,mysql,cron,Php,Mysql,Cron,我有一个php/mysql问题: 我正在设计一个网站,它接受xml提要并将它们放入mysql表中。从该表中,我希望mysql获取这些新信息并执行一系列计算,然后更改数据库另一部分中的字段。新更新的信息将显示在网站上 我了解如何: 从xml转换为php 将这些变量放入mysql 计算新信息(理论上使用php) 我不明白的是: 我应该把告诉mysql进行计算的php脚本放在哪里,以及实际的计算是什么 它是否只是进入一个被cron作业调用的数据库上的php文件中?我不知道如何使用linux命令,但
- 从xml转换为php
- 将这些变量放入mysql
- 计算新信息(理论上使用php)
它是否只是进入一个被cron作业调用的数据库上的php文件中?我不知道如何使用linux命令,但我想如果需要的话我可以学习。有没有其他方法可以简单地将脚本放在服务器上,每隔一小时左右调用一次,然后检查是否添加了任何新表,如果添加了新表,它就会进行计算?如果您想安排作业,而不使用cron,理论上可以设置一个页面来发出AJAX请求 在文档就绪时触发AJAX调用:
$.get("my-script.php");
myscript.php的顶部:
$desiredUpdateInteval = 3600; #seconds
$dbLastUpdatedQuery = mysql_query("SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = '*database_name*' AND TABLE_NAME = '*table_name*'");
$dbLastUpdated = strtotime(mysql_result($dbLastUpdatedQuery,0,0));
if((time() - $dbLastUpdated) > $desiredUpdateInterval){
/* do something */
}
您应该注意,这种方法有很多开销,因为您的数据库在每次访问页面时都会被ping。如果您想安排作业,而不使用cron,理论上可以设置一个页面来发出AJAX请求 在文档就绪时触发AJAX调用:
$.get("my-script.php");
myscript.php的顶部:
$desiredUpdateInteval = 3600; #seconds
$dbLastUpdatedQuery = mysql_query("SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = '*database_name*' AND TABLE_NAME = '*table_name*'");
$dbLastUpdated = strtotime(mysql_result($dbLastUpdatedQuery,0,0));
if((time() - $dbLastUpdated) > $desiredUpdateInterval){
/* do something */
}
您应该注意,这种方法有很多开销,因为您的数据库在每次访问页面时都会被ping。您所说的“使用XML的网站”是什么意思?
如果xml是由您自己的php脚本获取的,那么您应该将重新计算调用放在那里。。。如果有新的XML保存到数据库。否则你知道,不需要计算
请在计算结果表中添加一个时间戳属性“last_updated”,如果新xml到达,请更新它,并检查now()>last_updated+3600
,以检查是否超过一小时
-->PHP伪cronjob…您所说的“采用XML的网站”是什么意思?
如果xml是由您自己的php脚本获取的,那么您应该将重新计算调用放在那里。。。如果有新的XML保存到数据库。否则你知道,不需要计算
请在计算结果表中添加一个时间戳属性“last_updated”,如果新xml到达,请更新它,并检查now()>last_updated+3600
,以检查是否超过一小时
-->PHP伪cronjob…是的,cronjob是您正在寻找的。根据您的服务器操作系统风格(我假设是linux),创建一个操作系统相当容易。在Debian系统上,将脚本文件放入
/etc/cron.hourly/
中,每小时运行一次
要创建可从命令行运行的php脚本,请遵循以下格式:
#!/usr/bin/env php
<?php
// do stuff...
?>
#/usr/bin/env-php
不要忘了
chmod+x
脚本。是的,cronjob就是你要找的。根据您的服务器操作系统风格(我假设是linux),创建一个操作系统相当容易。在Debian系统上,将脚本文件放入/etc/cron.hourly/
中,每小时运行一次
要创建可从命令行运行的php脚本,请遵循以下格式:
#!/usr/bin/env php
<?php
// do stuff...
?>
#/usr/bin/env-php
不要忘了
chmod+x
脚本。这里有两个选择。如果您想在数据库中保存东西,那么可以考虑使用。触发器将允许您在发生更新/插入之类的事情时执行操作。因此,在您的场景中,当xml被馈送到db中时,您可以触发一些操作来执行计算,而无需cron作业调用php文件来执行相同的操作
另一个选项是执行cron作业,该作业调用一个php文件,该文件在发生变化时为您进行计算。您必须每x小时启动一个crontab(一些示例-搜索php)来调用php文件(您应该能够将文件放置在您有权访问的任何位置,我会将其保存在站点文件夹中,但不在公共访问范围内,除非您想通过转到url手动调用它),具体取决于您的需要。如果执行此操作,您将创建一个新的php文件,该文件只需检查数据库中的更改,可能需要获取表的最后一个id,并将其与保存在文件系统上的文件中的前一个id进行比较。如果有更改,请执行所有必需的计算和更新,然后再执行,直到稍后再次调用为止。这里有两个选择。如果您想在数据库中保存东西,那么可以考虑使用。触发器将允许您在发生更新/插入之类的事情时执行操作。因此,在您的场景中,当xml被馈送到db中时,您可以触发一些操作来执行计算,而无需cron作业调用php文件来执行相同的操作
另一个选项是执行cron作业,该作业调用一个php文件,该文件在发生变化时为您进行计算。您必须每x小时启动一个crontab(一些示例-搜索php)来调用php文件(您应该能够将文件放置在您有权访问的任何位置,我会将其保存在站点文件夹中,但不在公共访问范围内,除非您想通过转到url手动调用它),具体取决于您的需要。如果执行此操作,您将创建一个新的php文件,该文件只需检查数据库中的更改,可能需要获取表的最后一个id,并将其与保存在文件系统上的文件中的前一个id进行比较。如果有更改,请执行所有必需的计算和更新,然后再执行,直到稍后再次调用为止。
我没有得到的是:我应该将告诉mysql进行计算的php脚本放在哪里,以及实际的计算是什么。
自动=Cron。因为没有它,有人