nyroBlog
Bannière NyroBlog, par Nyro
Image par Nyro - ?

Catégorie : Programmation


BjayDev, 1 collègue développeur PHP

BjayDevLorsque j'étais en SRC, j'ai connu plein de gens avec qui j'ai toujours gardé contact.

Parmi eux, il y a JB, ou Bjay pour le net, qui est aussi développeur PHP indépendant.

Il vient de mettre en ligne une nouvelle mouture de son site, que je vous laisse découvrir.

J'aime particulièrement son logo à la "dreamweaver" (même si je n'aime pas ce logiciel) et le mélange du bleu et du vert qui apporte un peu de fraîcheur et de gaieté alors que le printemps arrive à peine.

Réparer des bases de données MySQL

Il arrive dans certains cas que des bases de données, plus particulièrement des tables, soit rendu illisibles suite à un crash du serveur.

MySQL a tout prévu avant la commande REPAIR TABLE qui permet de récupérer une table crashée, avec généralement une perte de données, la dernière ligne ajoutée (d'où l'utilité des backups récurents).

Rien que ça, c'est bien utile quand on se retrouve dans un phpMyAdmin qui nous sort plein d'erreurs dont ont ne sait pas vraiment d'où elles sortent et dont on ne comprend pas forcément le sens.

Mais imaginez qu'on ait affaire à un serveur dédié avec un nombre conséquent de base de données. Le serveur a crashé, donc on suppose des erreurs sur les tables de toutes les bases. Comment faire pour ne pas avoir à regarder manuellement dans chaque base de données ?

Utilisez la commande mysqlcheck comme suit, à exécuter en SSH par exemple :

mysqlcheck -A --user=USER --password=PASSWORD

Bien sûr, vous aurez pris soin de changer USER et PASSWORD avec ce qui convient, sûrement root pour l'utilisateur.

Ensuite, vous allez voir toutes les tables de chaque base de données défiler, avec la plupart du temps marqué OK sur la ligne, pour vous indiquer qu'il n'y pas d'erreur.

Pour n'afficher que les tables qui sont crashées, vous n'aurez qu'à rajouter un grep :

mysqlcheck -A --user=USER --password=PASSWORD | grep -v "OK"

Enfin, vous n'aurez qu'à exécuter les REPAIR TABLE sur les tables qui ressortent avec des erreurs et vous en aurez terminer. Normalement, la commande mysqlcheck accepte comme paramètre --auto-repair, mais elle n'a pas fonctionnée dans mon cas, je ne sais pas pourquoi.

PHP : utiliser les références

Pour ceux qui ont fait du C++ ou qui savent faire la différence entre référence et valeur, vous pouvez passer au dernier paragraphe pour directement trouver le lien.

Lorsqu'on utilise des variables, celle-ci a besoin d'espace mémoire. L'espace mémoire est adressée, c'est à dire que la valeur de la variable se trouve à telle adresse (ou référence). Autrement dit, une variable pointe sur une ADRESSE, où est stockée véritablement la VALEUR de la variable. En PHP, tous les passages de variable (pour les fonctions, classes ou copie) se font par VALEUR. Etudions

$var = 'abc';
$var2 = $var;

La Première ligne : Lorsqu'on fait ceci, $var est associée à 1 référence mémoire (adresse), dans laquelle on met la valeur 'abc'. La seconde ligne : comme je vous l'ai dit, la copie se fait par valeur. Donc, en faisant ça, $var2 est associée à 1 nouvelle référence, dans laquelle on stocke la valeur de $var, 'abc'. Jusque là, rien de bien compliqué, c'est juste pour être plus clair et que vous compreniez mieux la suite.

Maintenant, si nous faisons ceci :

$var = 'abc';
$var2 = &$var;

(La seule différence est le &, marqueur de la référence) Pour la première ligne, rien ne change évidemment. Pour la seconde, qu'est-ce qu'on fait ? Une nouvelle référence est crée pour $var2, mais au lieu d'y stockée une valeur (celle de $var), on y stocke la référence de $var. Pour le dire différemment, $var2 est un alias de $var, qui pointe tous les 2 vers la même valeur dans l'espace mémoire. Vous suivez ?

Je voulais juste faire ce petit rappel, avant de vous donner l'adresse d'un très bon article de JDNet, qui montre plusieurs exemples qui vous seront très pratique. Peut-être que vous n'en voyez pas l'utilité tout de suite, mais cela pourra vous permettre de vous sortir de mauvaises passes dans certains cas.

Ca m'est arrivé il y a pas très longtemps, et je ne sais pas comment j'aurai fait sans ça.

Convertir ses musiques ou ses vidéos en différents formats

On est souvent confronté au problème de format de fichier média : mp3, ogg, wav, wma pour les sont par exemple; avi, flv, mp4 pour les films.
Et quand on veut passer d'un format à un autre, on est souvent obligé d'avoir des tonnes de logiciel.
Je vous en propose un seul : Super.
Non non, ce n'est pas moi qui l'ai nommé comme ça, c'est son nom.
Il vous permettra en quelques de choisir le format de sortie de votre fichier, avec tous les paramétrages de qualité possible pour le son et la vidéo, et il vous convertira le fichier rapidement. Vous pouvez aussi faire une liste de fichier à réencoder pour gagner du temps.

Et je n'ai pas essayer, mais je suis sûr que ça doit marcher, vous pouvez extraire le son d'une vidéo, en choisissant le format mp3 par exemple pour un film : très pratique !

Et puis, pour ceux que la vidéo n'intéresse pas (ou qui veulent un logiciel un peu plus rapide) vous pouvez aussi essayer ce petit convertisseur qui supporte les conversions dans tous les sens des MP3, OGG, WMA et WAV. Rapide et très simple d'utilisation.

Bien sûr, ces deux supers logiciels sont gratuits.

SlideShow FlickR, suite

Tellement énervé de mettre cet iframe sur mon blog que j'ai regardé du côté de l'API PHP que FlickR.

Et tellement les exemples sont simples et clair que je n'ai pu m'en empécher...

Donc, pour commencer, je code PHP :

$set = $_GET['set'];

$params = array(
'api_key' => 'YOUR_FLICKR_API_KEY',
'method' => 'flickr.photosets.getPhotos',
'photoset_id' => $set,
'format' => 'php_serial',
);

$encoded_params = array();

foreach ($params as $k => $v){
$encoded_params[] = urlencode($k).'='.urlencode($v);
}

function urlImg($farm, $server, $id, $secret) {
return 'http://farm'.$farm.'.static.flickr.com/'.$server.'/'.$id.'_'.$secret.'.jpg';
}

$url = "http://api.flickr.com/services/rest/?".implode('&', $encoded_params);
$rsp = file_get_contents($url);
$rsp_obj = unserialize($rsp);

if ($rsp_obj['stat'] == 'ok') {
$ret = "countArticle = 0;
var mySlideData = new Array();";
foreach($rsp_obj['photoset']['photo'] as $photo) {
$url = urlImg($photo['farm'], $photo['server'], $photo['id'], $photo['secret']);
$ret.= "mySlideData[countArticle++] = new Array('$url', '#', '".$photo['title']."', '');\n";
}
$ret.= "function startSlideshow() {
var slideshow = new timedSlideShow($('mySlideshow'), mySlideData);
}
addLoadEvent(startSlideshow);";
echo $ret;
} else {
echo "Call failed!";
}
?>

(Oups, pas de commentaires...)

Et ensuite, il suffit de l'appeler comme un fichier source JavaScript, en donnant en paramètre le set_id que l'onveut afficher et l'id de la div dans laquelle on veut afficher le SlideShow. Enfin, il faut que tous les éléments nécessaires au Smooth SlideShow soient présents, et c'est tout bon...

Le résultat :