Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动PHP脚本_Php_Mysql_Cron - Fatal编程技术网

自动PHP脚本

自动PHP脚本,php,mysql,cron,Php,Mysql,Cron,我有一个php/mysql问题: 我正在设计一个网站,它接受xml提要并将它们放入mysql表中。从该表中,我希望mysql获取这些新信息并执行一系列计算,然后更改数据库另一部分中的字段。新更新的信息将显示在网站上 我了解如何: 从xml转换为php 将这些变量放入mysql 计算新信息(理论上使用php) 我不明白的是: 我应该把告诉mysql进行计算的php脚本放在哪里,以及实际的计算是什么 它是否只是进入一个被cron作业调用的数据库上的php文件中?我不知道如何使用linux命令,但

我有一个php/mysql问题:

我正在设计一个网站,它接受xml提要并将它们放入mysql表中。从该表中,我希望mysql获取这些新信息并执行一系列计算,然后更改数据库另一部分中的字段。新更新的信息将显示在网站上

我了解如何:

  • 从xml转换为php
  • 将这些变量放入mysql
  • 计算新信息(理论上使用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。因为没有它,有人