WP_INSERT_POST大容量导入500服务器错误

时间:2014-03-25 作者:Robbert

我正在开发一个Wordpress导入工具,我在数据库中使用一个自定义城市表,其中包含经度、纬度,这些经度和纬度与一些其他文本相结合,然后通过以下方式导入wp_insert_post(). 这很好,但在3200-3600之后,脚本停止,我得到一个500内部服务器错误。

我尝试了多种解决方案来解决此问题:

我增加了以下php。ini设置:

mysql的最大输入时间(max\\u input\\u time)。connect\\U timeout(连接超时)增加了WP\\U内存限制为WP\\U配置。php:

define(\'WP_MEMORY_LIMIT\', \'128M\');
并增加了我在wp\\U配置中的时间限制。php也是。

set_time_limit(240);
还尝试了我的htaccess文件:

php_value max_execution_time 240
调试了我的bug,但我仍然得到了500个错误。

我联系了我的主人,他们告诉我设置set_time_limit(); 这是我在函数中设置的。php,在我的导入器和wp\\u config文件中。php,但没有成功。

我通过查看我的php设置phpinfo(); 在这里,我的最大执行时间是120。我已经要求我的主人增加它,但仍然是同样的问题。

这是我的导入脚本:

// Get results
        global $wpdb;
        $results = $wpdb->get_results( "SELECT * FROM stn_locations" );

    if( $results ) {

        // Submit button clicked
        if( isset( $_POST[\'submit\'] ) ) {

            foreach( $results as $result ) {

                // Set variables
                $location_name      = $result->stnl_name;
                $location_longitude     = $result->stnl_longitude;
                $location_latitude  = $result->stnl_latitude;
                $location_country       = $result->stnl_country;
                $location_term      = $_POST[\'term\'];

                // Content
                $location_content       = $_POST[\'stn_filter_import_content\'];
                $location_content       = str_replace( \'%%location%%\', $location_name, $location_content );
                $location_content       = str_replace( \'%%category%%\', $location_term, $location_content );

                // Build post_title
                $post_title = $location_term . \' \' . $location_name;

                if( $location_country == $_POST[\'country\'] ) {

                    // Import data
                    $import_data = array(
                        \'post_title\'    => $post_title,
                        \'post_content\'  => $location_content,
                        \'post_status\'   => \'publish\',
                        \'post_type\' => \'filter\',
                    ); 

                    // Insert post
                    $post_id = wp_insert_post( $import_data );

                    if( ! is_wp_error( $post_id ) ) {

                        // Set Term
                        wp_set_object_terms( $post_id, $location_term, \'service\' );

                        // Set meta fields
                        update_post_meta( $post_id, \'longitude\', $location_longitude );
                        update_post_meta( $post_id, \'latitude\', $location_latitude );

                        $success = true;

                    } else {
                        $error = true;  
                    }


                }

            }

            }
}
是否有人为我提供解决方案、提示、设置或其他功能?让我知道!非常感谢。

1 个回复
最合适的回答,由SO网友:Otto 整理而成

我的建议是,首先不要通过web连接执行长时间运行的批量操作。PHP在命令行中运行良好。

编写你的一次性脚本来完成你需要它做的任何事情。如果您需要在该过程中访问WordPress函数,那么请包括wp加载。脚本顶部的php文件。

然后,转到服务器上的shell提示符,并执行“php-yourscript.php”来运行它。命令行PHP对它没有运行时限制,并且需要花费尽可能长的时间。

结束