Michael Hurni

11 juin 2008

Activer la réécriture d’url WordPress sur free.fr

Classé dans : Non classé — Mots-clefs :, , , , , — Michael @ 12:03

La première étape consiste à activer la réécriture d’URL de manière “classique” via votre interface d’administration. (dans Réglages > Permaliens sous WordPress2.5). En toute logique une erreur 500 de free.fr survient après quelques secondes sur les pages de votre site. Pas d’inquiétude, le but de l’article est justement de remédier à cette erreur en moins de 5 minutes.

.htaccess

La seconde étape consiste à ouvrir le fichier .htaccess situé à la racine de votre site. Celui-ci contient un ensemble d’instructions générées par WordPress. Supprimons tout, allègrement, pour ne laisser plus que l’instruction suivante :

ErrorDocument 404 /index.php

Header Statut 404

Je vous vois déjà bondir, “Toutes mes pages auront un code d’erreur 404“, “Je vais en perdre mon référencement chez Google“. Et bien non car cet article ne s’arrête pas là.

Effectivement, cette technique va rediriger silencieusement l’ensemble des pages non trouvées vers index.php (le cœur de votre WordPress) en y rajoutant un code HTTP 404. Nous allons donc, pour contrer cela, ajouter cette ligne de code php tout en haut de votre fichier index.php

<?php header('HTTP/1.1 200 OK', true, 200); header("Status:200 OK"); ?>

Ce code aura pour action de remplacer le header actuel 404 par un code 200, signifiant ainsi à Google et aux autres, que cette page existe, et que oui tout va bien.

Dernière étape

WordPress possède un système de vérification des fichiers htaccess. Il arrive ainsi donc, de temps en temps, que les htaccess soient réécris. Causant ainsi une erreur 500. Pour remédier à ce désagrément, rendez vous dans le fichier /wp-admin/includes/misc.php  à hauteur de la ligne 37.

remplacez

function insert_with_markers( $filename, $marker, $insertion ) {

par

function insert_with_markers( $filename, $marker, $insertion ) { return true;

Ce code aura pour effet d’annuler l’effet de la fonction insert_with_markers.

Et voila, votre site peut désormais posséder de belles URL comme celle de cette article (http://piranhaworld.free.fr/activer-reecriture-url-wordpress-sur-free.html). Cool non?

EDIT: pour information, le REFERER reste le bon, j’attends les stats webalizer et vous tiens informé.
EDIT 2: les stats webalizer ne semblent pas souffrir d’un nombre anormal de 404. Quoi qu’il en soit, rien ne vaut un marqueur Xiti qui ne remarquera en rien l’astuce employée.

Suite et fin

(Merci à Adrien et Duplex pour leur remarques)
Effectivement “vrai” pages d’erreur ne renvois pas de code 404 au client/bot/etc.. pour palier ce manque, cherchons le fichier de template 404.php (depuis l’editeur de theme pour faire simple) modifions ceci (première ligne)

<?php get_header(); ?>

par ceci

<?php header('HTTP/1.1 404 Not Found', true, 404); header("Status:404 Not Found"); get_header(); ?>

Cette méthode est relativement “quick and dirty” (vite et vraiment sale pour l’occasion) mais bon, en même temps, rappelle-nous qu’on tente ici de se dépatouiller avec un hebergement free.fr… hum :)

14 mai 2008

Les fonctions débiles de php

Classé dans : coup de gueule — Mots-clefs :, — Michael @ 17:56

Je commence ainsi ma petite série sur les coups de gueule et reproches divers à PHP, qui m’amènera sans doute à n’utiliser que python dans mes projets, qui sais ? Fabien peut-être.
Débutons cette petite série par la présentation de deux fonctions PHP d’une utilité à débattre.

date_sunrise, et date_sunset. Ces deux fonctions offrent (quel cadeau !) la possibilité de calculer l’heure des levés et couchés de soleil en fonction d’une date, d’une longitude et d’un latitude. Qu’avaient ingurgité les développeurs PHP pour intégrer à la version 5 de manière native (c’est là qu’est mon reproche) de telles fonctions ? Une piste de réponse peut-être..

8 mai 2008

Télécharger une vidéo Dailymotion d’un clic

Classé dans : bons plans, javascript — Mots-clefs :, , , , — Michael @ 20:55

Présentation

Après quelques minutes à m’être tiré les cheveux dans tous les sens, j’y suis enfin parvenu. Il m’est désormais possible, d’un clic de souris de télécharger une vidéo DailyMotion, qui plus est, en deux formats (au choix) : le premier FLV, qui contrairement à ce qu’on pourrait croire est parfaitement lisible par VLC; le second le h264, plus connu sous le nom de mp4, format qui, à mon plus grand bonheur, est lisible sur les Iphone et Ipod Touch (iTouch).

Mon astuce n’est ni un plugin, ni un site internet où il vous est nécessaire de copier/coller une url (ces derniers étant, à mon goût, fastidieux et d’une fiabilité plus qu’aléatoire). Elle nécessite néanmoins d’utiliser le navigateur Firefox.

Mise en place

Pour mettre en place cette solution, ajouter simplement au choix, l’une de ces deux urls dans vos favoris Firefox. Version FLV - Version H264 (mp4).

Aide : pour créer le favori, faites simplement un « cliquer-déposer » d’un de ces deux liens vers le menu « marque pages » ou vers votre « barre personnelle ».

Utilisation

Rendez-vous à présent sur une page Dailymotion, ouvrez la vidéo de votre choix, cliquez ensuite sur votre nouveau lien favori préféré. Firefox devrait vous proposer de télécharger le fichier FLV, ou mp4.

Selon les extensions installées sur votre machine, (Quicktime par exemple), la lecture commencera au sein du navigateur. Un ultime clic sur fichier » enregistrer sous clôturera la procédure de sauvegarde.

Bug connu sur les enregistrements h264

Il arrive parfois que lors d’un enregistrement mp4, vous tombez alors, après redirection, sur une page introuvable.

Exemple :

http://proxy-20.dailymotion.com/14/512×384/h264/7342080.h264?bbf1…

Pour toutefois arriver à télécharger la vidéo, les chiffres importants à repérer sont ceux après le premier slash. Dans mon exemple, le nombre 14.

Il suffit en général de modifier directement ce nombre dans la barre d’url en essayant un nombre au dessus ou en dessous pour arriver au bon fichier.
Par expérience ces nombres sont en général compris entre 14 et 17.

Je pensais que ceci correspondait au « serveur » sur lequel était stocké la vidéo. Mais visiblement, aucune relation avec le numéro de “proxy”

Rappelons que ce bug n’est qu’occasionnel, et qu’il ne concerne que le format h264 (mp4).

2 février 2008

Intégrer Smarty proprement au Zend Framework

Classé dans : framework, php, zend — Mots-clefs :, , , , , — Michael @ 0:49

Voila quelque temps que la pre(view) release de la version 1.5 de notre framework php Zend préféré est sorti. Toujours aucune solution “officielle” pour utiliser Smarty, le fameux moteur de template.

J’ai parcouru beaucoup d’astuces, toutes plus sordides les unes que les autres. On trouve par moment des registration d’un objet view dans le Zend_Registry, porte ouverte aux fantaisies (des echo dans des contrôleurs.. bouhh). On trouve aussi souvent des $front->setParam(’noViewRenderer’, true); (rien de plus illogique donc si c’est pour rajouter du Smarty par derrière. Non?).

Autre problème de taille avec les solutions “pas propres” : impossible de faire fonctionner correctement Zend_Form sans procédé a des bidouilles de registration de vue. Bref arrêtons le suspense ici. Voici ma solution pour intégrer -proprement- Smarty à Zend.

Implémentation de Zend_View_Abstract

Zend_View_Abstract propose déjà une multitude de méthodes utiles, pourquoi s’en priver? (en implémentant comme certain uniquement Zend_View_Interface). Je commence ainsi par vous proposer de récupérer la classe Acti_View_Smarty. Ce fichier utilise une library Smarty d’origine non modifiée, pratique donc pour les mises à jour. Il convient à présent de créer une nouvelle instance d’Acti_View_Smarty et de l’enregistrer correctement dans zend au sein du fichier de bootstrap (index.php)

$view = new Acti_View_Smarty($config->smarty);

/**
* exemple de configuration smarty
* ;smarty.compile
* smarty.compile.force = false
* smarty.compile.path = ./system/build/smarty
*
* ;smarty.cache
* smarty.cache.enabled = false
* smarty.cache.path = ./system/cache
* smarty.cache.lifetime = 3600
*/

$view->setScriptPath(”templates”);

$viewhelper = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewhelper->setViewSuffix(’tpl’);
$viewhelper->setViewScriptPathSpec(’:module/:controller/:action.:suffix’);

Zend_Controller_Action_HelperBroker::addHelper($viewhelper);

Vous remarquez ainsi qu’il devient très aisé de remplacer le moteur Smarty par un autre, par exemple : $view = new Zend_View;. Aucune modification supplémentaire n’est à faire dans les contrôleurs par exemple, le fonctionnement d’origine reste inchangé. Magique non?

26 janvier 2008

Quel serveur web pour votre site php?

Classé dans : php, sysadmin — Mots-clefs :, , , , , , — Michael @ 20:06

On adule bien souvent à tord les mérites d’Apache. Qu’en est-il vraiment? Succès et notoriété de ce serveur web sont-ils réellement justifiés ? Cet article a pour but d’étudier quel est le meilleur choix technique pour un environnement php5.

Les prétendants au titre

Je laisserai de coté les serveurs IIS de Microsoft qui ne sont selon moins qu’une grosse plaisanterie niveau PHP. J’ai donc testé pour vous 3 serveurs web. Apache dans un premier temps, Lighttpd (prononcé lighty), et enfin, un peu moins connu car d’origine russe, Nginx.

Quels critères de test?

Mon serveur est actuellement un Kimsufi de chez OVH. C’est très loin d’être une bête de course (256 de ram, 2Ghz mono cœur) mais bon, seulement 25€ TTC/mois. Il est donc pour mois très crucial d’éviter au maximum les gaspillages niveau ressource. J’ai ainsi commencé mes tests sur une page HTML (statique donc). (Lire la suite…)

31 décembre 2007

Composition idéale d’un framework PHP #1

Classé dans : framework, php — Mots-clefs :, , , , , , , , , — Michael @ 4:08

Voila quelque temps que je me pose la question sur quelles librairies (ORM, MVC, Moteur de templates, Gestion du cache, …) me baser pour réaliser un framework idéal. Les candidats sont nombreux. Voici pour le moment la composition actuelle du framework que je suis entrain de développer :

  • Base sur le Zend Framework
  • Intégration de Propel / PDO pour la partie ORM
  • Intégration du moteur Smarty pour la vue
  • Utilisation du Zend_Cache pour le cache template
  • Utilisation de patForms pour la gestion des formulaires.

Chacune de ces librairie ont été adaptée au sein du framework de base. De nombreuses Factory (motif de conception dédié à la création simplifié d’objet) ont été intégrées afin de rendre l’utilisation plus agréable (il devient possible entre-autre de créer un formulaire patForms utilisant Smarty et Propel en seulement 4 lignes de codes).

D’autre fonctionnalités intéressantes ont été implémentés. Le motif de conception Observer, implémenté au cœur du Zend Framework, se chargera, par exemple, de réagir automatiquement à certain évènements, comme l’édition d’une donnée, pour supprimer de manière autonome les données de cache correspondantes à l’aide de Zend_Cache.

Je vous proposerai ainsi donc une série d’articles traitant des différentes solutions que j’ai adaptés dans mon framework. Vous dévoilant ainsi, en work-in-progress, l’ensemble du code source de mes travaux.

22 décembre 2007

Rendre vos vidéos Youtube compatible iPhone

Classé dans : bons plans, javascript — Mots-clefs :, , , — Michael @ 0:28

L’iPhone ainsi que l’iPod sont arrivés tout deux avec de nombreuses fonctionnalités. Parmi elles se trouvent les applications Youtube et Safari. A mon grand regret, Safari mobile ne gère pas le flash. Impossible donc, à priori, d’intégrer des vidéos Youtube sur votre blog iPhone préféré..

Après quelques investigations, j’ai pu repérer l’introduction des protocoles “youtube:” et “maps:” au sein de l’application Safari. J’ai donc conçu un script capable d’analyser vos codes source, repérer les vidéos Youtube et les remplacer par un lien direct vers l’application (sous forme d’image).

Voici une démonstration très simple.

<embed src="http://www.youtube.com/v/WaIR9dAZRR0" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"></embed>

A priori ceci est une simple bande annonce. Oui mais.. vous pouvez la visionner avec votre iPhone ou iTouch. Pour intégrer cette fonctionnalité sur votre site ou blog, ajouter simplement le script iTube.js disponible ici, il s’occupe de tout.

<script src="http://piranhaworld.free.fr/libs/iTube.js"> </script>

Ce script ultra légé (moins de 750 octets) s’occupera de détecter les visiteurs “iphone/itouch” ainsi que vos vidéos Youtube). La version “source” est disponible ici, elle vous permettra de personnaliser l’url de l’image de substitution utilisée dans cet exemple.

6 novembre 2007

Plugin Deezer

Classé dans : bons plans — Mots-clefs :, , — Michael @ 17:22

Voici un petit plugin firefox pour accéder rapidement au moteur de recherche de musique deezer.com

installer le plugin Firefox

27 juillet 2007

Opquast : les bonnes pratiques

Classé dans : Accessibilité — Mots-clefs :, , — Michael @ 18:20

Face à son ordinateur, l’utilisateur est seul maître à bord. Il est primordiale de répondre au mieux à ces attentes en lui offrant des services propres, accessibles et agréables. En tant que développeur web, il est parfois difficile d’avoir une critique suffisamment objective sur ses propres projets. D’un oeil complètement nouveau, les contributeurs Opquast (Open Quality Standards) facilitent l’évaluation et l’amélioration de la qualité des services en ligne.

Logo Opquast

153 bonnes pratiques

Mises au point et validées par l’ensemble de la communauté Opquast, 153 bonnes pratiques sont détaillées sur le site internet du projet.
(Lire la suite…)

25 juillet 2007

Session PHP Cross-Server

Classé dans : php — Mots-clefs :, , — Michael @ 15:56

Les sessions PHP sont aujourd’hui le meilleur moyen pour stocker temporairement des variables liées à un visiteur, sur un site internet.

Fonctionnement d’une session

Son fonctionnement reste pourtant très rudimentaire. Un cookie placé sur le client fait référence à un fichier placé sur le serveur, qui lui contient l’ensemble des données. Chaque requête reçue par le serveur avec ce cookie ouvrira le fichier de session et placera son contenu dans une variable global $_SESSION.

Cas des API

J’ai récemment, pour l’un de mes projets web, entrepris la réalisation d’une API capable par exemple de gérer des comptes utilisateurs. Nous allons nous attarder sur la partie connexion d’un utilisateur.

Le client fournis ses identifiants de connexion au site internet. Ce dernier va ensuite “connecter” l’utilisateur à l’API. Nous souhaitons ainsi créer une session sur l’API stockant l’état du visiteur comme étant à présent connecter. Problème majeur : les sessions créées par l’API enregistrent un cookie auprès du site Internet intermédiaire, et non au près du visiteur. Il convient donc de trouver une solution alternative. (Lire la suite…)

Articles plus anciens »

Propulsé par WordPress