Comment installer un WordPress sous Free

 

C'est un peu contraignant, mais ça reste dans le domaine du faisable. Ce blog a été hébergé sous Free pendant un an. Mais bon, si vous avez le budget pour un hébergement normal, ça vaut pas le coup de s'embêter à héberger chez Free. Parce que vous allez devoir changer du code dans les script de WordPress, ce qui nécessite des connaissances minimum. Et qu'à la prochaine mise à jour de WordPress, forcément, vos modifs seront écrasées, il faudra à nouveau re-modifier les scripts. Et c'est un peu fastidieux, tous les 3 mois, surtout quand l'accès au serveur FTP de Free est rendu hasardeux par une adresse IP exotique.

Déjà, si vous espériez profiter de l'URL rewriting, oubliez. Les serveurs Free ne le permettent pas. L'URL-rewriting, c'est ce qui permettrait d'accéder à cet article en suivant l'URL http://eurokdj.monblog.free.fr/installer-un-wordpress-sous-free/ au lieu de http://eurokdj.monblog.free.fr/?p=10. Ce qui est beaucoup mieux pour le référencement…

Ensuite, comme vous êtes sur du mutualisé (adresse IP de serveur commune à tous les sites hébergés sur le même serveur), vous risquez d'avoir des soucis avec certains plugin, tels que les plugins de météo. En effet, ceux-ci vont solliciter des services gratuits, donc limités à un certain nombre de requêtes par jour et par IP (l'IP du serveur qui héberge votre site, pas l'IP du visiteur du site !).

Enfin, comme la mémoire allouée à chaque compte par les serveurs est limitée à 32, vous risquez de rencontrer ce message d'erreur pour vos plugins les plus gourmands (et, depuis le passage à la version 3.5, ceci inclut également la barre d'outils de votre éditeur de texte !)

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 92160 bytes) in /ftg/169/sda/1/2/mon.hebergement/wp-includes/class-wp-editor.php on line 580

Sans oublier que, si votre IP n'est pas reconnue comme française, vous ne pourrez pas uploader votre blog sur le serveur FTP.

Bref, à réserver surtout aux sites « one-shot » sans nécessité de mise à jour régulière…

Bon, si tout ceci ne vous a pas découragés, on y va.

Ah oui, avant d'attaquer, et si on part du principe que, comme moi, vous avez d'abord installé et paramétré votre WordPress en local, il faudra rajouter cette étape :

Migration d'un Worpress d'un hébergement à un autre (Free ou autre)

Mettons qu'en local le Worpress était disponible à cette URL https://blog.kdj-webdesign.com/ et que votre hébergement Free si trouve ici  http://mon.hebergement.free.fr

Paramètres d'accès à la base

Dans wp-config.php, mettre à jour les paramètres d'accès à la base avec ceux que vous a donné Free (par défaut, l'identifiant est le même que le nom de la base et le mot de passe le même que celui du FTP. Mais cela peut désormais se changer)

Si vous avez été un peu fainéant, voici ce que vous avez en local :

define('DB_NAME', 'wordpress');
define('DB_USER', 'root'); 
define('DB_PASSWORD', ''); 
define('DB_HOST', 'localhost');

Du coup, sur le serveur distant, ça va vous donner ce joli message d'erreur :

Erreur lors de la connexion à la base de données

Et voici ce que vous aurez ensuite

define('DB_NAME', 'mon_hebergement');
define('DB_USER', 'mon.hebergement'); 
define('DB_PASSWORD', 'motdepasse'); 
define('DB_HOST', 'sql.free.fr');

Attention, ne pas oublier de remplacer localhost par sql.free.fr

Mise en ligne

Uploadez les fichiers de votre WordPress sur votre nouvel espace hébergement (via FTP, nom du serveur ftpperso.free.fr)
Exportez les tables (structure et données) et les importer sur http://sql.free.fr/

Attention, j'ai constaté que, dans le cas d'EasyPHP 5.3.3, les tables un peu volumineuses n'étaient pas exportées dans leur totalité (en général la table wp_posts). Pensez à compter le nombre d'enregistrements dans votre version locale et votre version distante.

Mise à jour de la base

Dans la table wp_options, mettez à jour les options portant l'option_name  « siteurl » et « home » (peut également se faire dans l'admin au niveau des Réglages généraux, mais seulement après avoir appliqué tous les correctifs du tuto. Avant, c'est pas possible, car le bouton Enregistrer du formulaire Réglages généraux est masqué par une erreur. Voir plus bas)

UPDATE wp_options SET option_value = 'http://mon.hebergement.free.fr' WHERE option_name IN ('siteurl', 'home');

Les URL des images dans les articles (champ post_content) sont en absolu. Il faut donc mettre à jour leur chemin à même la base.

UPDATE wp_posts SET post_content=(REPLACE (post_content, 'blog.kdj-webdesign.com','mon.hebergement.free.fr'));

 

Mais passons aux spécificités Free…

Adaptation du WordPress pour Free

Il existe pusieurs tutos sur internet, certains sont assez complexes et irréalistes (du genre aller exhumer une vieille version de WordPress, la meilleur solution pour se faire hacker son site). Celui qui coupe le moins les cheveux en 4 est ce tutorial. Je m'en suis largement inspirée.

Bien entendu, pensez toujours à réaliser une sauvegarde avant de vous lancer dans des grosses modifs (surtout au niveau de la base de données)

Version de php

Le premier problème rencontré, c'est la version de php utilisée par les serveurs Free est la version 4.4.3-dev.

Votre serveur utilise la version 4.4.3-dev de PHP mais WordPress 3.4.2 nécéssite au moins la version 5.2.4.

 

Il est possible de la passer en 5.1.3RC4-dev en ajoutant cette ligne au fichier .htacess

php 1

Pensez à commenter ou même à supprimer toutes les regex d'url rewriting sinon vous allez avoir une jolie erreur 500.

Mais ce n'est pas encore suffisant. Comme va le proclamer fièrement le joli message d'erreur qui va inévitablement vous accueillir au premier chargement, « WordPress 3.4.2 nécessite au moins la version 5.2.4 » (le tout écrit en UTF-8 pour renforcer encore l'angoisse du néophyte).  Et je pense que les prochaines releases de WP exigeront des versions de php encore plus avancées.

Alors, dans votre éditeur de texte favori, vous allez ouvrir le script nommé wp-includes/version.php et rechercher cette ligne :

$required_php_version = '5.2.4';

Elle devrait se trouver aux alentours de la ligne 35.
Que l'on va  remplacer par (ou la mettre en commentaire et la faire suivre de…  )

$required_php_version = '5.1.2';

 

La fonction setcookie()

Elle est passée de 6 à 7 paramètres à partir de php 5.2. Du coup, vous allez avoir droit à un message d'erreur.

Warning: setcookie() expects at most 6 parameters, 7 given

Rendez-vous dans le script wp-includes/pluggable.php, vers les  lignes 737, 738 et 739 (Ctrl+F sur le mot-clé setcookie). Les fonctions setcookie présentent 7 arguments séparés par des virgules, on va virer le dernier argument (le true).

setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
if ( COOKIEPATH != SITECOOKIEPATH )
 setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
}

Ce qui donne :

setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure);
setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure);
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie);
if ( COOKIEPATH != SITECOOKIEPATH )
 setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie);
}

 

La fonction array_fill_keys()

Elle n’existe pas dans la version de php proposée par Free. Résultat, un joli message d'erreur :

Fatal error: Call to undefined function array_fill_keys() in /mnt/169/yhg/1/2/mon.hebergement/wp-includes/cache.php on line 350

 

Il faut donc la récréer et la placer  dans le script wp-includes/functions.php. A la fin du fichier, par exemple, c'est comme vous préférez.

//Rajout de la fonction manquante dans php version 5.1.3
function array_fill_keys($keyArray, $valueArray) {
    if(is_array($keyArray)) {
    foreach($keyArray as $key => $value) {
    $filledArray[$value] = $valueArray[$key];
    }
 }
 return $filledArray;
 }

 

 

MAIS si vous voulez continuer à travailler à la fois en local (avec une version de php supérieure à 5.1.3)  et sur votre espace Free, et que vous êtes sous la  version 3.5 de WordPress, si vous appliquez ce correctif, la version locale va vous renvoyer ce message

Fatal error: Cannot redeclare array_fill_keys() in J:EasyPHP-5.3.3wwwwordpresswp-includesfunctions.php on line 3863

On tourne en rond ! Du coup, il faut tester la version de php du serveur et prévoir les 2 cas (on peut également tester si on est en local avec $_SERVER[‘REMOTE_ADDR'])

 

// pour connaître la version de php
if (!defined('PHP_VERSION_ID')) {
 $version = explode('.',PHP_VERSION);
 define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}
// et si c'est une version ancienne, on ajoute la fonction
if (PHP_VERSION_ID < 50207)
{
 function array_fill_keys($keyArray, $valueArray) {
 if(is_array($keyArray)) {
 foreach($keyArray as $key => $value) {
 $filledArray[$value] = $valueArray[$key];
 }
 }
 return $filledArray;
 }
}

En résumé

Les 3 fichiers à modifier sont les suivants :

wp-includes/versions.php
wp-includes/pluggable.php
wp-includes/functions.php

Karine SANCHE

Partager cet article