PHP 버전이 부족한 경우 플러그인을 중단하는 가장 좋은 방법은 무엇입니까?


15

PHP 5.1이 필요한 플러그인을 작성합니다. 누군가 PHP 4를 사용하여 서버에 설치하려고합니다. 안전하고 사용자 친화적 인 방법으로 어떻게 처리합니까?


왜 필요한가요? WP는 더 이상 PHP <5에서 실행되지 않습니다
onetrickpony

일반적인 질문입니다. 다른 상위 PHP 버전이 필요할 수 있습니다. WP 3.2부터 PHP 5.2.4가 필요하다는 것을 알지 못했습니다 .
Geert

2
이미 존재하는 플러그인의 PHP 요구 사항을 찾는 사람들은 요구 사항이 충족되지 않으면 기존 사용자가 새 버전으로 업데이트하지 못하도록하여 기존 사용자에게 호의를 베푸십시오. BuddyPress . 플러그인의 이전 버전에서는 약간의 준비가 필요하지만 사용자는 감사합니다. 난 그냥 한 WordPoints에서 비슷한 일을 내가 미래에 PHP 요구 사항까지 결정할 경우.
JD

답변:


15

이 기능 및 활성화 후크는 플러그인이 활성화되지 않도록하고 최소 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 ) );
}

PHP 구문 변경으로 인해 PHP 파일을 전혀 파싱 할 수없는 경우에는 작동하지 않습니다.
Mark Kaplun

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

이 문제가 발생한 WP 버전 이후 확실하지 않지만 3.5에서는 플러그인이 실제로 활성화되지 않고 관리자에게 오류 메시지가 표시됩니다.

그러나 오류 메시지는 번역되지 않습니다. 그러기 위해서는 exit통화 직전에 번역 파일을로드해야합니다 .


나는 여전히 단순성을 위해이 방법을 선호한다고 생각합니다. 또한 플러그인은 실제로 설치되지 않으므로 너무 오래된 PHP 버전의 경우 설치 제거 루틴을 트리거 할 필요가 없습니다.
Geert

6

활성화하고 오류 메시지를 표시 할 수 있습니다.

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

return 문 전에 프로그래밍 방식으로 비활성화 할 수도 있습니다 ...


예, 관리자 공지에도 불구하고 플러그인이 활성화 된 것으로 표시되므로이 설정을 사용하는 경우 프로그래밍 방식으로 비활성화해야합니다.
Geert


1
이 함수 version_compare에는 비교를위한 세 번째 매개 변수가 있습니다. 사용하십시오if ( version_compare( phpversion(), '5.1a', '<' ) )
bueltge

1
이 함수가 부울을 반환하도록하려는 경우에만 필요합니다
onetrickpony

그러나 부울 값은 정수 값 0과 비교할 때 더 빠릅니다.
bueltge

0

나는이 오래된 질문이다 알지만, 좋은 솔루션들 검색을 위해, 게리 팬더 게스트가 (다른 답변에서 언급 된 기지의 몇 그 커버를 가서 자신의 게시물 볼 수있는 좋은 경로 있었다 여기를 , 나는 코드 아래가 업데이트되었습니다 PHP 버전을 확인하려면 거의 모든 확인에 사용할 수 있습니다.)

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

또한 위의 코드를 gist 에 저장했습니다 .


이게 대체 뭐야?!
Andrei Surdu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.