使用 cron 作业执行 PHP AJAX 调用

Posted

技术标签:

【中文标题】使用 cron 作业执行 PHP AJAX 调用【英文标题】:execute PHP AJAX call using cron jobs 【发布时间】:2016-05-27 02:30:05 【问题描述】:

我为我的客户创建了一个 html 页面,这样每次他去那里时,都会执行一个脚本来更新数据库中的一些数据。一旦他登陆该页面,就会对 Google API 进行 AJAX 调用,返回一些结果,然后执行一些 php 脚本来更新和插入数据库中的数据。例如,如果他去http://www.example.com/updateScript.html,以上所有情况都会发生。

我不想让他去那里,而是想使用 cron 作业安排日常任务。我不想用 PHP 编写所有逻辑,因为 javascript 部分有点复杂。 cron 作业有没有办法打开该 HTML 页面以便执行我的脚本?

我在 SO 中检查了几个问题,例如以下问题:Using cron jobs to visit url? 但这对我不起作用。

我的 cron 作业命令是 /usr/bin/wget https://www.example.com/updateScript.html。我也尝试将 udpateScript.html 更改为 PHP,但没有成功。有什么我可以做的建议吗?

【问题讨论】:

【参考方案1】:

遗憾的是,cron 无法在页面上执行 javascript。但是,既然你说你需要建议,你可能想看看 PHP 的 cURL。您可以使用cURL 访问 PHP 中的其他网站。你可以用它做很多协议,你需要的是GET。 site 就是一个例子。

// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://testcURL.com/?item1=value&item2=value2',
    CURLOPT_USERAGENT => 'Codular Sample cURL Request'
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);

此外,由于您要访问的网站包含 javascript,因此您可能需要模仿浏览器向服务器发出请求的方式,例如 this 或 this。

我希望你有一些想法,祝你的项目好运。

【讨论】:

【参考方案2】:

crons 不适合您,因为您需要执行 JavaScript,但是,cron 只是拉取代码 bur 不会执行它。

如果您想使用 JavaScript 作为处理器,可以考虑使用 Phantom.js:http://phantomjs.org/

这是一个如何完成的示例: https://github.com/ariya/phantomjs/blob/master/examples/waitfor.js

【讨论】:

【参考方案3】:

Wget 不会为您在页面上执行 JavaScript:这是必须在浏览器中完成的事情(或者任何可以在服务器上执行的操作)。所以对你来说,要么重写 PHP 中的逻辑(这可能会非常痛苦,但从长远来看是非常有益的),或者按照here 的建议尝试在服务器上设置一些东西。

【讨论】:

以上是关于使用 cron 作业执行 PHP AJAX 调用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 创建 cron 作业?

在 cron 作业中执行 PHP 脚本

如何防止 cron 作业执行(如果它已经在运行)

在 Windows 中使用 php 设置 cron 作业

需要很长执行时间的 php 脚本的 Cron 作业

Cron作业执行php文件