wordpress 3.8.1分享 http://pan.baidu.com/s/1pJ4lTJ9
打开wp-admin/includes/file.php文件
找到wp_handle_upload这个函数,按照下面的代码进行修改.主要添加两行
在搜索到“
function wp_handle_upload( &$file, $overrides = false, $time = null ) {
”
找到下面两行,并在每行前面添加//
//Move the file to the uploads dir //$new_file = $uploads['path'] . "/$filename";(大概在306行)
找到 Move the file to the uploads dir 将它和下面哪行注解掉
然后添加"$new_file
=
$uploads
[
'path'
] .
"/"
. iconv(
"UTF-8"
,
"GB2312"
,
$filename
);
"
再找到
return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' );
在这行前面加上//
在这行下面添加代码
return apply_filters( 'wp_handle_upload', array( 'file' => $uploads['path'] . "/$filename", 'url' => $url, 'type' => $type ) , 'upload');
一共修改3处前面添加//
添加两行代码
下面是添加后的文件
file.php
<?PHP / ** *功能的读,写,修改和删除文件系统上的文件。 *包括用于特定主题的文件,以及上载操作功能, *存档,并渲染输出时必要的。 * * @包WordPress的 * @分包管理 * / / **为主题文件的说明。* / $ wp_file_descriptions = 阵列( '的index.php' => __('主索引模板“ ), '的style.css' => __('样式' ), “主编的style.css' => __('可视化编辑样式表“ ), “编辑器的风格,rtl.css' => __('可视化编辑器的RTL样式表“ ), 'rtl.css' => __('RTL样式表' ), '的comments.php' => __('意见' ), 的意见,popup.php' => __('弹出式评论“ ), '的footer.php' => __('尾' ), '的header.php' => __('头' ), '的sidebar.php' => __('边栏' ), “archive.php文件' => __('档案' ), “author.php' => __('作者模板' ), “tag.php' => __('标签模板“ ), “category.php' => __('分类模板' ), “page.php' => __('页面模板“ ), '的search.php' => __('搜索结果' ), “searchform.php' => __('搜寻表“ ), '的single.php' => __('单邮报“ ), 404。PHP' => __('404模板' ), 'link.php' => __('链接模板' ), '的functions.php' => __('主题功能' ), “attachment.php' => __('附件模板“ ), “image.php' => __('图片附件模板“ ), “video.php' => __('视频附件模板“ ), “audio.php' => __('音频附件模板“ ), “application.php' => __('应用程序附件模板“ ), “我- hacks.php' => __('我- hacks.php(传统黑客支持)' ), '的。htaccess' => __('。htaccess文件(用于重写规则)' ), / /不推荐使用的文件 “WP-layout.css中' => __('样式' ), “WP-comments.php文件' => __('评论模板“ ), “WP-评论- popup.php' => __('弹出式评论模板“ ), ); / ** *获取标准的WordPress主题文件等各种标准的说明 * WordPress文件 * * @自从1.5.0 * * @使用_cleanup_header_comment * @使用$ wp_file_descriptions * @参数字符串$文件的文件系统路径或文件名 * @返回字符串的文件说明从$ wp_file_descriptions或$文件的基本名称,如果描述不存在 * / 功能 get_file_description($文件 ){ 全球 $ wp_file_descriptions ; 如果 (使用isset($ wp_file_descriptions [ 基名($文件 )])){ 返回 $ wp_file_descriptions [ 基名($文件 )]; } ELSEIF (file_exists ($文件 )&& is_file ($文件 )){ $ template_data =破灭('' ,文件($文件 )); 如果 (的preg_match('|模板名称:(*)$ |英里' ,$ template_data ,$名称 )) 返回 的sprintf(__('%s的页面模板“ ),_cleanup_header_comment($名称[1])); } 返回 修剪(基名($文件 )); } / ** *获取绝对文件系统路径的WordPress安装的根目录 * * @自从1.5.0 * * @使用get_option * @返回字符串完整的文件系统路径的WordPress安装的根目录 * / 功能 get_home_path(){ $ HOME = get_option( “ 家” ); $ SITEURL = get_option('SITEURL' ); 如果 (!空($ HOME )&& 0!== strcasecmp ($ HOME ,$ SITEURL )){ $ wp_path_rel_to_home = str_ireplace ($ HOME ,'' ,$ SITEURL ); / * $ SITEURL - $ HOME * / $ POS = strripos (str_replace函数('\ \' ,'/' ,$ _SERVER [ 'SCRIPT_FILENAME' ]),trailingslashit($ wp_path_rel_to_home )); $ home_path = SUBSTR ($ _SERVER [ 'SCRIPT_FILENAME' ],0,$ POS ); $ home_path = trailingslashit($ home_path ); } 否则 { $ home_path = ABSPATH; } 返回 str_replace函数('\ \' ,'/' ,$ home_path ); } / ** *返回所有文件的指定文件夹中并上市的所有子目录多达100层。 *该递归的深度可以由$水平参数来控制。 * * @自从2.6.0 * *到文件夹@参数字符串$文件夹的完整路径 * @参数INT $级别的文件夹(可选)级别跟随,默认值:100(PHP循环限制)。 * @返回布尔|失败,文件,否则数组array假 * / 功能 list_files($文件夹 = '' ,$水平 = 100){ 如果 (空($文件夹)) 返回 FALSE; 如果 (!$的水平 ) 返回 FALSE; $文件 = 阵列(); 如果 ($ DIR = @的opendir($文件夹 )){ 而 (($文件 = READDIR($ DIR ))!== FALSE){ 如果 (in_array($文件,数组('。' ,'..' ))) 继续; 如果 (is_dir ($文件夹 。'/' 。$文件 )){ $ files2 = list_files($文件夹 。'/' ,$文件,$水平 - 1); 如果 ($ files2 ) $文件 = array_merge ($文件,$ files2 ); 其他 $文件[] = $文件夹 。'/' 。$文件 。'/' ; } 否则 { $文件[] = $文件夹 。'/' 。$文件; } } } @ closedir ($ DIR ); 返回 $文件; } / ** *返回一个唯一的临时文件的文件名。 *请注意,调用函数必须取消链接(),这本身。 * *文件名是根据关闭传递的参数或默认为当前Unix时间戳, *在该目录既可以通过为好,或者留空白,默认为可写的临时目录。 * * @自从2.6.0 * * @参数字符串$文件名(可选)文件名来关闭基地的独特的文件 * @参数字符串$ DIR(可选)目录到文件存放在 * @返回字符串的可写文件名 * / 功能 wp_tempnam($文件名 = '' ,$ DIR = '' ){ 如果 (空($ DIR )) $ DIR = get_temp_dir(); $文件名 = 基名($文件名); 如果 (空($文件名)) $文件名 =时间(); $文件名 = preg_replace函数('| \ .. * $ |' ,'TMP' ,$文件名); $文件名 = $目录 。wp_unique_filename($ DIR ,$文件名); 触摸($文件名); 返回 $文件名; } / ** *确保被要求编辑该文件,允许进行编辑 * *功能会死,如果你不允许编辑文件 * * @自从1.5.0 * * @使用wp_die * @使用validate_file * @参数字符串$文件文件中的用户尝试编辑 允许文件来编辑* @参数数组$ allowed_files数组,$文件必须的条目完全匹配 * @返回NULL * / 功能 validate_file_to_edit($文件,$ allowed_files = '' ){ $代码 = validate_file($文件,$ allowed_files ); 如果 (!$代码 ) 返回 $文件; 开关 ($代码 ){ 案例 1: wp_die(__('对不起,不能在名称编辑文件“..”。如果你想编辑一个文件在你的WordPress主目录,你可以只输入名称该文件英寸' )); / /案例2: / / wp_die(__('抱歉,无法使用实际路径调用文件。')); 案例 3: wp_die(__('对不起,该文件不能被编辑。' )); } } / ** *处理PHP上传在WordPress,消毒的文件名,检查扩展mime类型, *和文件移动到相应的目录下上传目录中。 * * @ 2.0起 * * @使用wp_handle_upload_error * @使用apply_filters * @使用is_multisite * @使用wp_check_filetype_and_ext * @使用current_user_can * @使用wp_upload_dir * @使用wp_unique_filename * @使用delete_transient * @参数数组$文件参考$ _FILES中的一个元素。调用该函数一次为每个上传的文件。 * @参数数组$覆盖可选。名称=>值覆盖默认的变量提取物($覆盖,EXTR_OVERWRITE)的关联数组。 * @参数字符串$ time可选。时间在“年/月”的格式。 * @返回的数组成功后,返回文件属性的关联数组。如果失败,则返回$覆盖['upload_error_handler'](&$文件,$消息)或阵列('错误'=> $消息)。 * / 功能 wp_handle_upload(&$文件,$覆盖 = FALSE,$时间 = NULL){ / /默认的错误处理程序。 如果 (!function_exists('wp_handle_upload_error' )){ 功能 wp_handle_upload_error(&$文件,$消息 ){ 返回 的数组('错误' => $消息 ); } } $文件 = apply_filters('wp_handle_upload_prefilter' ,$文件 ); / /你可以定义你自己的函数,并通过在$覆盖['upload_error_handler']的名称 $ upload_error_handler = 'wp_handle_upload_error' ; / /你可能有一个或多个“wp_handle_upload_prefilter”功能错误出该文件。搞定优雅。 如果 (使用isset($文件[ '错误' ])&&!is_numeric ($文件[ '错误' ])&& $文件[ '错误' ]) 返回 $ upload_error_handler ($文件,$文件[ '错误' ]); / /你可以定义你自己的函数,并通过在$覆盖['unique_filename_callback']的名称 $ unique_filename_callback = NULL; / / $ _POST ['行动']必须设置其值必须等于$覆盖['行动']或这个: $行动 = 'wp_handle_upload' ; php.net的/ /礼貌,描述错误的字符串表示在$ _FILES [{表单字段}] ['错误']。 $ upload_error_strings = 阵列(假的, __( “ 上传的文件超过了php.ini中upload_max_filesize指令” ), __( “ 上传的文件大小超过了HTML表单中指定的MAX_FILE_SIZE限制。” ) __( “ 上传的文件只有部分被上传。” ) __( “ 没有文件被上传。” ) '' , __( “ 缺少临时文件夹”。 ) __( “ 无法写入文件到磁盘” ), __( “ 文件上传推而广之停止。” )); / /所有的测试都是在默认情况下。大多数可以通过$覆盖[{test_name}] = false来关闭; $ test_form = TRUE; $ test_size = TRUE; $ test_upload = TRUE; / /如果重写此,您必须提供$分机和$型!! $ test_type = TRUE; $默剧 = FALSE; / /安装用户覆盖。我们提到这个空隙保修? 如果 (IS_ARRAY ($覆盖 )) 提取物($覆盖,EXTR_OVERWRITE); / /正确的表格后会通过这个测试。 如果 ($ test_form &&(isset(的!$ _POST [ '行动' ])| |($ _POST [ '行动' !] = $行动 ))) 返回 call_user_func($ upload_error_handler ,$文件,__('无效的表单提交。' )); / /上传成功会通过这个测试。这是没有意义的覆盖这一个。 如果 ($文件[ '错误' ]> 0) 返回 call_user_func($ upload_error_handler ,$文件,$ upload_error_strings [ $文件[ '错误' ]); / /一个非空的文件将通过这个测试。 如果 ($ test_size &&!($文件[ '大小' ]> 0)){ 如果 (is_multisite()) $ ERROR_MSG = __('文件为空,请上传有内容的。' ); 其他 $ ERROR_MSG = __('文件为空,请上传一个实在的这个错误也可以通过上传功能已在你的php.ini或post_max_size设定比的upload_max_filesize在php.ini较小所致。' ); 返回 call_user_func($ upload_error_handler ,$文件,$ ERROR_MSG ); } / /一个正确上传的文件将通过这个测试。不应该有任何理由来覆盖这一个。 如果 ($ test_upload &&!@ is_uploaded_file ($文件[ 'tmp_name的值' ])) 返回 call_user_func($ upload_error_handler ,$文件,__( “ 指定的文件没有通过上传测试。” )); / /正确的MIME类型会通过这个测试。覆盖$默剧或使用upload_mimes过滤器。 如果 ($ test_type ){ $ wp_filetype = wp_check_filetype_and_ext($文件[ 'tmp_name的值' ],$文件[ '名称' ],$默剧 ); 提取物($ wp_filetype ); / /检查是否wp_check_filetype_and_ext()确定的文件名是不正确的 如果 ($ proper_filename ) $文件[ '名称' ] = $ proper_filename ; 如果 ((!$类型 | |!$转 !)&& current_user_can('unfiltered_upload' )) 返回 call_user_func($ upload_error_handler ,$文件,__('对不起,该文件类型不允许出于安全考虑。“ )); 如果 (!$分机 ) $分机 = LTRIM(strrchr ($文件[ '名称' ],'。' ),'。' ); 如果 (!$型 ) $型 = $文件[ “型” ]; } 否则 { $型 = '' ; } / /可写的上传目录将通过这个测试。再次,有没有点覆盖这一个。 如果 (!(($上传 = wp_upload_dir($时间))&&假=== $上传[ '错误' ])) 返回 call_user_func($ upload_error_handler ,$文件,$上传[ '错误' ]); $时间= 日期(“YmdHis” ); $ type_change = 阵列('形象' => '。' ); $ FILE_TYPE = strtr ($文件[ '类型' ],$ type_change ); $文件[ '名称' ] = $的时间。“” 。mt_rand(1,100) “” 。$ FILE_TYPE ; $时间= 日期(“YmdHis” ); $ type_change = 阵列('形象' => '。' ); $ FILE_TYPE = strtr ($文件[ '类型' ],$ type_change ); $文件[ '名称' ] = $时间。'' 。mt_rand(1,100)'' 。$ FILE_TYPE ; $文件名 = wp_unique_filename($上传[ '路径' ],$文件[ '名称' ],$ unique_filename_callback ); / /移动文件到上传目录 $文件名 = wp_unique_filename($上传[ '路径' ],$文件[ '名称' ],$ unique_filename_callback ); / /移动文件到上传目录 / / $ NEW_FILE = $上传['路径']。“/ $文件名”; / /修正中文文件名编码问题 $ NEW_FILE = $上传[ '路径' ]。“/” 。的iconv(“UTF-8” ,“GB2312” ,$文件名); 如果 (假=== @ move_uploaded_file($文件[ 'tmp_name的值' ],$ NEW_FILE )){ 如果 (0 === strpos ($上传[ '的basedir' ],ABSPATH)) $ error_path = str_replace函数(ABSPATH,'' ,$上传[ 'BASEDIR' ])$上传[ '子目录' ]; 其他 $ error_path = 基名($上传[ 'BASEDIR' ])。$上传[ '子目录' ]; 返回 $ upload_error_handler ($文件,sprintf的(__('上传的文件无法被移动到%s' ),$ error_path )); } / /设置正确的文件权限 $统计 =统计(目录名($ NEW_FILE )); $烫发 = $统计[ '模式' ]&0000666; @ CHMOD ($ NEW_FILE ,$烫发 ); / /计算的URL $ URL = $上传[ 'URL' ]。“/ $文件名 ” ; 如果 (is_multisite()) delete_transient('dirsize_cache' ); / /返回apply_filters('wp_handle_upload',数组('文件'=> $ NEW_FILE,'URL'=> $网址,'型'=> $型),'上传'); / /修正中文文件名编码问题 返回 apply_filters('wp_handle_upload' ,数组('文件' => $上传[ '路径' ]。“/ $文件名 ” ,“URL” => $网址,'型' => $型 ),'上传' ); } / ** *手柄侧向载荷,这是检索从另一台服务器的媒体项目,而不是过程 *传统媒体上传。这个过程涉及到消毒的文件名,扩展名检查 *对于MIME类型和文件移动到相应的目录下上传目录中。 * * @自从2.6.0 * * @使用wp_handle_upload_error * @使用apply_filters * @使用wp_check_filetype_and_ext * @使用current_user_can * @使用wp_upload_dir * @使用wp_unique_filename * @参数数组$文件类似于一个PHP $ _FILES POST数组的数组 * @参数数组$覆盖可选。名称=>值覆盖默认的变量提取物($覆盖,EXTR_OVERWRITE)的关联数组。 * @参数字符串$ time可选。时间在“年/月”的格式。 * @返回的数组成功后,返回文件属性的关联数组。如果失败,则返回$覆盖['upload_error_handler'](&$文件,$消息)或阵列('错误'=> $消息)。 * / 功能 wp_handle_sideload(&$文件,$覆盖 = FALSE,$时间 = NULL){ / /默认的错误处理程序。 如果 (!function_exists('wp_handle_upload_error' )){ 功能 wp_handle_upload_error(&$文件,$消息 ){ 返回 的数组('错误' => $消息 ); } } / /你可以定义你自己的函数,并通过在$覆盖['upload_error_handler']的名称 $ upload_error_handler = 'wp_handle_upload_error' ; / /你可以定义你自己的函数,并通过在$覆盖['unique_filename_callback']的名称 $ unique_filename_callback = NULL; / / $ _POST ['行动']必须设置其值必须等于$覆盖['行动']或这个: $行动 = 'wp_handle_sideload' ; php.net的/ /礼貌,描述错误的字符串表示在$ _FILES [{表单字段}] ['错误']。 $ upload_error_strings = 阵列(假的, __( “ 上传文件超过在<code>的upload_max_filesize </ code>的指令中的<code>的php.ini </ code>的。” ) __( “ 上传的文件大小超过了HTML表单中指定的的<em> MAX_FILE_SIZE </ em>的指令”。 ) __( “ 上传的文件只有部分被上传。” ) __( “ 没有文件被上传。” ) '' , __( “ 缺少临时文件夹”。 ) __( “ 无法写入文件到磁盘” ), __( “ 文件上传推而广之停止。” )); / /所有的测试都是在默认情况下。大多数可以通过$覆盖[{test_name}] = false来关闭; $ test_form = TRUE; $ test_size = TRUE; / /如果重写此,您必须提供$分机和$型!! $ test_type = TRUE; $默剧 = FALSE; / /安装用户覆盖。我们提到这个空隙保修? 如果 (IS_ARRAY ($覆盖 )) 提取物($覆盖,EXTR_OVERWRITE); / /正确的表格后会通过这个测试。 如果 ($ test_form &&(isset(的!$ _POST [ '行动' ])| |($ _POST [ '行动' !] = $行动 ))) 返回 $ upload_error_handler ($文件,__('无效的表单提交。' )); / /上传成功会通过这个测试。这是没有意义的覆盖这一个。 如果 (!空($文件[ '错误' ])) 返回 $ upload_error_handler ($文件,$ upload_error_strings [ $文件[ '错误' ]); / /一个非空的文件将通过这个测试。 如果 ($ test_size &&!(文件大小($文件[ 'tmp_name的值' ])> 0)) 返回 $ upload_error_handler ($文件,__('文件为空,请上传一个实在的这个错误也可以通过上传功能已在你的php.ini造成的。“ )); / /一个正确上传的文件将通过这个测试。不应该有任何理由来覆盖这一个。 如果 (!@ is_file ($文件[ 'tmp_name的值' ])) 返回 $ upload_error_handler ($文件,__('指定的文件不存在。' )); / /正确的MIME类型会通过这个测试。覆盖$默剧或使用upload_mimes过滤器。 如果 ($ test_type ){ $ wp_filetype = wp_check_filetype_and_ext($文件[ 'tmp_name的值' ],$文件[ '名称' ],$默剧 ); 提取物($ wp_filetype ); / /检查是否wp_check_filetype_and_ext()确定的文件名是不正确的 如果 ($ proper_filename ) $文件[ '名称' ] = $ proper_filename ; 如果 ((!$类型 | |!$转 !)&& current_user_can('unfiltered_upload' )) 返回 $ upload_error_handler ($文件,__('对不起,该文件类型不允许出于安全考虑。“ )); 如果 (!$分机 ) $分机 = LTRIM(strrchr ($文件[ '名称' ],'。' ),'。' ); 如果 (!$型 ) $型 = $文件[ “型” ]; } / /可写的上传目录将通过这个测试。再次,有没有点覆盖这一个。 如果 (!(($上传 = wp_upload_dir($时间 ))&&假=== $上传[ '错误' ])) 返回 $ upload_error_handler ($文件,$上传[ '错误' ]); $文件名 = wp_unique_filename($上传[ '路径' ],$文件[ '名称' ],$ unique_filename_callback ); / /地带的查询字符串。 $文件名 = str_replace函数('?' ,' - ' ,$文件名); $文件名 = str_replace函数('&' ,' - ' ,$文件名); / /移动文件到上传目录 $ NEW_FILE = $上传[ '路径' ] “/ $文件名 ” ; 如果 (假=== @重命名($文件[ 'tmp_name的值' ],$ NEW_FILE )){ 如果 (0 === strpos ($上传[ '的basedir' ],ABSPATH)) $ error_path = str_replace函数(ABSPATH,'' ,$上传[ 'BASEDIR' ])$上传[ '子目录' ]; 其他 $ error_path = 基名($上传[ 'BASEDIR' ])。$上传[ '子目录' ]; 返回 $ upload_error_handler ($文件,sprintf的(__('上传的文件无法被移动到%s' ),$ error_path )); } / /设置正确的文件权限 $统计 =统计(目录名($ NEW_FILE )); $烫发 = $统计[ '模式' ]&0000666; @ CHMOD ($ NEW_FILE ,$烫发 ); / /计算的URL $ URL = $上传[ 'URL' ]。“/ $文件名 ” ; $回报 = apply_filters('wp_handle_upload' ,数组('文件' => $ NEW_FILE ,'URL' => $网址,'型' => $型 ),'侧向载荷' ); 返回 $回报; } / ** *下载总数的URL使用WordPress的HTTP类的本地临时文件。 *请注意,调用函数必须取消链接()的文件。 * * @自从2.5.0 * * @参数字符串$ url中文件的URL来下载 * @参数INT $超时的超时时间来下载文件默认300秒请求 * @返回失败,对成功的字符串文件名混合WP_Error。 * / 功能 DOWNLOAD_URL($网址,$超时 = 300){ / /警告:该文件不会被自动删除,该脚本必须取消链接()的文件。 如果 (!$网址 ) 返回 新 WP_Error('http_no_url' ,__('无效的URL提供。' )); $ tmpfname = wp_tempnam($ URL ); 如果 (!$ tmpfname ) 返回 新 WP_Error('http_no_file' ,__('无法创建临时文件。' )); $反应 = wp_safe_remote_get($网址,数组('超时' => $超时,'流' => true时,'文件名' => $ tmpfname )); 如果 (is_wp_error($响应 )){ 取消链接($ tmpfname ); 返回 $反应; } 如果 (200!= wp_remote_retrieve_response_code($响应 )){ 取消链接($ tmpfname ); 返回 新 WP_Error('http_404' ,修剪(wp_remote_retrieve_response_message($响应 ))); } $ content_md5 = wp_remote_retrieve_header($回应,“内容-MD5' ); 如果 ($ content_md5 ){ $ md5_check = verify_file_md5($ tmpfname ,$ content_md5 ); 如果 (is_wp_error($ md5_check )){ 取消链接($ tmpfname ); 返回 $ md5_check ; } } 返回 $ tmpfname ; } / ** *计算和文件的MD5比较它的预期值。 * * @自从3.7.0 * * @参数字符串$文件名中的文件名来检查的MD5。 * @参数字符串$ expected_md5文件的MD5的预期,无论是base64编码的原始MD5或十六进制编码的MD5 * @返回布尔|失败,对成功的真,假目标WP_Error当MD5格式未知/意外 * / 功能 verify_file_md5($文件名,$ expected_md5 ){ 如果 (32 == 的strlen ($ expected_md5 )) $ expected_raw_md5 =包('H *' ,$ expected_md5 ); ELSEIF (24 == 的strlen ($ expected_md5 )) $ expected_raw_md5 = base64_decode ($ expected_md5 ); 其他 返回 FALSE; / /未知的格式 $ file_md5 = md5_file($文件名,真实); 如果 ($ file_md5 === $ expected_raw_md5 ) 返回 真; 返回 新 WP_Error('md5_mismatch' ,sprintf的(__('该文件的校验和(%1 $ s)不符合预期的校验值(%2 $ s)的' ),BIN2HEX($ file_md5 ),BIN2HEX($ expected_raw_md5 ))); } / ** *解压缩指定的ZIP文件通过WordPress的文件系统抽象文件系统中的位置。 *假设条件是WP_Filesystem()已经被调用和设置。不提取根级__ MACOSX目录,如果存在的话。 * *尝试解压缩之前增加PHP的内存限制为256M, *然而,最需要的内存应不低于存档本身大得多。 * * @自从2.5.0 * * @参数字符串$文件的完整路径和zip压缩包的文件名 * @参数字符串$为全路径上的文件系统提取存档 * @返回失败混WP_Error,真正的成功 * / 功能 unzip_file($文件,$至){ 全球 $ wp_filesystem ; 如果 (!$ wp_filesystem | |!IS_OBJECT ($ wp_filesystem )) 返回 新 WP_Error('fs_unavailable' ,__('无法访问文件系统。' )); / /解压缩可以使用大量的内存,但不是这么多的希望 @ 用ini_set (“memory_limit的' ,apply_filters('admin_memory_limit' ,WP_MAX_MEMORY_LIMIT)); $ needed_dirs = 阵列(); 至$ = trailingslashit($到); / /判断所需的任何父目录的(升级目录) 如果 (!$ wp_filesystem - > is_dir ($到)){ / /只有当没有孩子存在做父母 $ PATH = preg_split('[/ \ \ \]!' ,untrailingslashit($到)); 为 ($我 = 计数($路径); $ I > = 0,$ I - ){ 如果 (空($路径[ $ I ])) 继续; $ DIR =破灭('/' ,array_slice ($路径,0,$ I +1)); 如果 (的preg_match('^ [AZ]:!$我' ,$ DIR ))/ /跳过它,如果它看起来像一个Windows盘符。 继续; 如果 (!$ wp_filesystem - > is_dir ($ DIR )) $ needed_dirs [] = $目录; 其他 打破; / /一个文件夹存在,为此,我们不需要检查水平低于此 } } 如果 (class_exists ('ZipArchive' )&& apply_filters('unzip_file_use_ziparchive' ,真)){ $结果 = _unzip_file_ziparchive($文件,$到,$ needed_dirs ); 如果 (真=== $结果 ){ 返回 $结果; } ELSEIF (is_wp_error($结果)){ 如果 ('incompatible_archive' =!$结果- > get_error_code()) 返回 $结果; } } / /失败,进入PclZip如果ZipArchive不可用,或遇到错误打开文件。 返回 _unzip_file_pclzip($文件,$到,$ needed_dirs ); } / ** *此功能不应该被直接调用,使用unzip_file代替。尝试使用ZipArchive类来解压缩档案。 *假设条件是WP_Filesystem()已经被调用和设置。 * * @自从3.0.0 * @见unzip_file * @私人的访问 * * @参数字符串$文件的完整路径和zip压缩包的文件名 * @参数字符串$为全路径上的文件系统提取存档 * @参数数组$ needed_dirs需要创建所需的文件夹中的部分列表。 * @返回失败混WP_Error,真正的成功 * / 功能 _unzip_file_ziparchive($文件,$到,$ needed_dirs = 阵列()){ 全球 $ wp_filesystem ; - Z = 新 ZipArchive(); $ zopen = $ - >打开($文件,ZIPARCHIVE :: CHECKCONS); 如果 (真的!== $ zopen ) 返回 新 WP_Error('incompatible_archive' ,__('不兼容的存档。' ),数组('ziparchive_error' => $ zopen )); $ uncompressed_size = 0; 为 ($我 = 0; $我 < $ - > numFiles; $ I + +){ 如果 (!$信息 = $ - > statIndex($ I )) 返回 新 WP_Error('stat_failed_ziparchive' ,__('无法从归档中检索文件。' )); 如果 ('__MACOSX /' === SUBSTR ($信息[ '名称' ],0,9))/ /跳过OS X创建__ MACOSX目录 继续; $ uncompressed_size + = $信息[ '大小' ]; 如果 ('/' == SUBSTR ($信息[ '名称' ],-1))/ /目录 $ needed_dirs [] = $来 。untrailingslashit($信息[ '名称' ]); 其他 $ needed_dirs [] = $来 。untrailingslashit(目录名($信息[ '名称' ])); } / * * disk_free_space()可能返回false。假设任何falsey值是一个错误。 *具有零点免费字节的磁盘具有更大的问题。 *要求我们有足够的空间来解压缩文件,并复制其内容,有10%的缓冲区。 * / 如果 (定义('DOING_CRON' )&& DOING_CRON){ $ available_space = @ disk_free_space(WP_CONTENT_DIR); 如果 ($ available_space &&($ uncompressed_size * 2.1)> $ available_space ) 返回 新 WP_Error('disk_full_unzip_file' ,__('无法复制文件,您可能已用完磁盘空间。' ),小巧('uncompressed_size' ,'available_space' )); } $ needed_dirs = array_unique ($ needed_dirs ); 的foreach ($ needed_dirs 为 $ DIR ){ / /检查文件夹的创建阵列内所有存在的父文件夹。 如果 (untrailingslashit($到)== $ DIR )/ /跳过的工作目录,我们知道这存在(或将会存在) 继续; 如果 (strpos ($ DIR ,$到)=== FALSE)/ /如果该目录不在工作目录中,跳过它 继续; $ parent_folder =目录名($ DIR ); 而 (!空($ parent_folder )&& untrailingslashit($到)!= $ parent_folder &&!in_array($ parent_folder ,$ needed_dirs )){ $ needed_dirs [] = $ parent_folder ; $ parent_folder =目录名($ parent_folder ); } } ASORT($ needed_dirs ); / /创建这些目录中,如果需要的话: 的foreach ($ needed_dirs 为 $ _dir ){ 如果 (!$ wp_filesystem - > MKDIR ($ _dir ,FS_CHMOD_DIR)&&!$ wp_filesystem - > is_dir ($ _dir ))/ /只检查,看是否存在目录后,创建失败。更少的I / O这样的。 返回 新 WP_Error('mkdir_failed_ziparchive' ,__('无法创建目录' ),SUBSTR ($ _dir ,strlen的($到 ))); } 取消($ needed_dirs ); 为 ($我 = 0; $我 < $ - > numFiles; $ I + +){ 如果 (!$信息 = $ - > statIndex($ I )) 返回 新 WP_Error('stat_failed_ziparchive' ,__('无法从归档中检索文件。' )); 如果 ('/' == SUBSTR ($信息[ '名称' ],-1))/ /目录 继续; 如果 ('__MACOSX /' === SUBSTR ($信息[ '名称' ],0,9))/ /不要解压OS X创建__ MACOSX目录中的文件 继续; $内容 = $ - > getFromIndex($ I ); 如果 (假=== $内容 ) 返回 新 WP_Error('extract_failed_ziparchive' ,__('无法从存档中提取文件。' ),$信息[ '名称' ]); 如果 (!$ wp_filesystem - > put_contents($到 ,$信息[ '名称' ],$内容,FS_CHMOD_FILE)) 返回 新 WP_Error('copy_failed_ziparchive' ,__('无法复制文件。' ),$信息[ '名称' ]); } - Z - >关闭(); 返回 真; } / ** *此功能不应该被直接调用,使用unzip_file代替。尝试解压缩使用PclZip库存档。 *假设条件是WP_Filesystem()已经被调用和设置。 * * @自从3.0.0 * @见unzip_file * @私人的访问 * * @参数字符串$文件的完整路径和zip压缩包的文件名 * @参数字符串$为全路径上的文件系统提取存档 * @参数数组$ needed_dirs需要创建所需的文件夹中的部分列表。 * @返回失败混WP_Error,真正的成功 * / 功能 _unzip_file_pclzip($文件,$到,$ needed_dirs = 阵列()){ 全球 $ wp_filesystem ; mbstring_binary_safe_encoding(); require_once (ABSPATH。'wp-admin/includes/class-pclzip.php' ); $归档 = 新 PclZip($文件); $ archive_files = $归档- >提取物(PCLZIP_OPT_EXTRACT_AS_STRING); reset_mbstring_encoding(); / /是归档是否有效? 如果 (!IS_ARRAY ($ archive_files )) 返回 新 WP_Error('incompatible_archive' ,__('不兼容的存档。' ),$归档- > errorInfo中(真)); 如果 (0 == 计数($ archive_files )) 返回 新 WP_Error('empty_archive_pclzip' ,__('空归档。' )); $ uncompressed_size = 0; / /判断所需的任何儿童的目录(从归档中) 的foreach ($ archive_files 为 $文件 ){ 如果 ('__MACOSX /' === SUBSTR ($文件[ '文件名' ],0,9))/ /跳过OS X创建__ MACOSX目录 继续; $ uncompressed_size + = $文件[ '大小' ]; $ needed_dirs [] = $来 。untrailingslashit($文件[ '文件夹' ]?$文件[ '文件名' ]:目录名($文件[ '文件名' ])); } / * * disk_free_space()可能返回false。假设任何falsey值是一个错误。 *具有零点免费字节的磁盘具有更大的问题。 *要求我们有足够的空间来解压缩文件,并复制其内容,有10%的缓冲区。 * / 如果 (定义('DOING_CRON' )&& DOING_CRON){ $ available_space = @ disk_free_space(WP_CONTENT_DIR); 如果 ($ available_space &&($ uncompressed_size * 2.1)> $ available_space ) 返回 新 WP_Error('disk_full_unzip_file' ,__('无法复制文件,您可能已用完磁盘空间。' ),小巧('uncompressed_size' ,'available_space' )); } $ needed_dirs = array_unique ($ needed_dirs ); 的foreach ($ needed_dirs 为 $ DIR ){ / /检查文件夹的创建阵列内所有存在的父文件夹。 如果 (untrailingslashit($到)== $ DIR )/ /跳过的工作目录,我们知道这存在(或将会存在) 继续; 如果 (strpos ($ DIR ,$到)=== FALSE)/ /如果该目录不在工作目录中,跳过它 继续; $ parent_folder =目录名($ DIR ); 而 (!空($ parent_folder )&& untrailingslashit($到)!= $ parent_folder &&!in_array($ parent_folder ,$ needed_dirs )){ $ needed_dirs [] = $ parent_folder ; $ parent_folder =目录名($ parent_folder ); } } ASORT($ needed_dirs ); / /创建这些目录中,如果需要的话: 的foreach ($ needed_dirs 为 $ _dir ){ / /只检查,看是否存在目录后,创建失败。更少的I / O这样的。 如果 (!$ wp_filesystem - > MKDIR ($ _dir ,FS_CHMOD_DIR)&&!$ wp_filesystem - > is_dir ($ _dir )) 返回 新 WP_Error('mkdir_failed_pclzip' ,__('无法创建目录' ),SUBSTR ($ _dir ,strlen的($到 ))); } 取消($ needed_dirs ); / /从zip解压缩档案 的foreach ($ archive_files 为 $文件 ){ 如果 ($文件[ '文件夹' ]) 继续; 如果 ('__MACOSX /' === SUBSTR ($文件[ '文件名' ],0,9))/ /不要解压OS X创建__ MACOSX目录中的文件 继续; 如果 (!$ wp_filesystem - > put_contents($至 。$文件[ '文件名' ],$文件[ '内容' ],FS_CHMOD_FILE)) 返回 新 WP_Error('copy_failed_pclzip' ,__('无法复制文件。' ),$文件[ '文件名' ]); } 返回 真; } / ** *将文件从一个位置通过WordPress的文件系统提取一个目录到另一个。 *假设条件是WP_Filesystem()已经被调用和设置。 * * @自从2.5.0 * *从源代码目录@参数字符串$ * @参数字符串$到目标目录 * @参数数组$ skip_list文件/文件夹的列表跳过复制 * @返回混合WP_Error失败,真正的成功。 * / 功能 copy_dir(从$ ,$到,$ skip_list = 阵列()){ 全球 $ wp_filesystem ; $ dirlist中 = $ wp_filesystem - > dirlist中(从$ ); 从$ = trailingslashit(从$ ); 至$ = trailingslashit($到); 的foreach ((数组)$ dirlist中 的 $文件名 => $的FileInfo ){ 如果 (in_array($文件名,$ skip_list )) 继续; 如果 ('F' == $的FileInfo [ '类型' ]){ 如果 (!$ wp_filesystem - > 拷贝(从$ 。$文件名,$至 。$文件名,真实,FS_CHMOD_FILE)){ / /如果复制失败,CHMOD文件0644,然后再试一次。 $ wp_filesystem - > 文件模式($到 ,$文件名,FS_CHMOD_FILE); 如果 (!$ wp_filesystem - > 复制(从$ 。$文件名,$至 。$文件名,真实,FS_CHMOD_FILE)) 返回 新 WP_Error('copy_failed_copy_dir' ,__('无法复制文件。' ),$至 。$文件名 ); } } elseif的 ('D' == $的FileInfo [ '类型' ]){ 如果 (!$ wp_filesystem - > is_dir ($至 。$文件名)){ 如果 (!$ wp_filesystem - > MKDIR ($到 ,$文件名,FS_CHMOD_DIR)) 返回 新 WP_Error('mkdir_failed_copy_dir' ,__('无法创建目录' ),$至 。$文件名 ); } / /生成$ sub_skip_list的子目录作为子集的现有$ skip_list $ sub_skip_list = 阵列(); 的foreach ($ skip_list 为 $ skip_item ){ 如果 (0 === strpos ($ skip_item ,$文件名 。'/' )) $ sub_skip_list [] = preg_replace函数('!^' 。preg_quote($文件名,'!' )'!/我' ,'' ,$ skip_item ); } $结果 = copy_dir($从 。$文件名,$至 。$文件名,$ sub_skip_list ); 如果 (is_wp_error($结果)) 返回 $结果; } } 返回 真; } / ** *初始化并连接WordPress的文件系统抽象类。 *此功能将包括所选择的传输,并尝试连接。 * *插件可以添加额外的运输,并迫使由WordPress的通过“filesystem_method_file'过滤器返回的文件名来使用它们。 * * @自从2.5.0 * * @参数数组的$ args(可选)连接参数时,这些都直接传递给WP_Filesystem_ *()类。 * @参数字符串$上下文(可选)语境get_filesystem_method(),参见函数的声明获取更多信息。 * @返回布尔值false失败,对成功的真正 * / 功能 WP_Filesystem(的$ args = FALSE,$上下文 = FALSE){ 全球 $ wp_filesystem ; require_once (ABSPATH。'wp-admin/includes/class-wp-filesystem-base.php' ); $方法 = get_filesystem_method(的$ args ,$上下文); 如果 (!$方法 ) 返回 FALSE; 如果 (!class_exists (“WP_Filesystem_ $方法” )){ $ abstraction_file = apply_filters('filesystem_method_file' ,ABSPATH。“wp-admin/includes/class-wp-filesystem-' 。$方法 。'PHP' ,$方法); 如果 (!file_exists ($ abstraction_file )) 返回; require_once ($ abstraction_file ); } $方法 = “WP_Filesystem_ $法” ; $ wp_filesystem = 新的 方法$ (的$ args ); / /定义超时的连接。在构造了唯一可用的后允许每个传输覆盖默认的。 如果 (!定义('FS_CONNECT_TIMEOUT' )) DEFINE('FS_CONNECT_TIMEOUT' ,30); 如果 (!定义('FS_TIMEOUT' )) DEFINE('FS_TIMEOUT' ,30); 如果 (is_wp_error($ wp_filesystem - >错误)&& $ wp_filesystem - >错误- > get_error_code()) 返回 FALSE; 如果 (!$ wp_filesystem - >连接()) 返回 FALSE; / /无法连接到服务器时发生错误。 / /设置权限常量,如果尚未设置。 如果 (!定义('FS_CHMOD_DIR' )) DEFINE('FS_CHMOD_DIR' ,(fileperms (ABSPATH)及0777 | 0755)); 如果 (!定义('FS_CHMOD_FILE' )) DEFINE('FS_CHMOD_FILE' ,(fileperms (ABSPATH。 “ 的index.php” )及0777 | 0644)); 返回 真; } / ** *确定文件系统的方法来使用的。 *的传输的优先级是:直接,SSH2,FTP PHP扩展,FTP套接字(通过套接字类,或的fsockopen()) * *请注意,这个函数的返回值可以通过2种方式来覆盖 * - 通过你的的<code>的wp-config.php文件</ code>文件定义FS_METHOD * - 通过使用filesystem_method过滤器 *这些有效值是:“直接”,“SSH”,“ftpext'或'ftpsockets” *插件也可以定义自定义传输处理程序,请参阅WP_Filesystem功能的更多信息。 * * @自从2.5.0 * * @参数数组的$ args连接的详细信息。 * @参数字符串$上下文完整路径是为是可写的测试的目录。 * @返回字符串的传输使用,看说明有效的返回值。 * / 功能 get_filesystem_method(的$ args = 阵列(),$上下文 = FALSE){ $方法 =定义('FS_METHOD' )?FS_METHOD:假; / /请确保这是不是“直接”,“SSH”,“ftpext'或'ftpsockets” 如果 (!$方法 && function_exists('getmyuid' )&& function_exists('fileowner' )){ 如果 (!$上下文 ) $上下文 = WP_CONTENT_DIR; / /如果目录不存在(wp-content/languages),然后使用父目录,我们将创建它。 如果 (WP_LANG_DIR == $上下文 &&!is_dir ($上下文 )) $上下文 =目录名($范围内 ); $上下文 = trailingslashit($范围内); $ temp_file_name = $上下文 。“温度-写-测试' 。时间(); $ temp_handle = @ 的fopen ($ temp_file_name ,'W' ); 如果 ($ temp_handle ){ 如果 (getmyuid ()== @ fileowner ($ temp_file_name )) $方法 = “直接” ; @ FCLOSE($ temp_handle ); @的unlink($ temp_file_name ); } } 如果 (!$方法 &&使用isset(的$ args [ 'connection_type' ])&& '的ssh' == 的$ args [ 'connection_type' ] && extension_loaded ('SSH2' )&& function_exists('stream_get_contents' ))$方法 = “SSH2” ; 如果 (!$方法 && extension_loaded ('FTP' ))$方法 = 'ftpext' ; 如果 (!$方法 &&(extension_loaded ('插座' |)| function_exists('的fsockopen' )))$方法 = 'ftpsockets' ,/ /套接字:套接字扩展,PHP的模式:的fsockopen / fwrite的/ FREAD 返回 apply_filters('filesystem_method' ,$方法,的$ args ); } / ** *显示一个表单给用户,要求为他们的FTP / SSH的详细信息,以便连接到文件系统。 *所有选择/输入的详细信息被保存,但不包括密码。 * *主机名可以是主机名的形式为:端口号(如:wordpress.org:2467)来指定一个备用的FTP / SSH端口。 * 通过在<code> request_filesystem_credentials假</ code>的过滤器| *插件可以通过返回true覆盖此表格。 * * @自从2.5.0 * * @参数字符串$ form_post张贴形式的URL * @参数字符串$类型中使用所选择的文件系统的方法 * @参数布尔值$错误,如果当前请求无法连接 * @参数字符串$上下文所需要访问的目录,在写测试将在这个目录由get_filesystem_method执行() * @参数字符串$ extra_fields应检查被列入后额外的POST领域。 * @返回失败布尔值false。真正的成功。 * / 功能 request_filesystem_credentials($ form_post ,$型 = '' ,$错误 = FALSE,$上下文 = FALSE,$ extra_fields = NULL){ $ req_cred = apply_filters('request_filesystem_credentials' ,'' ,$ form_post ,$型,$错误,$背景下,$ extra_fields ); 如果 ('' !== $ req_cred ) 返回 $ req_cred ; 如果 (空($型)) $型 = get_filesystem_method(阵列(),$上下文); 如果 ('直接' == $型 ) 返回 真; 如果 (is_null ($ extra_fields )) $ extra_fields = 阵列('版本' ,'区域' ); $凭据 = get_option('ftp_credentials' ,数组('主机' => '' ,'用户名' => '' )); / /如果定义,将其设置为,否则,如果POST'd,将其设置为,如果不是,将它设置为不管它以前是(在保存选项的详细信息) $凭据[ '主机名' ] =定义('FTP_HOST' )?(!:FTP_HOST 空($ _POST [ '主机名' ?])wp_unslash($ _POST [ '主机名' ]):$凭据[ '主机名' ]); $凭据[ '用户名' ] =定义('FTP_USER' )?FTP_USER:(!空($ _POST [ '用户名' ?])wp_unslash($ _POST [ '用户名' ]):$凭据[ '用户名' ]); $凭据[ '密码' ] =定义('FTP_PASS' )?FTP_PASS:(!空($ _POST [ “密码” ])wp_unslash(?$ _POST [ “密码” ]):'' ); / /检查我们是否设置公共/私有密钥的ssh $凭据[ 'PUBLIC_KEY' ] =定义('FTP_PUBKEY' )?FTP_PUBKEY:(!空($ _POST [ 'PUBLIC_KEY' ?])wp_unslash($ _POST [ 'PUBLIC_KEY' ]):' ); $凭据[ '的private_key' ] =定义('FTP_PRIKEY' )?(!:FTP_PRIKEY 空($ _POST [ '的private_key' ?])wp_unslash($ _POST [ '的private_key' ]):' ); / /消毒的主机名,有些人可能会通过在奇数据: $凭据[ '主机名' ] = preg_replace函数('| \ W + :/ / |' ,'' ,$凭据[ '主机名' ]); / /带任何计划关闭 如果 (strpos ($凭据[ '主机名' ],':' )){ 列表($凭据[ '主机名' ],$凭据[ '口' ])= 爆炸(':' ,$凭据[ '主机名' ],2); 如果 (!is_numeric ($凭据[ '口' ])) 取消($凭据[ '口' ]); } 否则 { 取消($凭据[ '口' ]); } 如果 ((定义('FTP_SSH' )&& FTP_SSH)| |(定义('FS_METHOD' )&& '的ssh' == FS_METHOD)) $凭据[ 'connection_type' ] = 'ssh的' ; 否则 ,如果 ((定义('FTP_SSL' )&& FTP_SSL)&& 'ftpext' == $型 )/ /只有FTP扩展SSL的理解 $凭据[ 'connection_type' ] = 'FTPS' ; 否则 ,如果 (!空($ _POST [ 'connection_type' ])) $凭据[ 'connection_type' ] = wp_unslash($ _POST [ 'connection_type' ]); 否则 ,如果 (!使用isset($凭据[ 'connection_type' ]))/ /所有的都失败了(而且它不拖欠别的东西保存),默认为FTP $凭据[ 'connection_type' ] = 'ftp的' ; 如果 (!$错误 && ( (!空($凭据[ '密码' !])&& 空($凭据[ '用户名' !])&& 空($凭据[ '主机名' ]))| | (“SSH” == $凭据[ 'connection_type' ] &&!空($凭据[ 'PUBLIC_KEY' ])&&!空($凭据[ '的private_key' ])) )){ $ stored_credentials = $凭据; 如果 (!空($ stored_credentials [ '口' ]))/ /保存端口作为主机名来简化上面的代码的一部分。 $ stored_credentials [ '主机名' ] =。':' 。$ stored_credentials [ '口' ]; unset( $stored_credentials [ 'password' ], $stored_credentials [ 'port' ], $stored_credentials [ 'private_key' ], $stored_credentials [ 'public_key' ]); update_option('ftp_credentials' ,$ stored_credentials ); 返回 $凭据; } $主机 = '' ; $用户名 = '' ; $密码 = '' ; $ connection_type = '' ; 如果 (!空($凭据)) 提取物($凭据,EXTR_OVERWRITE); 如果 ($错误 ){ $ ERROR_STRING = __('。<STRONG>错误:</ STRONG>无法连接到服务器时发生错误,请检查设置是否正确' ); 如果 (is_wp_error($错误)) $ ERROR_STRING = esc_html($错误- > get_error_message()); 回声 “<div id="message" class="error"> <P>' 。$ ERROR_STRING 。“</ P> </ DIV>' ; } $类型 = 阵列(); 如果 (extension_loaded ('FTP' )| | extension_loaded ('插座' )| | function_exists('的fsockopen' )) $类型[ 'FTP' ] = __('FTP' ); 如果 (extension_loaded ('FTP' ))/ /只有这个支持FTPS $类型[ 'FTPS' ] = __('FTPS(SSL)' ); 如果 (extension_loaded ('SSH2' )&& function_exists('stream_get_contents' )) $类型[ 'ssh的' ] = __('SSH2' ); $类型 = apply_filters('fs_ftp_connection_types' ,$种,$凭据,$型,$错误,$上下文); ?> <脚本类型= “文/ JavaScript的” > <! - jQuery的(函数($){ 的jQuery( “#ssh 的” )。点击(函数 (){ 的jQuery( “#ssh_keys” 。)的show(); }); 的jQuery( “#FTP,FTPS#” )。点击( 函数 (){ 的jQuery( “#ssh_keys” )的hide(); }); 的jQuery( “ 表单输入[值=”“]:第一个' )。对焦(); }); - > </ SCRIPT> <形式的行动= “<?PHP的回声esc_url($ form_post)?>” 方法= “POST” > <DIV> <H3> <?的php _e('连接信息' )?> </ H3> <P> <?PHP $ label_user = __('用户名' ); $ label_pass = __('密码' ); _e('要执行所请求的操作,WordPress的需要访问您的Web服务器。' ); 回声 “” ; 如果 ((使用isset($类型[ 'FTP' ])| | isset(的$种[ 'FTPS' ]))){ 如果 (使用isset($类型[ 'ssh的' ])){ _e('请输入您的FTP或SSH认证来进行。' ); $ label_user = __('FTP / SSH用户名' ); $ label_pass = __('FTP / SSH密码' ); } 否则 { _e('请输入您的FTP凭据以继续。' ); $ label_user = __('FTP用户名' ); $ label_pass = __('FTP密码' ); } 回声 “” ; } _e('如果你不记得您的凭据,您应该联系您的虚拟主机。' ); ?> </ P> <表类= “表单表” > <TR VALIGN = “顶” > <个范围= “行” > <标签为= “主机名” > <?php的_e('主机名' )?> </标签> </次> <TD> <输入名称= “主机名” 类型= “文本” ID = “主机名” 值= “<PHP的回声esc_attr($主机),如果(空($端口)!)回音?” :$口“; “> ?<PHP禁用(定义('FTP_HOST' ));> 大小= “40” /> </ TD> </ TR> <TR VALIGN = “顶” > <个范围= “行” > <标签为= “用户名” > <PHP的?回声 $ label_user ;?> </标签> </次> <TD> <输入名称= “用户名” 类型= “文本” 的id = “username”的 值= “?<PHP的回声esc_attr($的用户名)>” <PHP禁用(定义(?'FTP_USER' ));?>大小= “40” /> </ TD> </ TR> <TR VALIGN = “顶” > <个范围= “行” > <标签为= “密码” > <PHP的?回声 $ label_pass ;?> </标签> </次> <TD> <DIV> <输入名称= “密码” 类型= “密码” ID = “密码” 值= “<PHP如果(定义('FTP_PASS'))回声'*****';?>” <?php的禁用(定义('FTP_PASS' ));?>大小= “40” /> </ DIV> <DIV>的<em> <?PHP 如果 (定义(!'FTP_PASS“ _e())'这个密码将不被存储在服务器上。' );?> </ EM> </ DIV> </ TD> </ TR> <?的PHP 如果 (使用isset($类型[ 'ssh的' ])):?> <TR ID = “ssh_keys” VALIGN = “顶” 的风格= “<PHP如果(或者ssh = $ connection_type!)回声”显示:无'?>“ > <个范围= “行” > <?php的_e('认证密钥' )?> <格类= “键标签textright” > <标签为= “PUBLIC_KEY” > <PHP的_e(?'公钥:' )?> </标签> <br /> <标签为= “的private_key” > <PHP的_e(?'私用密钥:' )?> </标签> </ DIV> </次> <TD> <br /> <输入名称= “PUBLIC_KEY” 类型= “文本” ID = “PUBLIC_KEY” 值= “<?PHP的回声esc_attr($ PUBLIC_KEY)?>” <?php的禁用(定义('FTP_PUBKEY' ) );?>大小= “40” /> <br /> <输入名称= “的private_key” 类型= “文本” ID = “的private_key” 值= “?<PHP的回声esc_attr($的private_key)>” <?PHP禁用(定义('FTP_PRIKEY' ));?> 大小= “40” /> <DIV> <?的php _e('服务器所在的键位于输入位置,如果需要密码,输入的密码字段上面。' )?> </ DIV> </ TD> </ TR> <?php的ENDIF ;?> <TR VALIGN = “顶” > <个范围= “行” > <?php的_e( “ 连接类型” )?> </次> <TD> 加上<fieldset> <传奇类= “屏幕阅读器文本” > <SPAN> <?的php _e('连接类型“ )?> </ SPAN> </传奇> <?PHP $残疾人 =禁用((定义('FTP_SSL' )&& FTP_SSL)| |(定义('FTP_SSH' )&& FTP_SSH),TRUE,FALSE); 的foreach ($类型 为 $名称 => $文本 ):?> <标签为= “<?PHP的回声esc_attr($名)?>” > <输入类型= “无线电” 名称= “connection_type” ID = “<?PHP的回声esc_attr($名)?>” 值= “<?PHP的回声esc_attr($名)?>” <?php的检查($名称,$ connection_type ); 回声 $禁用;?> /> <?PHP的回声 $文字 ?> </标签> <?php的endforeach ;?> </ FIELDSET> </ TD> </ TR> </ TABLE> <?PHP 的foreach ((数组)$ extra_fields 为 $场 ){ 如果 (使用isset($ _POST [ $场 ])) 回声 “<输入类型=”隐藏“名称=”“ esc_attr($场 )。'“值=”' esc_attr(wp_unslash($ _POST [ $场 ]))。'“/>” ; } submit_button(__('继续' ),'按钮' ,'升级' ); ?> </ DIV> </ FORM> <?PHP 返回 FALSE; }