Guide et astuce Xenforo et la version PHP (cPanel)

Xenforo et la version PHP​


J'ai un site qui fonctionne avec version PHP 5.6 et Xenforo PHP 7.4 sur le même serveur
Comment j'ai fait : d'abord sur cPanel vérifiez que la version PHP 7.4 est active sinon faire le réglage

Le fichier .htaccess va nous rendre service

Pour le site PHP 5.6
Code:
# php -- BEGIN cPanel-generated handler, do not edit
# Set the "ea-php56" package as the default "PHP" programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

Pour Xenforo PHP 7.4
Code:
# php -- BEGIN cPanel-generated handler, do not edit
# Set the "ea-php74" package as the default "PHP" programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php74 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
 

Maxime H

Membre 
Salut @JeanLouis et merci pour cette astuce avec le fichier .htaccess qui à priori permet d'utiliser 2 versions PHP sur un même serveur, c'est ça ? Je ne connais pas cPanel et je ne savais pas qu'il était capable d'activer 2 versions PHP en même temps.

De ce que je comprends le code que tu inscris dans le fichier .htaccess ne cible pas forcément XenForo ou un autre CMS, il est générique et permet juste d'utiliser 2 versions PHP, tu confirmes ?

Le site dont tu parles je suppose que c'est un WordPress, PHP 5.6 est largement obsolète, ne devrais-tu pas mettre à jour WP et ainsi ne faire tourner que PHP 7.4 (au moins) pour les 2 CMS (WP et XF) ?
 

JeanLouis

Membre 
Le site dont tu parles je suppose que c'est un WordPress, PHP 5.6 est largement obsolète, ne devrais-tu pas mettre à jour WP et ainsi ne faire tourner que PHP 7.4 (au moins) pour les 2 CMS (WP et XF) ?
@Maxime H , Bonjour. Oui c'est possible, ce site fonctionne très bien et pas envie de refaire une nouvelle reconfiguration, peut-être un jour, je n'ai pas encore trouvé le thème qui pourrait s'adapter... Il s'agit d'un Wordpress, il faut modifier la valeur

Code:
AddHandler application/x-httpd-ea-php56 .php .php5 .phtml

De ce que je comprends le code que tu inscris dans le fichier .htaccess ne cible pas forcément XenForo ou un autre CMS, il est générique et permet juste d'utiliser 2 versions PHP, tu confirmes ?
En fait tu peux utiliser le code pour d'autres plateformes (à tester). Par contre si on passe en PHP 8.1, cela pourrai être utile pour ceux qui veulent garder ou ne peuvent changer une ancienne configuration.. En tous les cas c'est une piste... Cela va aussi dépendre du cPanel et des options qu'il propose

1.JPG
 
Dernière édition:

JeanLouis

Membre 
Il fonctionne indépendamment. Avant je n'avais pas Wenforo (mais c'était avant..) et utilisais uniquement pour le wordpress en PHP 5.6 et le serveur PHP 7.4.. Par contre en passant à PHP 8.1, j'ignore les résultats, je n'ai pas de plateforme fonctionnant sur 8.1. Tout dépend des options proposée par cPanel
 

Maxime H

Membre 
ce site fonctionne très bien et pas envie de refaire une nouvelle reconfiguration
Comme je te comprends, ça m'arrive aussi, quand tout fonctionne correctement on a pas envie de se lancer dans des opérations périlleuses avec le risque de bug et tout le reste. Néanmoins il te faudra trouver un jour la motivation parce que PHP 5.6 date vraiment et avec WP tu auras de plus en plus de module qui ne seront plus compatibles. :)
 

JeanLouis

Membre 
Comme je te comprends, ça m'arrive aussi, quand tout fonctionne correctement on a pas envie de se lancer dans des opérations périlleuses avec le risque de bug et tout le reste. Néanmoins il te faudra trouver un jour la motivation parce que PHP 5.6 date vraiment et avec WP tu auras de plus en plus de module qui ne seront plus compatibles. :)
Il existe un moyen par un plugin qui va bloquer les mises à jour Wordpress et plugins. Quand des cms prennent de l'ampleur les pirates et spammer se fient à la version, pour construire leur attaque. Sur wordpress on peut "tricher" sur la version et il va considérer que tu est à jour. Include > Version.php. Ainsi si tu as la version 4.5 la mise à jour est 5.9, il suffit de changer la version à 5.9 "$wp_version = '5.9';", ce qui va poser un problème supplémentaire aux pirates Bon on va arrêter là pour Wordpress on est sur Xenforo...
 

Maxime H

Membre 
Un pirate, un vrai, ne se laissera probablement pas blouser par cet artifice PHP, d'ailleurs ce n'est pas le but de $wp_version='5.9'; mais plus pour régler des problèmes de compatibilité.

Bon on va arrêter là pour Wordpress on est sur Xenforo...
Non mais c'est intéressant, d'ailleurs il y a une suggestion au sujet de WP:
 

JeanLouis

Membre 
Un pirate, un vrai, ne se laissera probablement pas blouser par cet artifice PHP, d'ailleurs ce n'est pas le but de $wp_version='5.9'; mais plus pour régler des problèmes de compatibilité.
Pour établir son attaque, il cherchera toujours ta version. Il peut y avoir de nouveaux fichiers ou modifiés, une nouvelle gestion ect...
 

Nicolas

Administrateur
Membre du Staff
@JeanLouis $wp_version='X.X'; change artificiellement la version de WordPress pas de PHP.
Dans WP pour vérifier la version PHP c'est la commande $wp_version_check qui identifiera PHP. Par contre je ne sais pas si il y a la même "astuce" pour changer artificiellement PHP.

Il y a un script qui check WP : version WP, PHP, plugins installés, etc...
À tester s'il renvoie la vraie version WP ou celle modifié avec $wp_version='X.X';.
Bash:
function wp_version_check( $extra_stats = array(), $force_check = false ) {
    global $wpdb, $wp_local_package;

    if ( wp_installing() ) {
        return;
    }

    // Include an unmodified $wp_version.
    require ABSPATH . WPINC . '/version.php';
    $php_version = PHP_VERSION;

    $current      = get_site_transient( 'update_core' );
    $translations = wp_get_installed_translations( 'core' );

    // Invalidate the transient when $wp_version changes.
    if ( is_object( $current ) && $wp_version !== $current->version_checked ) {
        $current = false;
    }

    if ( ! is_object( $current ) ) {
        $current                  = new stdClass;
        $current->updates         = array();
        $current->version_checked = $wp_version;
    }

    if ( ! empty( $extra_stats ) ) {
        $force_check = true;
    }

    // Wait 1 minute between multiple version check requests.
    $timeout          = MINUTE_IN_SECONDS;
    $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );

    if ( ! $force_check && $time_not_changed ) {
        return;
    }

    /**
     * Filters the locale requested for WordPress core translations.
     *
     * @since 2.8.0
     *
     * @param string $locale Current locale.
     */
    $locale = apply_filters( 'core_version_check_locale', get_locale() );

    // Update last_checked for current to prevent multiple blocking requests if request hangs.
    $current->last_checked = time();
    set_site_transient( 'update_core', $current );

    if ( method_exists( $wpdb, 'db_version' ) ) {
        $mysql_version = preg_replace( '/[^0-9.].*/', '', $wpdb->db_version() );
    } else {
        $mysql_version = 'N/A';
    }

    if ( is_multisite() ) {
        $num_blogs         = get_blog_count();
        $wp_install        = network_site_url();
        $multisite_enabled = 1;
    } else {
        $multisite_enabled = 0;
        $num_blogs         = 1;
        $wp_install        = home_url( '/' );
    }

    $extensions = get_loaded_extensions();
    sort( $extensions, SORT_STRING | SORT_FLAG_CASE );
    $query = array(
        'version'            => $wp_version,
        'php'                => $php_version,
        'locale'             => $locale,
        'mysql'              => $mysql_version,
        'local_package'      => isset( $wp_local_package ) ? $wp_local_package : '',
        'blogs'              => $num_blogs,
        'users'              => get_user_count(),
        'multisite_enabled'  => $multisite_enabled,
        'initial_db_version' => get_site_option( 'initial_db_version' ),
        'extensions'         => array_combine( $extensions, array_map( 'phpversion', $extensions ) ),
        'platform_flags'     => array(
            'os'   => PHP_OS,
            'bits' => PHP_INT_SIZE === 4 ? 32 : 64,
        ),
        'image_support'      => array(),
    );

    if ( function_exists( 'gd_info' ) ) {
        $gd_info = gd_info();
        // Filter to supported values.
        $gd_info = array_filter( $gd_info );

        // Add data for GD WebP and AVIF support.
        $query['image_support']['gd'] = array_keys(
            array_filter(
                array(
                    'webp' => isset( $gd_info['WebP Support'] ),
                    'avif' => isset( $gd_info['AVIF Support'] ),
                )
            )
        );
    }

    if ( class_exists( 'Imagick' ) ) {
        // Add data for Imagick WebP and AVIF support.
        $query['image_support']['imagick'] = array_keys(
            array_filter(
                array(
                    'webp' => ! empty( Imagick::queryFormats( 'WEBP' ) ),
                    'avif' => ! empty( Imagick::queryFormats( 'AVIF' ) ),
                )
            )
        );
    }

    /**
     * Filters the query arguments sent as part of the core version check.
     *
     * WARNING: Changing this data may result in your site not receiving security updates.
     * Please exercise extreme caution.
     *
     * @since 4.9.0
     *
     * @param array $query {
     *     Version check query arguments.
     *
     *     @type string $version            WordPress version number.
     *     @type string $php                PHP version number.
     *     @type string $locale             The locale to retrieve updates for.
     *     @type string $mysql              MySQL version number.
     *     @type string $local_package      The value of the $wp_local_package global, when set.
     *     @type int    $blogs              Number of sites on this WordPress installation.
     *     @type int    $users              Number of users on this WordPress installation.
     *     @type int    $multisite_enabled  Whether this WordPress installation uses Multisite.
     *     @type int    $initial_db_version Database version of WordPress at time of installation.
     * }
     */
    $query = apply_filters( 'core_version_check_query_args', $query );

    $post_body = array(
        'translations' => wp_json_encode( $translations ),
    );

    if ( is_array( $extra_stats ) ) {
        $post_body = array_merge( $post_body, $extra_stats );
    }

    // Allow for WP_AUTO_UPDATE_CORE to specify beta/RC/development releases.
    if ( defined( 'WP_AUTO_UPDATE_CORE' )
        && in_array( WP_AUTO_UPDATE_CORE, array( 'beta', 'rc', 'development', 'branch-development' ), true )
    ) {
        $query['channel'] = WP_AUTO_UPDATE_CORE;
    }

    $url      = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, '', '&' );
    $http_url = $url;
    $ssl      = wp_http_supports( array( 'ssl' ) );

    if ( $ssl ) {
        $url = set_url_scheme( $url, 'https' );
    }

    $doing_cron = wp_doing_cron();

    $options = array(
        'timeout'    => $doing_cron ? 30 : 3,
        'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ),
        'headers'    => array(
            'wp_install' => $wp_install,
            'wp_blog'    => home_url( '/' ),
        ),
        'body'       => $post_body,
    );

    $response = wp_remote_post( $url, $options );

    if ( $ssl && is_wp_error( $response ) ) {
        trigger_error(
            sprintf(
                /* translators: %s: Support forums URL. */
                __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
                __( 'https://wordpress.org/support/forums/' )
            ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ),
            headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE
        );
        $response = wp_remote_post( $http_url, $options );
    }

    if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
        return;
    }

    $body = trim( wp_remote_retrieve_body( $response ) );
    $body = json_decode( $body, true );

    if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) {
        return;
    }

    $offers = $body['offers'];

    foreach ( $offers as &$offer ) {
        foreach ( $offer as $offer_key => $value ) {
            if ( 'packages' === $offer_key ) {
                $offer['packages'] = (object) array_intersect_key(
                    array_map( 'esc_url', $offer['packages'] ),
                    array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' )
                );
            } elseif ( 'download' === $offer_key ) {
                $offer['download'] = esc_url( $value );
            } else {
                $offer[ $offer_key ] = esc_html( $value );
            }
        }
        $offer = (object) array_intersect_key(
            $offer,
            array_fill_keys(
                array(
                    'response',
                    'download',
                    'locale',
                    'packages',
                    'current',
                    'version',
                    'php_version',
                    'mysql_version',
                    'new_bundled',
                    'partial_version',
                    'notify_email',
                    'support_email',
                    'new_files',
                ),
                ''
            )
        );
    }

    $updates                  = new stdClass();
    $updates->updates         = $offers;
    $updates->last_checked    = time();
    $updates->version_checked = $wp_version;

    if ( isset( $body['translations'] ) ) {
        $updates->translations = $body['translations'];
    }

    set_site_transient( 'update_core', $updates );

    if ( ! empty( $body['ttl'] ) ) {
        $ttl = (int) $body['ttl'];

        if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) {
            // Queue an event to re-run the update check in $ttl seconds.
            wp_schedule_single_event( time() + $ttl, 'wp_version_check' );
        }
    }

    // Trigger background updates if running non-interactively, and we weren't called from the update handler.
    if ( $doing_cron && ! doing_action( 'wp_maybe_auto_update' ) ) {
        /**
         * Fires during wp_cron, starting the auto-update process.
         *
         * @since 3.9.0
         */
        do_action( 'wp_maybe_auto_update' );
    }
}
 

JeanLouis

Membre 
@Nicolas , j'ai testé, je reçois une superbe page blanche.. C'est normal, il est protégé et certains fichiers modifiés. Une bonne pratique est de supprimer les fichiers ".txt " ou du genre "readme.html".

Un autre moyen. Afficher le code source de la page > Ctrl + F qui affiche la recherche et taper "generator" ou "générateur"
Pour moi, il indique bien la "fausse" version du site mais également dans le tableau de bord. Cela me fait pensé que je ne me rappelle plus ma version originale 🤣
 
Dernière édition:

CtrlAltSuppr

Membre 
J'ai un site qui fonctionne avec version PHP 5.6 et Xenforo PHP 7.4 sur le même serveur
C'est bien 2 noms de domaines différents n'est-ce pas ?
bidule.fr avec php 5.6 et truc.com avec php 7.4 par exemple.

C'est intéressant, à une époque je m'étais intéressé au sujet, Apache et PHP-FPM sur un serveur CentOS 7 (Linux) permettent de créer des serveurs virtuels et donc de faire tourner des applications/sites sur des versions différentes de PHP. Pas mal du tout.
 

Membres en ligne

Aucun membre en ligne actuellement.
Extras
Les tutoriels
en français
Collection de tutoriels exclusifs pour découvrir l'environnement XenForo.
Our translations
exclusives
French translation of official XenForo and XenAddons softwares.
The subscription
19.90 €
A premium account to access all our official resources.
Contribute to the development and sustainability of the forum with a donation to our PayPal account.
Haut