Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析用于创建wordpress帖子的大型JSON文件_Php_Json_Wordpress_Memory Management - Fatal编程技术网

Php 解析用于创建wordpress帖子的大型JSON文件

Php 解析用于创建wordpress帖子的大型JSON文件,php,json,wordpress,memory-management,Php,Json,Wordpress,Memory Management,我有一个大的JSON文件(>100MB),我想对其进行解析,然后将其对象转换为wordpress帖子。 我已经成功地创建了一个函数来完成这个任务,但它不能在所有对象中循环,否则它会因为给出一个PHP错误而死亡。致命错误:允许内存大小为268435456字节(尝试分配92字节) 函数能够处理1MB以下的文件,但对于1MB以上的文件,它会失败。 我已经要求服务器管理员增加内存限制,现在没有可见的内存错误,但仍然无法获取所有JSON。 我浏览了很多帖子和问题,但没有发现/理解任何有用的东西。这也是我

我有一个大的JSON文件(>100MB),我想对其进行解析,然后将其对象转换为wordpress帖子。 我已经成功地创建了一个函数来完成这个任务,但它不能在所有对象中循环,否则它会因为给出一个PHP错误而死亡。致命错误:
允许内存大小为268435456字节(尝试分配92字节)

函数能够处理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;
}

你的脚本很有可能已经没有时间了

您可以使用
set_time_limit(100);//100秒

或使用
set\u time\u limit(0)使其不确定


注意:在脚本顶部设置时间。

完成后,我使用了
Set\u time\u limit(0)但错误是由于内存限制造成的。这更多的是内存消耗问题。你能用你的代码更新这个问题吗?有一次我把一个大文件分成小块以提高速度。而且效果很好。您是否可以将该文件分成更小的块,一次只检索所需的块?不,我无法控制传入的数据。我希望他们有一些分页系统。所以
wp\u remote\u get
不能获取您的所有数据?我想知道代码在哪里中断。。。另外,您从json调用了多少次
create\u post\u
?在第
json\u decode($obj)
行中,它会因内存限制耗尽而中断错误OK也许用其他行替换该行会起作用。就像编写自己的函数读取json并只提取所需的键一样。我知道在字符串中循环不是内存密集型的。那可能吗?