Разбор большого файла JSON для создания постов WordPress

У меня есть большой файл JSON (> 100 МБ), который я хочу проанализировать, а затем преобразовать его объекты в WordPress сообщения.
Я успешно создал функцию для выполнения этой задачи, но она не может перебрать весь объект, иначе она умирает, выдавая ошибку PHP Fatal error:
Allowed memory size of 268435456 bytes exhausted (tried to allocate 92 bytes)
Функция может обрабатывать файлы размером менее 1 МБ, но для файлов размером более 1 МБ это не удается.
Я попросил администраторов сервера увеличить лимит памяти, и теперь никаких ошибок памяти не видно, но все равно он не может получить весь JSON.

Я просмотрел много постов и вопросов, но не смог найти / понять что-нибудь полезное. Также это моя первая попытка написать такую ​​функцию, поэтому любая помощь / руководство будет оценено.

РЕДАКТИРОВАТЬ
Добавлен код для используемой функции

function create_post_from_json($json_key) {

$json_options = get_option('json_file_data');
$obj = wp_remote_retrieve_body(wp_remote_get($json_options[$json_key]['url'],array( 'timeout' => -1 )));
$obj = json_decode($obj);
$id_stored = array();
$new_posts_id_array = array();
$new_json_posts_id_array = get_option('json_' . $json_options[$json_key]['name'] . "_post_ids");
$id_stored = get_option('json_' . $json_options[$json_key]['name']);
if(!$id_stored){$id_stored = [];}
foreach ($obj->products as $one_post) {
$post_char_id = $one_post->ID;
$new_posts_id_array[] = $post_char_id;
$cat_array = array();

if (!in_array($post_char_id, $id_stored)) {
$id_stored[] = $post_char_id;
update_option('json_' . $json_options[$json_key]['name'], $id_stored);
$post = array(
'post_title' => $one_post->name,
'post_status' => 'publish',
'post_author' => 1,
'post_content' => $one_post->description,
'post_type' => 'destinations',
);

$new_post_id = wp_insert_post($post); //post id
return true;
}

2

Решение

Скорее всего, ваш сценарий не хватает времени.

Вы можете увеличить максимальное время выполнения, используя set_time_limit(100); // 100 seconds

Или, чтобы сделать его неопределенным, используйте set_time_limit(0);

Замечания: Установите время в верхней части вашего сценария.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]