Я случайно (около 20 раз в день) получаю эту ошибку на рабочем сервере (PHP 7.0.32):
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4787537204 bytes)
«Наличие» ошибки довольно низкое, поэтому далеко, но поскольку я не уверен, что не так, меня беспокоит будущее и большие проблемы.
Я запускаю этот код вверху страницы, когда возникает ошибка:
$curTime = time();
$dataIds = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
$end = array();
$update = array();
$dbUpdate = array();
foreach($dataIds as $id) {
$f = fopen( "./data/{$id}.json", "r");
if ($f === false) {
continue;
}
$data = fread($f, 1024);
fclose($f);
$data = json_decode($data, true);
if (!isset($data['input'])) {
continue;
}
$endDate = $data['input'][0]['end'];
$updateDate = $data['input'][0]['start'];
$dbUpdateDate = $data['input'][0]['update'];
$end[$id] = ($endDate !== "") ? strtotime($endDate." UTC") : $curTime;
$update[$id] = ($updateDate !== "") ? strtotime($updateDate." UTC") : $curTime;
$dbUpdate[$id] = ($dbUpdateDate !== "") ? strtotime($dbUpdateDate." UTC") : $curTime;
}
И в этой строке выдается ошибка:
$end[$id] = ($endDate !== "") ? strtotime($endDate." UTC") : $curTime;
Я не могу воспроизвести проблему с сервером разработки, и я не уверен, что может вызвать это и как это отладить (я не могу включить функции отладки на производственном сервере). Других предупреждений или уведомлений до неустранимой ошибки нет.
Файлы данных json имеют небольшой размер, около 500 байт. Они, однако, обновляются с задания cron. Так что теоретически я могу открыть неполный файл. Но в этом случае json_decode
возвращает null
, как я тестировал.
Образец json:
{
"input": [{
"id": "1",
"start": "2019-11-15 06:00:00",
"end": "2019-11-18 12:00:00",
"update": "2019-11-15 10:52:44"
}]
}