Archives de catégorie : wordpress

attention ne pas confondre – no-bot registration

Sur wordpress.org un nouveau plugin porte le nom de no-bot-registration mais ce n’est pas le mien, le fonctionnement est totalement différent. Ma version me donne en tout cas satisfaction.
Donc si vous utilisez ma version et que vous faites une mise à jour automatique il faut avoir en vue que vous changerez de code.
ma version : no-bot-registration l’original
celui présent sur wordpress.org : autre chose qui s’appelle no-bot-registration

Ce qu’il y a de pénible avec les offres d’hébergement mutualisées

Ce qui est pénible c’est de constater peu à peu que l’on a des performances qui plongent, de plus en plus de blocages, et d’être systématiquement relancés pour passer sur des offres supérieures (enfin soit-disant jusqu’au prochain effondrement). J’avais testés des offres de types VPS il y a quelque temps mais certaine notamment en openVZ n’offrait qu’une pauvre performance. Maintenant avec l’avancé du Cloud et des techniques associés on a des possibilités plus agréables : des VPS en KVM et des système de PassS (openshift par exemple) sur des containers.

Pour le boulot j’a i eu l »occasion d’utiliser les solution redhat l’ancienne que je trouvais facile à comprendre venant d’un monde Lamp et la nouvelle basées sur docker et kubernetes. Cette nouvelle et bien plus ardues à appréhender from scratch, mais certainement plus adaptés à des applications d’un certain volume. Je pense même que ça peut être jouissif à « administrer ». Franchement pour l’instant je ne suis pas mur. Et pourtant il faudra bien que je migre en interne une application (pour l’instant je bute  sur la problématique des cron).

Le fait de migrer les domaines, messageries et les mails suffisant déjà à mon bonheur j’ai décidé de tout regrouper chez un seul hébergeur me proposant un vps suffisant approximativement pour le prix d’un hébergement web. Finalement ce fut assez ardu mais en grande partie du fait du passage d’apache à lighttpd et au réglage de fail2ban. Mis au final tout refonctionne (plus letsencrypt) et avec un gain sensible de performance. Uptime (installé sur openshift) me donne un passage de 1000ms pour la page d’accueil de mon blog à 400ms. Sympa.

Le jeu en vaut il la chandelle ? pas sur (en tout cas financièrement c’est une opération blanche) j’aurai forcément plus d’administration, mais d’un autre côté avoir des hébergements partout en déshérence n’est pas non plus une situation souhaitable. Donc mettre un peu de cohérence et s’accorder 1 heure par semaine pour administrer, améliorer … regarder les zolis attaques …

A défaut si on n’est pas prêt à assumer ce travail baaah il y a les réseaux sociaux et les plateforme de blog.

En cours de migration …

Et oui je suis en cours de migrer de pdo sqlite vers Mysql …
entre autre pour pouvoir bénéficier de l’espace base de données augmenté que m’offre 1and1 avec 1 Go ça fait …
et ça me permettra de récupérer de la place sur le reste de l’hébergement … notamment en passant dans le mode multiblog.
Après plusieurs tentative j’ai juste renommé le fichier wp-content/db.php pour repasser en mysql exporter la base sqlite … remplacer les INSERT INTO en REPLACE INTO plus deux ou trois retouche dans la base, revalider tout les écrans de configuration (les permaliens ne fonctionnaient pas bien). Là ça à l’air de vouloir fonctionner ….

1and1 optimisation des temps de réponse

Je ne sais pas à quoi tient ce phénomène mais j’ai amélioré notablement les temps de réponse des blogs sur l’hébergement en utilisant une astuce trouvée sur le blog de lise
il suffit donc d’avoir dans son .htaccess

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

ça n’empêchera pas les erreurs 500 qui arrivent de temps en temps mais ça apporte un léger mieux.

autre tentavive je viens d’installer zend_optimiser en me référant à la faq

Encore un wordpress multiblog

J’ai profiter de l’arrivée de WordPress 3 pour revoir ma stratégie de multi blog …
le but état de modifier au possible les modification de WordPress.
Mon premier pas a été de tenter la version Mu en créant un réseau de wordpress … intéressant mais imposant une format de d’URL. Alors que je voulait mixer du person.domain.tld/blog et du person.domain.tld. Cela est bien sur possible avec un peu d’url rewriting mais par contre il n’y a pas une vrai indépendance entre les blogs et pas de moyens très simple pour se réserver un blog de test …
La solution est un mélange d’URL Rewriting et Liens symboliques. Bien sur ce n’est jouable qu’à condition de pouvoir créer des liens symbolique ce qui n’est pas possible chez tout les hébergeurs, et la méthode varie suivant ceux-ci.
La racine du blog contiendra un fichier wp-config.php un .htaccess et un lien symbolique vers l’installation de wordpress.

Ce qui suit concerne l’installation chez 1and1
1) création du lien symbolique par exécution d’un petit php déposé à la racine de elui-ci Makelien.php

<?php
passthru('ln -s /kunden/homepages/xxx/xxxxxx/htdocs/chemin_pour/wordpress wordpress'); passthru('ls -l');

2) exécuter et supprimer le petit php
3) copier le répertoire wp-content à la racine du blog
4)ecrire .htacces avec ce contenu


Options +FollowSymLinks
RewriteEngine On
RewriteBase /blog

RewriteRule ^$ /blog/wordpress/index.php [L]

RewriteCond %{REQUEST_FILENAME} !/blog/wordpress/.*
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ wordpress/$1 

RewriteCond %{REQUEST_FILENAME} /blog/wordpress/.*
#RewriteCond %{REQUEST_FILENAME} !/blog/wordpress/wp.*
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /blog/wordpress/index.php [L]

Si le site n’est pas dans un sous répertoire blog supprimer la ligne RewriteBase et le /blog de chaque RewriteRule
5) poser à la base du blog un wp-config.php

<?php
// ** Réglages MySQL ** //
define('DB_NAME', 'xxxxxxxxxxxxxxxx');		// Le nom de la base de données
define('DB_USER', 'xxxxxxxxxxxxxxx');     		// Votre identifiant MySQL
define('DB_PASSWORD', 'xxxxxxxxxx'); 	// ...et votre mot de passe
define('DB_HOST', 'xxxxxxxxxxxx');    			// Dans la plupart des cas, vous n'aurez pas à modifier cette ligne
define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); 
// Modifiez chaque KEY en y mettant une phrase unique.  Vous n'avez pas besoin de la mémoriser.
// Elle doit être longue et compliquée.  Vous pouvez aller sur le site http://api.wordpress.org/secret-key/1.1/ 
// afin de générer des phrases uniques pour votre installation. Chaques phrases doit être différentes.
define('AUTH_KEY', 'xxxxxxxxxxxxxxxxxxxxxx'); // Modifier par une phrase unique. 
define('SECURE_AUTH_KEY', 'xxxxxxxxxxxxxxxxxxxx'); // Modifier par une phrase unique.  
define('LOGGED_IN_KEY', 'xxxxxxxxxxxxxxxxxxxxxx'); // Modifier par une phrase unique.
define('NONCE_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); 
 
// Vous pouvez faire plusieurs installations sur une même base de données, en leur donnant chacune un préfixe unique.
$table_prefix  = 'blog_xxxxxxxxx_';		// Que des chiffres, lettres ou caractères soulignés, s'il vous plait !
 
// Modifiez la ligne suivante pour traduire l'administration de WordPress. Il faut que le dossier
// wp-content/languages contienne un fichier .mo correspondant à la langue choisie.
// Par exemple,  installez de.mo dans wp-content/languages et précisez 'de' pour la variable WPLANG,
// si vous souhaitez mettre en place la traduction allemande.
define ('WPLANG', 'fr_FR'); define('WP_CONTENT_DIR',dirname(__FILE__).'/wp-content'); define('WP_CONTENT_URL','http://adresse_du_blog/wp-content'); define('WP_POST_REVISIONS', false); //pour éviter de surcharger la base de données
 
require_once(ABSPATH . 'wp-settings.php');

6) dans l’installation de wordpress (celle ou pointe les liens symboliques) créer un wp-config.php qui chargera le bon config-php suivant le nom du site d’appel.

<?php
define('ABSPATH', dirname(__FILE__) . '/'); switch ($_SERVER['HTTP_HOST'])
  {
    case 'person1.domain.tld' :
	    include_once('/kunden/homepages/xx/xxxxxx/htdocs/person1/blog/wp-config.php'); 	    break;     case 'person2.domain.tld' :
	 include_once('/kunden/homepages/xxxx/xxxxx/htdocs/person2/wp-config.php');          break;     default :
	    exit('Accès illégal');   }

plus rien n’empêchera les mises à jour automatiques des sites

Un autre multiblog wordpress

Ceci est la reprise d’un fil initialement déposé sur wordpress-fr.net.

En plus de ce blog avec pdosqlite je gère aussi un groupe de blogs avec un installation classique … enfin presque.

L’objectif est d’avoir une seule installation de wordpress pour plusieurs blog, tous dans le même domaine mais éventuellement des sous domaine différents. Ces blogs sont hébergés sur le même serveur. Chaque blog a ses propres thèmes plugin.
par exemple le premier blog est adressé par
http://machin.domaine.tld/
le second par
http://truc.domaine.tld/blog/
et wordpress http://domaine.tld/wordpress
chaque blog doit ponter sur un répertoire contenant :
un répertoire wp-content, un .htaccess, un index.hp et bien sur le wp-config.php
le .htaccess contient simplement

# BEGIN WordPress
 
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
 
# END WordPress

index.php doit juste sauvegarder le chemin du wp-config et passer la main au wordpress installé. pour cela il utilise une constante et un variable de session.

le wp-config.php est à régler « as usual » avec comme rajout après la définition de WP-LANG

define ('WPLANG', 'fr_FR'); define('WP_CONTENT_DIR',dirname(__FILE__).'/wp-content'); define('WP_CONTENT_URL','http://personne.domaine.tld/blog/wp-content'); define('WP_URL','http://domaine.tld/wordpress'); define('COOKIE_DOMAIN','.domain.tld'); /* le point devant le domaine est important */
 
/* C'est tout, ne touchez pas au reste ! Bloguez bien ! */
if ( !defined('ABSPATH') )
  //define('ABSPATH', dirname(__FILE__) . '/');   define('ABSPATH', 'path_to_wordpress/'); /*modifier pour pointer sur wordpress*/

attention pour que WP_CONTENT_DIR soit pris en compte pour les téléchargements il faut que celui-ci ne soit pas renseigné dans l’écran Réglage/Divers

dans le wordpress installé il faut récupérer les information sur le wp-config à utiliser. Il faut donc modifier wp-load.php

<?php
/**
 * Bootstrap file for setting the ABSPATH constant
 * and loading the wp-config.php file. The wp-config.php
 * file will then load the wp-settings.php file, which
 * will then set up the WordPress environment.
 *
 * If the wp-config.php file is not found then an error
 * will be displayed asking the visitor to set up the
 * wp-config.php file.
 *
 * Will also search for wp-config.php in WordPress' parent
 * directory to allow the WordPress directory to remain
 * untouched.
 *
 * @package WordPress
 */
 
/** Define ABSPATH as this files directory */
define( 'ABSPATH', dirname(__FILE__) . '/' ); 
error_reporting(E_ALL ^ E_NOTICE ^ E_USER_NOTICE); session_start(); if(isset($_SESSION['config.php']))
    require_once($_SESSION['config.php']); elseif ( file_exists( ABSPATH . 'wp-config.php') ) {
 
	/** The config file resides in ABSPATH */
	require_once( ABSPATH . 'wp-config.php' ); 
} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-load.php' ) ) {
 
	/** The config file resides one level below ABSPATH */
	require_once( dirname(ABSPATH) . '/wp-config.php' ); 
} else {
 
	// A config file doesn't exist
 
	// Set a path for the link to the installer
	if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false) $path = ''; 	else $path = 'wp-admin/'; 
	// Die with an error message
	require_once( ABSPATH . '/wp-includes/classes.php' ); 	require_once( ABSPATH . '/wp-includes/functions.php' ); 	require_once( ABSPATH . '/wp-includes/plugin.php' ); 	wp_die(sprintf(/*WP_I18N_NO_CONFIG*/'Je ne trouve pas votre fichier <code>wp-config.php</code>. J&rsquo;en ai besoin avant de lancer l&rsquo;installation.<br />Besoin d&rsquo;aide ? <a href='http://codex.wordpress.org/fr:Installer_WordPress'>En voici</a>.</p><p>Vous pouvez créer un fichier <code>wp-config.php</code> à l&rsquo;aide de notre interface Web, mais ça ne marche pas pour toutes les configurations de serveur. La méthode la plus sûre reste de créer le fichier à la main.</p><p><a href='%ssetup-config.php' class='button'>Créer le fichier de configuration</a>'/*/WP_I18N_NO_CONFIG*/, $path), /*WP_I18N_ERROR_TITLE*/'WordPress &raquo; Erreur'/*/WP_I18N_ERROR_TITLE*/);

Comme le point d’entrée pour récupérer le bon wp-config est bien l’adresse du blog et non pas celle de wordpress il est aussi nécessaire de modifier wp-includes/cron.php et remplacer get_option(‘siteurl’) par get_option(‘home’). Il se peut que cette manip soit à répéter dans d’autres fichiers mais pour l’instant elle semble suffire. Attention à ce point certaine extensions peuvent avoir un comportement …. bizarre dans ce contexte (exemple nextgen gallery) et donc nécessiter des adaptation

//origignal :	$cron_url = get_option( 'siteurl' ) . '/wp-cron.php'; 	$cron_url = get_option( 'home' ) . '/wp-cron.php';

accédez au blog pour le créer ne pas se tromper sur l’adresse de wordpress et du blog et c’est terminé … enjoy.

ce qu’il faut retenir :
Il est assez simple de faire du multiblog avec wordpress il suffit de définir comment wp-load récupère les informations du bon wp-config. On pourrait imaginer une solution avec une seule installation de wordpress mais autant de wp-config que de blogs et une utilsation du mod rewrite.

A vous de jouer et d’inventer d’autres mode de multiblog

(pour les utilisateurs de pdo sqlite j’ai été obligé d’utiliser la version 2.6.1 avant de pouvoir sauvegarder cet article)

Nouvelle version du thème

Je viens de changer la version du thème Paalam, donc c’est la version 2.0. Ce thème était hélas pas intertionalisé. J’avais déjà fais la manip sur la version 1.2 mais visiblement l’auteur n’avait pas repris les modification dans son svn.
Pour ceux qui le désire Le thème paalam i18n plus la version française.
Si par hasard vous voyez une coquille un bug ou une traduction approximative merci de me poster un commentaire sur ce billet.

Le General Purposes Plugin (JeePP)

Pour donner un coup de main à un utilsateur de wordpress français, j’ai bricolé un petit plugin que j’ai nommé pour le fun JeePP. Comme a priori il semble être utile pour plusieurs utilisateurs de wordpress, je vais lui accorder un article.
Un des utilisateurs m’a demandé si je pouvais en faire un widget et ma foi je trouve l’idée intéressante mais j’attendrai la prochaine version de wordpress qui doit simplifier l’API.le principe
ce plugin ne fait que permettre l’utilisation de la balise object dans les articles. Ce qui permet dans un article soit d’intégrer une applet, une animation flash soit une vue sur un site tiers (essayez vous devez pouvoir appeler la page d’accueil de google).

<?php
      /*
      Plugin Name: JeePP
      Description: General Purpose Plugin permet l'utilisation de la balise object dans les articles
      Plugin URI: http://bertrand.belguise.net/
      Author: Bertrand Belguise
      Version: 0.0.1
      Author URI: http://bertrand.belguise.net/blog/
      */
 
      #
      #  Copyright (c) 2008 Bertrand Belguise
      #
      #  JeePP is free software; you can redistribute it and/or modify it under
      #  the terms of the GNU General Public License as published by the Free
      #  Software Foundation; either version 2 of the License, or (at your option)
      #  any later version.
      #
      #  JeePP is distributed in the hope that it will be useful, but WITHOUT ANY
      #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      #  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
      #  details.
      #
      #  You should have received a copy of the GNU General Public License along
      #  with JeePP; if not, write to the Free Software Foundation, Inc., 59
      #  Temple Place, Suite 330, Boston, MA 02111-1307 USA
      #
      if (!CUSTOM_TAGS) {
        $allowedposttags['object'] = array(
          'data' => array(),
          'type' => array(),
          'classid' => array(),
          'height' => array(),
          'style' => array(),
          'width' => array()
        );         $allowedposttags['param'] = array(
           'name' => array(),
           'value' => array()
        );       };

en référence un article sur la balise object et la discussion originale sur wordpress français

Etat des lieux

Le thème paalam est maintenant internationalisé mais pas encore complètement testé.

J’ai des petits soucis probablement lié au thème sur le comportement de la sidebar. Il faudra que je creuse le sujet mais plus tard.

Plus ennuyant les liens en /blog/2008/09 ou en /blog/?m=20089 plantent. J’attribue pour l’instant ce problème au plugin pdo …. a suivre.

Problème des liens corrigé et pour la sidebar c’est le comportement du thème qui en fait me dérange, la modication à faire est légère je la reporte à un peu plus tard.