我有一个插件,允许用户在管理区域通过AJAX上传帖子附件。我稍后尝试通过将这些文件推送到DropBoxtheir REST API. 它几乎可以工作。问题是WP cron任务在运行时会阻止页面加载until the push to DropBox finishes (对于较大的文件,这可能需要30分钟)。
我看过类似的问题(here 和here), 但后者意味着这些cron任务确实会阻止在任务运行时正确加载页面。
是否可以将其设置为使页面加载不受cron任务执行的影响?也许我做得不对。
以下是我的插件的相关部分:
function __construct() {
add_action( \'wp_ajax_my_admin_upload_attachment\', array( $this, \'my_admin_upload_attachment\') );
add_action(\'my_push_to_dropbox\', array($this,\'push_to_dropbox\'));
} // end constructor
function my_admin_upload_attachment() {
/* upload and save file locally, update post meta */
/* schedule the files to be uploaded to DropBox */
wp_schedule_single_event(time()+5, \'my_push_to_dropbox\');
/* return success JSON */
}
function push_to_dropbox() {
$this->log(\'push_to_dropbox - started.\');
//$this->do_push_to_dropbox();
@ignore_user_abort(true); // this does not help: \'finished\' message still never prints
set_time_limit(0);
sleep(30); // this mimicks the long-running upload task
$this->log(\'push_to_dropbox - finished.\');
}
EDIT: 已删除
define(\'ALTERNATE_WP_CRON\', true);
从…起
wp-config.php
, 现在页面加载没有延迟,但cron任务会被连续的页面刷新中断:上面的“完成”消息不会打印在日志中。
SO网友:Matthew Boynes
除了0.01s超时外,Cron任务不会直接影响页面加载(当然,它们会影响服务器负载,因此它们会间接影响页面加载)。
我的直觉是,PHP配置就是问题所在。cron任务与任何其他web请求一样运行,并且它们受PHP的max_execution_time
INI设置。如果这设置为(例如)90秒,则请求将终止,并且您的文件将无法同步。您可以通过设置sleep
比您的max_execution_time
, 看看是否结束。
如果是这种情况,您可以尝试添加:
ini_set( \'max_execution_time\', 0 );
到您的顶部
push_to_dropbox()
作用这不是一个很好的解决方案,因为它不会在每台主机上都工作,但这只是一个开始。