¿La mejor manera de abortar el complemento en caso de que la versión de PHP sea insuficiente?

13

Usted escribe un complemento que requiere PHP 5.1. Alguien intenta instalarlo en un servidor con PHP 4. ¿Cómo lidias con eso de manera segura y fácil de usar?

    
pregunta Geert 13.12.2012 - 16:54

4 respuestas

10
/**
 * 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

No estoy seguro desde qué versión de WP ocurrió esto, pero en 3.5 el complemento realmente no se activa y el mensaje de error se muestra al usuario en el administrador, que está limpio.

Sin embargo, el mensaje de error no está traducido. Para hacerlo, deberías cargar tus archivos de traducción justo antes de la llamada exit .

    
respondido por el Geert 13.12.2012 - 16:54
14

Esta función y el gancho de activación evitan que el complemento se active y le permite verificar si hay una versión mínima de PHP y 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 ) );
}
    
respondido por el Chris_O 14.12.2012 - 11:53
6

Puede activarlo y mostrar un mensaje de error:

// 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';

Probablemente también sea posible desactivarlo programáticamente, antes de la declaración de retorno ...

    
respondido por el onetrickpony 13.12.2012 - 17:28
0

Sé que esta es una pregunta antigua, pero para aquellos que buscan una buena solución, Gary Pendergast tenía un buen camino por recorrer que cubre algunas de las bases mencionadas en las otras respuestas (consulte su publicación here , he actualizado el código a continuación para verificar el PHP Versión, pero puede usarla para prácticamente cualquier verificación):

//  In this example, only allow activation on WordPress 3.7 or higherclass 
MyPlugin {
function __construct() {
    add_action( 'admin_init', array( $this, 'check_version' ) );

    // Don't run anything else in the plugin, if we're on an incompatible WordPress version
    if ( ! self::compatible_version() ) {
        return;
    }
}

// The primary sanity check, automatically disable the plugin on activation if it doesn't// meet minimum requirements.static
function activation_check() {
    if ( ! self::compatible_version() ) {
        deactivate_plugins( plugin_basename( __FILE__ ) );
        wp_die( __( 'My Plugin requires PHP 5.1 or higher!', 'my-plugin' ) );
    }
}

// The backup sanity check, in case the plugin is activated in a weird way,
// or the versions change after activation.
function check_version() {
    if ( ! self::compatible_version() ) {
        if ( is_plugin_active( plugin_basename( __FILE__ ) ) ) {
            deactivate_plugins( plugin_basename( __FILE__ ) );
            add_action( 'admin_notices', array( $this, 'disabled_notice' ) );

            if ( isset( $_GET['activate'] ) ) {
                unset( $_GET['activate'] );
            }
        }
    }
}

function disabled_notice() {
    echo '<strong>' . esc_html__( 'My Plugin requires PHP 5.1 or higher!', 'my-plugin' ) . '</strong>';
}

static function compatible_version() {
    if ( version_compare(PHP_VERSION, '5.1', '<') ) {
        return false;
    }

    // Add sanity checks for other version requirements here

    return true;
}
}
global $myplugin;
$myplugin = new MyPlugin();
register_activation_hook( __FILE__, array( 'MyPlugin', 'activation_check' ) );

También he guardado el código anterior en un gist .

    
respondido por el Joshua Nelson 28.07.2016 - 18:47

Lea otras preguntas en las etiquetas