标题可能令人困惑,所以我将解释我的问题。请原谅我的英语,我的英语很不好,我正在尝试举例说明自己。
我有以下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并知道如何解析其数据?
答案 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
}
此代码未经测试,但希望您能理解?