问题描述

你编写一个需要 PHP 5.1 的插件。有人尝试将其安装在使用 PHP 4 的服务器上。如何以安全和 user-friendly 方式处理?

最佳解决方案

此功能和激活钩子防止插件激活,并允许您检查最低 PHP 和 WordPress 版本。

register_activation_hook( __FILE__, array( 'Your_Plugin_Class_Name', 'activate' ) );

/**
  * Plugin Activation hook function to check for Minimum PHP and WordPress versions
  * @param string $wp Minimum version of WordPress required for this plugin
  * @param string $php Minimum version of PHP required for this plugin
  */
 function activate( $wp = '3.1', $php = '5.2.4' ) {
    global $wp_version;
    if ( version_compare( PHP_VERSION, $php, '<' ) )
        $flag = 'PHP';
    elseif
        ( version_compare( $wp_version, $wp, '<' ) )
        $flag = 'WordPress';
    else
        return;
    $version = 'PHP' == $flag ? $php : $wp;
    deactivate_plugins( basename( __FILE__ ) );
    wp_die('<p>The <strong>Insert PLugin Name Here</strong> plugin requires'.$flag.'  version '.$version.' or greater.</p>','Plugin Activation Error',  array( 'response'=>200, 'back_link'=>TRUE ) );
}

次佳解决方案

/**
 * Plugin Name: Foo
 */

// Check for required PHP version
if ( version_compare( PHP_VERSION, '5.1', '<' ) )
{
    exit( sprintf( 'Foo requires PHP 5.1 or higher. You』re still on %s.', PHP_VERSION ) );
}

// The rest of your plugin code follows

我不知道从哪个 WP 版本发生了,但在 3.5 插件实际上无法激活,错误消息显示给管理员中的用户,这是整洁的。

但是,错误消息未翻译。为了做到这一点,您必须在 exit 调用之前加载翻译文件。

第三种解决方案

您可以激活它并显示一条错误消息:

// if PHP version is lower than 5.1
if(version_compare(PHP_VERSION, '5.1') < 0){

  // show a message inside the dashboard
  if(is_admin()){

    function my_plugin_notice(){
      ?>
      <div class="error below-h2">
        <p>
        <?php
          printf(__('The abc plugin requires at least PHP 5.1. You have %s'), PHP_VERSION);
         ?>
        </p>
      </div>
      <?php
    }

    add_action('admin_notices', 'my_plugin_notice');

  }

  // stop here and do nothing further
  return;
}

// if PHP version is equal or higher than 5.1
require dirname(__FILE__) . '/php51code.php';

在返回语句之前还可能以编程方式停用它

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。