অপর্যাপ্ত পিএইচপি সংস্করণ ক্ষেত্রে প্লাগইন বাতিল করার সেরা উপায়?


15

আপনি একটি প্লাগইন লিখুন যার জন্য পিএইচপি 5.1 প্রয়োজন। কেউ পিএইচপি 4 সহ একটি সার্ভারে এটি ইনস্টল করার চেষ্টা করে 4. আপনি কীভাবে এটির সাথে নিরাপদ এবং ব্যবহারকারী-বান্ধব উপায়ে আচরণ করবেন?


কেন আপনি এটি প্রয়োজন হবে? ডাব্লুপি পিএইচপি <> 5 এ আর
চালায়

এটি একটি সাধারণ প্রশ্ন। আপনার অন্য কোনও উচ্চতর পিএইচপি সংস্করণ প্রয়োজন হতে পারে। বলা হচ্ছে, ডাব্লুপি ৩.২ থেকে পিএইচপি ৫.২.৪ প্রয়োজন তা আমি জানতাম না ।
গের্ট

2
যারা ইতিমধ্যে বিদ্যমান প্লাগইনটির পিএইচপি প্রয়োজনীয়তা সন্ধান করছেন, আপনার বিদ্যমান ব্যবহারকারীদের প্রয়োজনীয়তা পূরণ না হলে নতুন সংস্করণে আপডেট হওয়া থেকে বিরত রেখে তাদের পক্ষে অনুগ্রহ করুন। বুডিপ্রেস থেকে একটি উদাহরণ । এটি আপনার প্লাগিনের পূর্ববর্তী সংস্করণগুলিতে কিছু প্রস্তুতি গ্রহণ করে তবে আপনার ব্যবহারকারীরা আপনাকে ধন্যবাদ জানায়। আমি কেবল ওয়ার্ডপয়েন্টগুলিতে অনুরূপ কিছু করেছি , যদি ভবিষ্যতে পিএইচপি প্রয়োজনীয়তাগুলি স্থির করার সিদ্ধান্ত নিই।
জেডি

উত্তর:


15

এই ফাংশন এবং অ্যাক্টিভেশন হুক প্লাগইনটিকে সক্রিয় হওয়া থেকে বাধা দেয় এবং আপনাকে সর্বনিম্ন পিএইচপি এবং ওয়ার্ডপ্রেস সংস্করণ উভয়ের জন্য পরীক্ষা করতে দেয়।

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 ) );
}

পিএইচপি সিন্ট্যাক্স পরিবর্তনের কারণে পিএইচপি ফাইলটি মোটেও পার্স করা যায় না যদি এটি কাজ করে না
মার্ক কাপলুন

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

আমি নিশ্চিত নই যেটি থেকে ডাব্লুপি সংস্করণটি ঘটেছে, তবে 3.5 এ প্লাগইনটি আসলে সক্রিয় করতে ব্যর্থ হয় এবং ত্রুটি বার্তা প্রশাসকের ব্যবহারকারীর কাছে প্রদর্শিত হয়, যা পরিষ্কার।

ত্রুটি বার্তাটি অনুবাদ করা হয়নি, যদিও। এটি করার জন্য আপনাকে exitকল করার ঠিক আগে আপনার অনুবাদ ফাইলগুলি লোড করতে হবে।


আমি মনে করি আমি এখনও এই পদ্ধতির সরলতার জন্য পছন্দ করি। এছাড়াও, প্লাগইনটি আসলে কখনও ইনস্টল করা হয় না, সুতরাং খুব পুরানো পিএইচপি সংস্করণের ক্ষেত্রে ডিনেস্টলেশন রুটিনগুলি ট্রিগার করার দরকার নেই।
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';

রিটার্নের স্টেটমেন্টের আগে প্রোগ্রামিয়ালি এটিকে নিষ্ক্রিয় করাও সম্ভবত সম্ভব ...


হ্যাঁ, আপনি যদি এখনও এই সেটআপটি ব্যবহার করেন তবে আপনাকে এটিকে প্রোগ্রামিমেটিকভাবে নিষ্ক্রিয় করতে হবে কারণ অ্যাডমিন বিজ্ঞপ্তি সত্ত্বেও, প্লাগইনটি সক্রিয় হিসাবে প্রদর্শিত হবে।
Geert


1
ফাংশনটির version_compareতুলনা করার জন্য একটি থ্রিম প্যারাম রয়েছে; দয়া করে ব্যবহার করুনif ( version_compare( phpversion(), '5.1a', '<' ) )
13:55

1
এটি কেবল তখনই দরকার যখন আপনি এই ফাংশনটি বুলিয়ান ফিরিয়ে আনতে চান
অনেট্রিকপনি

তবে, বুলিয়ান মানটি পূর্ণসংখ্যার মান 0 এর সাথে তুলনা হিসাবে দ্রুত হয়
বেলজ

0

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে যারা ভাল সমাধানের সন্ধান করছেন তাদের জন্য গ্যারি পেন্ডারগাস্টের যেতে ভাল পথ ছিল যা অন্যান্য উত্তরে উল্লিখিত কয়েকটি ঘাঁটিগুলিকে কভার করেছিল (তার পোস্ট দেখুন এখানে দেখুন , আমি নীচের কোডটি আপডেট করেছি) পিএইচপি সংস্করণ পরীক্ষা করতে, তবে আপনি এটি কার্যত কোনও চেকের জন্য ব্যবহার করতে পারেন):

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

আমি উপরের কোডটিও একটি সংক্ষেপে সংরক্ষণ করেছি ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.