我有一个php / mysql问题:
我正在设计一个网站,它接受xml提要并将它们放入mysql表中。从该表中,我希望mysql获取这些新信息并执行一系列计算,然后更改数据库另一部分中的字段。然后,这些新更新的信息将显示在网站上。
我理解如何:
我没有得到的是: 我在哪里放置告诉mysql进行计算的PHP脚本以及实际计算的内容。
它是否只是在由cron作业调用的数据库中的php文件中?我不知道如何做linux命令虽然我想如果需要我可以学习。有没有其他方法可以简单地将脚本放在服务器上并让它每小时调用一次,并检查是否添加了任何新表,如果是,它会进行计算吗?
答案 0 :(得分:3)
是的,你正在寻找一个cronjob。根据您的服务器操作系统风格(我假设是linux),创建一个相当容易。在Debian系统上,您将脚本文件放在/etc/cron.hourly/
中,并且每小时运行一次。
要创建可以从命令行运行的php脚本,请遵循以下格式:
#!/usr/bin/env php
<?php
// do stuff...
?>
不要忘记chmod +x
剧本。
答案 1 :(得分:1)
如果你想安排一份工作而不使用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 */
}
你应该注意到这个方法有很多开销,因为你的数据库会在每次访问页面时被捕获。
答案 2 :(得分:0)
“采用 XML”的网站是什么意思? 如果xml是由您自己的php脚本获取的,那么您应该将重新计算调用放在那里......如果有新的XML保存到DB。否则你知道,不需要计算。
在计算结果表中输入时间戳属性“last_updated”,如果新的xml到达则更新它并检查now() > last_updated + 3600
,检查是否超过了小时。
- &GT; PHP伪cronjob ......
答案 3 :(得分:0)
这里有几个选择。如果你想保留数据库中的内容,那么你可以查看使用triggers。触发器允许您在发生更新/插入等操作时执行操作。因此,在您的场景中,当xml被提供到您的数据库中时,您可以触发一些操作来执行计算,而无需让cron作业调用php文件来执行相同操作。
另一个选项是执行一个调用php文件的cron作业,如果发生了某些变化,它会为你做计算。你必须启动一个调用php文件的crontab(一些例子here - 搜索php)(你应该能够将文件放在你喜欢的任何地方,你也可以访问它,我会把它保存在网站中)文件夹,但在公共访问之外,除非您希望每x小时手动调用一次,具体取决于您的需要。如果你这样做,你创建一个新的php文件,只需要检查数据库中的更改,可能是通过获取表的最后一个id并将其与您保存在文件系统上的文件中的先前ID进行比较。如果有更改,请执行所有必需的计算和更新,然后完成,直到稍后再次调用。
答案 4 :(得分:0)
What I don't get is: where do I put the php script that tells mysql to do the calculations and what the calculations actually are.
自动= Cron。因为没有它,有人需要通过浏览器或CLI执行脚本。
现在,假设您已经有一个PHP脚本来执行该任务,并假设您拥有对服务器的ssh访问权限,以设置您只需要执行的cron任务(来自您的bash)
crontab -e
然后设置一个cron任务(假设每一小时)
*/60 * * * * /path/to/your/php/script.php
如果您没有ssh访问权限,并且使用cPanel,see How To using Cron in cPanel