我有一个大的JSON文件(> 100MB)我要解析,然后将其对象转换为wordpress帖子。
我已经成功创建了一个函数来完成这个任务,但是它无法循环遍历所有对象,否则它会因为给出错误导致PHP致命错误:Allowed memory size of 268435456 bytes exhausted (tried to allocate 92 bytes)
函数能够处理1MB以下的文件,但是对于大于1MB的文件,它会失败。
我已经要求服务器管理员增加内存限制,现在没有可见的内存错误,但仍然无法获取所有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;
}
答案 0 :(得分:0)
您的脚本可能会耗尽时间。
您可以使用set_time_limit(100); // 100 seconds
要使其无限期,请使用set_time_limit(0);
注意:在脚本上设置时间。