核心升级程序{}

用于更新核心的核心类。

描述

它允许WordPress结合wp-admin/includs/update-core.php文件进行自我升级。

另请参见

方法

姓名描述
核心升级程序::check_files将磁盘文件校验和与预期校验和进行比较。
核心升级程序::should_update_to_version确定此WordPress核心版本是否应更新为提供的版本。
核心升级程序::upgrade升级WordPress核心。
核心升级程序::upgrade_strings初始化升级字符串。

来源

类Core_Upgrader扩展WP_Upgrader{/***初始化升级字符串。**@自2.8.0起*/公共函数upgrade_strings(){$this->strings['up_to_date']=__('WordPress是最新版本。');$this->strings['locked']=__('当前正在进行另一个更新。');$this->string['no-package']=__('更新包不可用');/*转换器:%s:包URL*/$this->strings['downloading_package']=sprintf(__('从%s&#8230;下载更新'),'<span class=“code pre”>%s</span>');$this->strings['unpack_package']=__('解包更新&#8230;');$this->strings['copy_failed']=__('无法复制文件。');$this->strings['copy_failed_space']=__('无法复制文件。您可能已经用完了磁盘空间。');$this->strings['start_rollback']=__('试图还原以前的版本。');$this->strings['rollback_was_required']=__('由于更新过程中出现错误,WordPress已恢复到以前的版本。');}/***升级WordPress核心。**@自2.8.0起**@global WP_Filesystem_Base$WP_Filesystem WordPress文件系统子类。*@global可调用$_wp_filesystem_direct_method**@param object$current Response对象,用于判断WordPress是否为当前版本。*@param数组$args{*可选。升级WordPress核心的参数。默认空数组。**@type bool$pre_check_md5是否在之前检查文件校验和*尝试升级。默认为true。*@type bool$attempt_rollback如果*有一个问题。默认为false。*@type bool$do_rollback是否将此“升级”作为回滚执行。*默认为false。* }*@return string | false | WP_Error成功时为新WordPress版本,失败时为false或WP_Error。*/公共函数升级($current,$args=array()){全局$wp_filesystem;需要ABSPATH。WPINC公司/版本.php';//$wp_版本;$start_time=时间();$defaults=数组(“pre_check_md5”=>真,“attempt_rollback”=>假,“do_rollback”=>假,“allow_relaxed_file_ownership”=>错误,);$parsed_args=wp_parse_args($args,$defaults);$this->init();$this->upgrade_strings();//有可用的更新吗?if(!isset($current->response)||“最新”===$current->responses){返回新的WP_Error('up_to_date',$this->strings['up_to-date']);}$res=$this->fs_connect(数组(ABSPATH,WP_CONTENT_DIR),$parsed_args['allow_relaxed_file_ownership']);if(!$res||iswp_error($res)){返回$res;}$wp_dir=trailingslashit($wp_filesystem->abspath());$partial=真;if($parsed_args['do_rollback']){$partial=假;}elseif($parsed_args['pre_check_md5']&&!$this->check_files()){$partial=假;}/**如果从API返回部分更新,请使用它,除非我们正在这样做*重新安装。如果我们跨越新绑定的版本号,则使用*新的捆绑拉链。如果常量设置为跳过捆绑项,请不要这样做。*如果API返回no_content zip,那么使用它。最后,默认为完整zip。*/if($parsed_args['do_rollback']&&$current->packages->rollback){$to_download=“回滚”;}elseif($current->packages->partial&&'reinstall'!==$current->response&&$wp_version===$current->partial版本&&$partial){$to_download=“部分”;}elseif($current->packages->new_bundled&&version_compare($wp_version,$current->new_bindled,'<')&&(!已定义('CORE_UPGRADE_SKIP_NEW_BUNDLED')||!核心_升级_SKIP_NEW_BUNDLED)){$to_download='新绑定';}elseif($current->packages->no_content){$to_download='no_content';}其他{$to_download='full';}//锁定以防止发生多个核心更新。$lock=WP_Upgrader::create_lock('core_updater',15*MINUTE_IN_SECONDS);if(!$lock){返回新的WP_Error('locked',$this->strings['locked']);}$download=$this->download_package($current->packages->$to_download,true);/**允许签名软邮件。*警告:以后可能会删除。*/if(is_wp_error($download)&&$download->get_error_data(“softfail filename”)){//将故障错误输出为正常反馈,而不是错误:/**此过滤器记录在wp-admin/includes/update-core.php中*/apply_filters('更新反馈',$download->get_error_message());//将此故障报告回WordPress.org以进行调试。wp_版本检查(阵列(“signature_failure_code”=>$下载->获取错误代码(),“signature_failure_data”=>$下载->获取错误数据(),));//假设这个错误没有发生。$download=$downown->get_error_data('softfail-filename');}if(iswp_error($download)){WP_Upgrader::release_lock('核心更新程序');返回$download;}$working_dir=$this->unpack_package($download);if(iswp_error($working_dir)){WP_Upgrader::release_lock('核心更新程序');返回$working_dir;}//将update-core.php从新版本复制到位。if(!$wp_filesystem->copy($working_dir.'/wordpress/wp-admin/includes/update-core.php',$wp_dir.'wp-admin/includes/update-core.php',true)){$wp_filesystem->delete($working_dir,true);WP_Upgrader::release_lock('核心更新程序');return new WP_Error('copy_failed_for_update_core_file',__('无法安装更新,因为无法复制某些文件。这通常是由于文件权限不一致所致。'),'WP-admin/includes/update-core.php');}$wp_filesystem->chmod($wp_dir.'wp-admin/includes/update-core.php',FS_chmod_FILE);wp_opcache_invalidate(ABSPATH.'wp-admin/includes/update-core.php');需要一次ABSPATH。”wp-admin/includes/update-core.php';if(!function_exists('update_core')){WP_Upgrader::release_lock('核心更新程序');返回新的WP_Error('copy_failed_space',$this->strings['copy_failed_space']);}$result=更新核心($working_dir,$wp_dir);//如果出现问题,我们可以回滚。if($parsed_args['attempt_rollback']&&$current->packages->rollback&&!$parsed-args['do_rollback']){$try_rollback=假;if(iswp_error($result)){$error_code=$result->get_error_code();/**并非所有的错误都是相等的。这些代码很关键:copy_failed__copy_dir,*mkdir失败复制目录、复制失败复制目录重试和磁盘完全。*do_rollback允许update_core()在需要时触发回滚。*/if(strcontains($error_code,'do_rollback')){$try_rollback=true;}elseif(str_contains($error_code,'__copy_dir')){$try_rollback=true;}elseif('disk_full'===$error_code){$try_rollback=true;}}if($try_rollback){/**此筛选器记录在wp-admin/includs/update-core.php中*/apply_filters('更新反馈',$result);/**此过滤器记录在wp-admin/includes/update-core.php中*/apply_filters('update_feedback',$this->strings['start_rollback']);$rollback_result=$this->升级($current,array_merge($parsed_args,array('do_rollback'=>true));$original_result=$result;$result=新WP_Error('回滚_was_required',$this->字符串['rollback_was_required'],(对象)数组(“更新”=>$original_result,“回滚”=>$rollback_result,));}}/**此操作记录在wp-admin/includes/class-wp-upgrader.php中*/do_操作(“upgrader_process_complete”,$这个,阵列(“action”=>“update”,“type”=>“core”,));//清除当前更新。delete_site_transient('更新核心');if(!$parsed_args['do_rollback']){$stats=数组(“update_type”=>$current->响应,“成功”=>正确,“fs_method”=>$wp_filesystem->方法,“fs_method_forced”=>已定义(“fs_method”)||has_filter(“filesystem_method”),“fs_method_direct”=>!空($GLOBALS['_wp_filesystem_direct_method'])$全局['_wp_filesystem_direct_method']:'',“time_taken”=>time()-$start_time,“已报告”=>$wp_version,“已尝试”=>$current->版本,);if(is_wp_error($result)){$stats['success']=false;//是否发生回滚?if(!空($try_rollback)){$stats['error_code']=$original_result->获取错误代码();$stats['error_data']=$original_result->获取错误数据();//回滚是否成功?如果没有,也收集它的错误。$stats['rollback']=!is_wp_error($rollback_result);if(iswp_error($rollback_result)){$stats['rollback_code']=$rollback_result->get_error_code();$stats['rollback_data']=$rollback_result->get_error_data();}}其他{$stats['error_code']=$result->get_error_ccode();$stats['error_data']=$result->get_error_date();}}wp_version_check($stats);}WP_Upgrader::release_lock('核心更新程序');返回$result;}/***确定此WordPress核心版本是否应更新为提供的版本。**@自3.7.0起**@param string$offered_ver提供的版本,格式为x.y.z。*@return bool True,如果我们应该更新到提供的版本,否则为false。*/公共静态函数should_update_to_version($offered_ver){需要ABSPATH。WPINC公司/版本.php';//$wp_version;//整数解$current_branch=内爆('.',array_slice(preg_split('/[.-]/',$wp_version),0,2));//x年$new_branch=内爆('.',array_slice(preg_split('/[.-]/',$offered_ver),0,2));//x年$current_is_development_version=(bool)strpos($wp_version,'-');//默认值:$upgrade_dev=获取站点选项('auto_update_core_dev','enabled')===启用';$upgrade_minor=获取站点选项('auto_update_core_minor','enabled')===启用';$upgrade_major=获取站点选项('auto_update_core_major','unset')==='enabled';//WP_AUTO_UPDATE_CORE=true(all),'beta','rc','development','branch-development','minor',false。if(已定义(“WP_AUTO_UPDATE_CORE”){if(false===WP_AUTO_UPDATE_CORE){//除非过滤器允许,否则默认为关闭。$upgrade_dev=false;$upgrade_minor=false;$upgrade_major=错误;}elseif(真===WP_AUTO_UPDATE_CORE||in_array(WP_AUTO_UPDATE_CORE,数组('beta','rc','development','branch-development'),true)) {//核心的所有更新。$upgrade_dev=真;$upgrade_minor=真;$upgrade_major=真;}elseif('minor'===WP_AUTO_UPDATE_CORE){//仅对核心进行小更新。$upgrade_dev=假;$upgrade_minor=true;$upgrade_major=错误;}}//1:如果我们已经在那个版本上了,更新没有多大意义?if($offered_ver===$wp_version){返回false;}//他说:如果我们运行的是更新的版本,那就不行了。if(版本比较($wpversion,$offeredver,'>')){返回false;}$failure_data=获取站点选项('自动更新失败');if($failure_data){//如果这是严重更新失败,则无法更新。if(!空($failure_data['critical']){返回false;}//如果我们记录了非关键故障,不要声称可以在update-core.php上进行更新。if($wpversion===$failure_data['current']&str_contains($offered_ver,'.1.next.minor')){返回false;}/**如果我们正在重试导致非关键故障的相同A到B更新,则无法更新。*一些非关键故障确实允许重试,如download_failed。*3.7.1=>3.7.2导致files_not_writable,如果我们仍然使用3.7.1,并且仍然尝试更新到3.7.2。*/if(空($failure_data['retry'])&&$wp_version===$failure _data['当前']&&$offered_ver===$失败数据['尝试']){返回false;}}//3:3.7-alpha-25000->3.7-alpha-25678->3.7-beta1->3.7-beta 2。if($current_is_development_version){/***筛选是否启用开发版本的自动核心更新。**@自3.7.0起**@param bool$upgrade_dev是否为启用自动更新*开发版本。*/if(!apply_filters('allow_dev_auto_core_updates',$upgrade_dev)){返回false;}//否则将转到下面的次要+主要分支。}//4:次要分支内更新(3.7.0->3.7.1->3.7.2->3.7.4)。if($current_branch===$new_branch){/***筛选是否启用次要的自动核心更新。**@自3.7.0起**@param bool$upgrade_minor是否启用次要自动核心更新。*/return apply_filters('allow_minor_auto_core_updates',$upgrade_minor);}//5:主要版本更新(3.7.0->3.8.0->3.9.1)。if(版本比较($new_branch,$current_branch,'>')){/***筛选是否启用主要自动核心更新。**@自3.7.0起**@param bool$upgrade_major是否启用主要自动核心更新。*/返回apply_filters('allow_major_auto_core_updates',$upgrade_major);}//如果我们不确定,我们不想要它。返回false;}/***将磁盘文件校验和与预期校验和进行比较。**@自3.7.0起**@global string$wp_version WordPress版本字符串。*@global string$wp_local_package包的Locale代码。**如果校验和匹配,@return bool True,否则为false。*/公共函数check_files(){全局$wp_version,$wp_local_package;$校验和=get_core_checksums($wp_version,isset($wp_local_package)$wp_local_package:“en_US”);if(!is_array($checksums)){返回false;}foreach($checksums作为$file=>$checkdum){//跳过已更新的文件。if(str_starts_with($file,'wp-content')){继续;}if(!file_exists(ABSPATH.$文件)||md5_file(ABSPATH.$文件)!==$校验和){返回false;}}返回true;}}

变更日志

版本描述
4.6.0已从wp-admin/includes/class-wp-upgrader.php移到它自己的文件。
2.8.0介绍。

用户贡献的笔记

你必须登录在能够发表注释或反馈之前。