我的函数会将数据返回给cronjob吗?

时间:2019-12-21 15:03:32

标签: php cron

标题可能令人困惑,所以我将解释我的问题。请原谅我的英语,我的英语很不好,我正在尝试举例说明自己。

我有以下PHP文件:

<?php
$src = 'https://www.example.com/path/to/file.json';
// ofc, this isn't the real file, but let's presume it does the real file.
// real path is protected because it's valuable and i don't want it to be blocked.

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $src);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$data = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);

curl_close($curl);

header('Content-type: application/json; charset=UTF-8');
$data = json_encode(json_decode($data));
return $data;

$data应该返回一个json字符串,而据我所知,return应该返回该数据。

但是,每次更改$data时,我都希望对该文件运行cronjob,并检查该文件是否已被修改。

假设$data是:

{"key": "value", "int": 0, "bool": false, "null": null, "array": []}

现在$data是:

{"key": "value", "int": 1, "bool": true, "null": null, "array": ["something goes here"]}

我想(但并非始终)仅在更改数据时检测到它。

我该怎么做?而且,cronjob是否读取PHP并知道如何解析其数据?

1 个答案:

答案 0 :(得分:0)

cronjob类似于打开文件的特定URL(例如https://example.com/cronjob.php)时的情况。因此,该文件将在您设置它的时间和间隔执行。因此,这就像对您的好友说的,请每天正好在上午12点开放https://example.com/cronjob.php

要查看数据是否已更改,您将需要一个数据库(例如MySQL)来存储值,因此您可以将最新条目与最新条目之前的条目进行比较。您也可以将所有条目保存在文本文件中,然后从那里获取最新条目并将其与当前条目进行比较,我建议使用array_diff()进行操作。这样一来,您便会知道何时输入了其他值的不同条目。

我给您一个简单的示例,介绍将其保存到文本文件的方法:

<?php
// I assume $data is your json_encoded array object
$file = 'saved_arrays.txt';

$lines = file($file);
$lastLine = array_pop($lines); // get last entry from file

// check if there are is something different in the array values. 
// If array_diff is empty, there are no changes:

$diff = array_diff($data, $lastLine);

if (empty($lastLine)) {
  echo 'No changes.';
} else {
  // Array values changed, so save this new array to the file

  echo 'Array changed. Saving array entry to <strong>'.$file.'</strong>.';
  file_put_contents($file, $data); // save $data to file
}

此代码未经测试,但希望您能理解?