Chercher des rétroliens Dotclear

Publié dans Dotclear | Laisser un commentaire

J’ai remarqué dernièrement que les rétroliens étaient vraiment un outils pratique pour faire connaître son blog tout en étant quelque chose d’utile pour les lecteurs. Le souci reste de trouver d’autres billets réellement en lien avec son billet… et disons-le, la « découverte automatique de rétroliens » de Dotclear, c’est bien beau, mais ça marche vraiment rarement. (ça n’a encore jamais fonctionné pour moi) Je suis en train de tester une technique qui consiste à taper dans Google : «  rétrolien », et j’arrive à tomber assez souvent sur des résultats relativement cohérent. Je trouve ainsi de nombreux blogs Dotclear. Mais pour trouver des blogs WordPress (ou autre), il suffit d’essayer «  trackback », ça marche tout aussi bien, même si la probabilité d’obtenir des articles en anglais est plus grande. Désormais, la question est suivante : que vais-je taper dans Google pour faire des rétroliens vers ce billet… « billet rétrolien rétrolien » ??? Hum, hum. Bon, après tout, ça ne peut pas fonctionner à tous les coups !

Mysql et la recherche : avec REGEXP

Publié dans SQL | 6 commentaires

Dans un précédent billet, on a vu comment effectuer une recherche assez poussée en MySQL avec LIKE. Mais LIKE n’est vraiment rien comparée à ce que l’on peut faire avec REGEXP OU RLIKE (RLIKE est un alias pour REGEXP. Il a été créé pour un souci de similitude avec mSQL). Et en même temps, je trouve que LIKE suffit la plupart du temps… REGEXP permet d’utiliser les expressions régulières pour retrouver une chaine de caractères dans une table SQL. Il existe 2 types de regex en PHP (petit nom des expressions régulières ^^) :

  • PCRE : issue du langage Perl, ces regex sont réputées difficiles, mais sont rapides et performantes
  • POSIX : mise en avant avec le PHP, ces regex se veut un peu plus simple que les PCRE, elles sont néanmoins moins performantes. MySQL utilise ce type de regex.

Sur son tutoriel de PHP, M@téo21 explique le fonctionnement des regex PCRE pour PHP. Si on comprend les PCRE, on comprend les POSIX, donc si vous n’y connaissez rien en regex, je vous conseille de lire son cours à ce sujet, il est particulièrement bien fait : Cours sur les regex de M@téo21.

Utiliser REGEXP

Une fois que l’on maitrise les regex (voir ci-dessous), utiliser REGEXP n’est pas un problème. Un exemple :

SELECT * FROM table WHERE champ REGEXP "<regex>"

Continuer la lecture

SQL et RENAME

Publié dans SQL | Laisser un commentaire

Cela fait plusieurs fois que je cherche à renommer une table en ligne de commandes, et plusieurs fois que je re-re-regarde la doc MySQL sur RENAME. Dans l’espoir que ça rentre, et par ne pas avoir à re-re-re-rechercher la prochaine fois, voici comment fonctionne cette commande. L’idée est de renommer la table « chaise » pour l’appeler « chaise_pliante » (hum, original !).
Pour cela, rien de plus simple :

RENAME TABLE chaise TO chaise_pliante;

Pour renommer plusieurs tables à la fois, il suffit de séparer les blocs ancien_nom TO nouveau_nom par une virgule.

RENAME TABLE chaise TO chaise_pliante, tableau TO tableau_pliante;

Mais cette commande est aussi utile pour déplacer une table d’une base de données dans une autre. Pour cela, il faut faire précéder le nom de la table par le nom de la base de données. Donc en résumé, on a :

RENAME TABLE [ancien_nom_db.]ancien_nom_table TO [nouveau_nom_db.]nouveau_nom_table;

A noter que cela fonctionne aussi pour les vues (tant qu’on ne change pas de base de données) et pour les tables temporaires. Et on peut aussi faire cela avec ALTER TABLE :

ALTER TABLE ancien_nom RENAME nouveau_nom;

Bon, avec un peu de chance, je crois que ça va me rester !

ça cron

Publié dans Geekeries | Laisser un commentaire

Voilà quelques temps qu’un billet « ça cron » trainait dans ma dizaine de billets non terminés… Cron, c’est un système sous Linux qui permet de déclencher un événement à intervalle régulier, comme par exemple l’exécution d’un script PHP qui nettoie une base de données, ou d’une ligne de commande Shell qui ouvre un lecteur musique et joue un titre au hasard. Bref, avec cron on peut faire plein de petites choses utiles (ou pas)… Je m’y suis intéressé durant mon stage, mais je n’ai pas eu l’occasion de mettre en pratique. Ce n’est toujours pas le cas, mais infinite loop a écrit un billet sur son blog [Code18|http://code18.blogspot.com] qui a bien clarifié les choses. Donc pour comprendre et apprendre à utiliser des cron : * [Installer un cronjob|http://code18.blogspot.com/2009/10/installer-un-cronjob.html] Et aussi 2 autres articles qui m’avaient permis de bien comprendre les choses il y a quelques mois : * [Page de man sur cron|http://matthieu.developpez.com/execution_periodique] * [Utilisation avancée de cron sous Linux et Windows|http://www.linux-france.org/article/man-fr/man5/crontab-5.html] Si un jour je test, j’en reparlerai surement. D’ici là, have fun!

Import/Export MySQL en ligne de commandes

Publié dans SQL | Laisser un commentaire

Dans un précédent billet où j’expliquais mes déboires avec les grosses bases de données (on y trouvait aussi des conseils pour ne pas s’arracher les cheveux), j’ai expliqué comment importer une base de données MySQL à partir d’un fichier SQL en ligne de commandes grâce à source ou mysql. Aujourd’hui, j’ai découvert ce que je cherchais depuis pas mal de temps : exporter une base de données MySQL dans un fichier SQL en ligne de commandes, grâce à mysqldump. !

Importer un fichier SQL en ligne de commandes

J’ai une table de 3 millions de tuples (très très grosses quoi), que je souhaite importer dans ma base de données. Pour se faire, j’ai un fichier SQL assez volumineux contenant les requêtes d’insertions qui vont bien. Utiliser PhpMyAdmin serait long et il y a des risques que cela ne fonctionne pas si le fichier est trop gros. La solution consiste à utiliser des lignes de commandes, comme ça, pas de risques d’arrêts inopinés (ou presque) et c’est vraiment plus rapide.
Continuer la lecture

BBcode Toolbar en PHP Objet – Version 1

Publié dans Projets | Laisser un commentaire

C’est vers fin juillet, que j’ai écrit un billet intitulé Documentation module toolbar en PHP objet qui parlait d’un système que je suis en train de concevoir : un module de toolbar BBcode en PHP objet, facilement installable sur tout type de site Web et totalement paramétrable. J’ai terminé ce module, et j’en sors donc la version 1. Une version stable (enfin, avec les essais que j’ai fait) et relativement satisfaisante à mon goût. Je l’ai installé dernièrement sur un site (qui n’est malheureusement pas encore en ligne) et cela ne m’a pas posé de problèmes. (même si ça m’a donné plein d’idées d’améliorations) Si vous souhaitez tester ce module sur votre site, pas de problèmes : téléchargez-le, puis suivez le readme.txt pas à pas. Et surtout, n’hésitez pas à me faire des retours. Ce module permet :

  • De créer, puis de générer différentes barres de boutons cliquables, à afficher au dessus de n’importe quel champ textarea
  • De paramétrer ces boutons, notamment leur action (création de balises [un][/un] ou [deux=trois][/deux], en passant par un pop-up, ou autre)

Il est implémenté en PHP (orienté Objet) et Javascript (utilisant le framework Prototype pour l’instant).

Paramétrage des boutons cliquables
Exemple de toolbar

J’espère qu’il vous donnera entière satisfaction ! En tout cas, à moi, il m’est bien utile, et je compte bien continuer à l’améliorer.

Annexes

Mysql et la recherche : avec LIKE

Publié dans SQL | Un commentaire

Souvent pour un moteur de recherches sur un site, on propose à l’utilisateur d’entrer un mot clef que l’on cherchera ensuite dans une base de données pour renvoyer les résultats le contenant. Ce billet, et 2 autres qui le suivront, vont présenter 3 méthodes pour effectuer ce type de recherche, en commençant par l’utilisation de LIKE. La première méthode pour effectuer une recherche avec Mysql est d’utiliser LIKE sur un champ texte.

SELECT * FROM table WHERE message LIKE "mot clef";

Cette requête renverra tous les tuples dont le champ message contient exactement la valeur « mot clef », quelque soit la casse. Pour que le résultat dépende de la casse, il faut utiliser LIKE BINARY :

SELECT * FROM table WHERE message LIKE BINARY "Mot Clef";

Mais LIKE permet de faire bien plus que cela. Pour recherche le mot « mot clef » qui se trouverait en plein milieu d’une phrase, on va utiliser le pourcentage ( % ). Le pourcentage est un joker qui correspond à « ou ou plusieurs caractères, n’importe lequel » ou à « pas de caractère ».

SELECT * FROM table WHERE message LIKE "%mot clef%";

Par exemple, les phrases : « Bonjour, j’aime ce joli mot clef tout bleu » ou « Salut beau mot clef » seront renvoyé par cette requête. Mais pas « Salut jolis mots clefs ». Dans le même style, on peut utiliser l’underscore ( _ ), c’est un autre joker qui correspond à « un et un seul caractère, n’importe lequel ».

SELECT * FROM table WHERE message LIKE "%mot_ clef_";

Continuer la lecture

Activer l’url rewriting d’Apache sous EasyPhp

Publié dans Apache | Laisser un commentaire

Aujourd’hui, j’ai cherché à activer l’url rewriting d’Apache sur l’EasyPhp que j’utilise pour tester mes sites en local. C’est assez simple, tout se passe dans le httpd.conf. (Clic droit sur le logo EasyPhp Configuration > Apache) Il suffit de dé-commenter (c’est-à-dire enlever les dièses qui sont devant) les 2 lignes suivantes :

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

J’ai la version EasyPhp 2.0, et la ligne AddModule... n’existe pas, mais ça ne pose pas de problèmes. Puis, il faut vérifier que AllowOverride est bien à All. AllowOverride apparait plusieurs fois, d’abord dans , puis dans ou autre, et dans les Alias tout en bas du fichier. Si vous n’utilisez que le dossier www/, ne vous occupez pas des Alias. Mais si vous avez créé des alias, modifiez les AllowOverride pour eux aussi. Enregistrez, redémarrez Apache (ou tout EasyPhp) et, en théorie, l’url rewriting est activé ! Amusez-vous bien !
Je me rend compte que cette manipulation ne dépend pas du tout d’EasyPhp (et c’est plutologic), donc en fait, je viens d’apprendre à activer l’urlrewriting d’Apache tout court. C’est beau.

Taille d’une image avec getimagesize

Publié dans PHP | Laisser un commentaire

Ouhahou, ça faisait longtemps ! Il faut dire que je suis parti en vacances tout une semaine, que c’est un peu le rush au boulot ces derniers temps, et accessoirement que j’ai de moins en moins Internet chez moi. Bref, j’ai reussi cahin caha à apprendre de nouvelles choses pendant au moins 30 minutes chaque jour, mais pour mettre ces découvertes à l’écrit, il m’aurait fallu un peu plus de temps. Hier, je cherchais à connaitre les dimensions (largeur et hauteur) d’une image. J’ai d’abord pensé à imagesx() et imagesy() que j’avais déjà utilisé et qui renvoie respectivement la largeur et la hauteur de l’image dont le descripteur est passé en argument. C’est justement là le problème, puisque pour ce servir de ces fonctions il faut d’abord utiliser imagecreatefromjpeg('nom du fichier image') ce qui n’est quand même pas très pratique. Surtout quand on tombe sur getimagesize(‘nom du fichier image’) ! Cette fonction retourne non seulement la largeur et la hauteur de l’image étudiée, mais aussi son format (notamment au format mime), son type de coloration (RGB ou CMYK) ! C’est plutôt beau, non ? Voyons un petit exemple :

<?php
echo '<pre>';
print_r(getimagesize('test.gif'));
echo '</pre>';

Ce qui retourne :

Array (
    [0] => 45
    [1] => 45
    [2] => 1
    [3] => width="45" height="45"
    [bits] => 7
    [channels] => 3
    [mime] => image/gif ) 

Voilà ce qui peut être utile :

  • Le champ 0 retourne la largeur en pixel. On retrouve cette largeur dans le champ 3 dans une chaine de caractères directement utilisable dans du code HTML
  • Le champ 1 retourne la hauteur en pixel. On retrouve cette hauteur dans le champ 3 dans une chaine de caractères directement utilisable dans du code HTML
  • Le champ 2 et mime retournent le format de l’image. Le champ 2 par son numéro, le champ mime au format mime utilisable directement dans les entêtes HTTP.

C’est quelque chose que je cherchais depuis quelque temps, le problème c’est que j’ai oublié dans quel projet j’en avais besoin…
Au passage, 2 autres informations dont je pense ne jamais me servir :

  • Le champ bits retourne le nombre de bits par couleur. ça peut boguer avec le format Gif. J’ai pas trop compris ce que cela voulait signifier
  • Le champ channels retourne le type de coloration (3 pour RGB, 4 pour CMYK)

Les requêtes imbriquées c’est (parfois) le pied

Publié dans SQL | Laisser un commentaire

J’ai une table annonce1 contenant 10 000 tuples, et une autre annonce2 qui en contient aussi 10 000. Tous les tuples sont différents. Le but ? Fusionner ces 2 tables. Export/Import classique créé des problèmes de Primary Key qui se dupliquent (mon ID est en auto_increment).
Moralité :

INSERT INTO annonce (ann_surface, ann_prix)
	SELECT ann_surface, ann_prix
	FROM annonce2
	WHERE ann_surface>150 AND ann_ville!=0;

Une petite requête SQL imbriquée (embedded) et pof le tour est joué !
Deux choses importantes à remarquer :

  • La syntaxe : le VALUES n’apparait pas ici. (moi je m’étais fait avoir)
  • Inutile de préciser de préfixes même si le champ des tables ont le même nom. D’ailleurs j’ai testé avec annonce1 a1 (a1.ann_surface, ... et cela n’a pas fonctionné. J’en déduis que les préfixes doivent être interdit avec la commande INSERT.

La doc MySQL n’est pas avare à propos de la commande INSERT, pas plus que les commentaires. Profitons-en !