Archive pour la catégorie ‘Developpement’

Tag ID3 sur fichiers audio MP3 avec id3lib sous CentOS

Samedi 7 août 2010

En plein recherche sur les tags ID3, voilà comment tagger vos MP3 avec les informations artiste, album, titre, numéro de piste en ligne de commande :
Tout d’abord, installer id2lib :

yum intsall id3lib

et voilà

Pour tagger l’artiste d’un MP3 :

id3tag -a 'Bob dylan' mon_mp3.mp3 -2

Et voilà toutes les options de cette commande magique :

Usage: id3tag [OPTIONS]... [FILES]...
   -h         --help            Print help and exit
   -V         --version         Print version and exit
   -1         --v1tag           Render only the id3v1 tag (default=off)
   -2         --v2tag           Render only the id3v2 tag (default=off)
   -aSTRING   --artist=STRING   Set the artist information
   -ASTRING   --album=STRING    Set the album title information
   -sSTRING   --song=STRING     Set the title information
   -cSTRING   --comment=STRING  Set the comment information
   -CSTRING   --desc=STRING     Set the comment description
   -ySTRING   --year=STRING     Set the year
   -tSTRING   --track=STRING    Set the track number
   -TSTRING   --total=STRING    Set the total number of tracks
   -gSHORT    --genre=SHORT     Set the genre
   -w         --warning         Turn on warnings (for debugging) (default=off)
   -n         --notice          Turn on notices (for debugging) (default=off)

Et pour connaitre les infos d’un fichier mp3 :

id3info mon_mp3.mp3

Voilà rien de plus simple :)
Après il est parfaitement possible d’exploiter ces fonctions via un script PHP du genre :

<?php
$res=exec("id3tag -a '".$artiste."' ".$fichier." -2",$res_var);
//ou $artiste est l'artiste à appliquer au fichier mp3 $fichier avec un taggage en version 2
?>

Installer ID3 via PECL pour PHP

Jeudi 5 août 2010

ID3 permet de lire et écrire les tags ID3 sur les fichiers audio.
Ces fonctions visiblement pas encore natives dans PHP peuvent être installées via PECL.
Peu de sites décrivent l’opération alors voilà je me lance puisque j’ai réussi a trouver la solution.

Tout d’abord installons PEAR (qui permettra d’executer les install via pecl)

apt-get install php-pear (ou yum install php-pear)

Dans le meilleur des mondes il suffit de lancer la commande :

pecl install ID3

Normalement il va vous dire qu’il n’y a aucune version stable disponible et qu’il faut donc lancer la commande :

pecl install channel://pecl.php.net/ID3-0.2

S’il vous insulte en vous disant qu’il ne trouve pas phpsize :

apt-get install PHP5-dev (ou yum install PHP5-dev sous Centos)

Puis relancez l’install du package en version non-stable
S’il vous insulte à nouveau mais sur Make :

apt-get install make

Ensuite il ne reste plus qu’à activer ce module dans le PHP.ini
en ajoutant dans la rubrique des extensions :

extension=id3.so

Voilà le tour est joué PHP gère maintenant les tags ID3 via les fonctions ID3
Si tout s’est bien passé, un phpinfo() devrait vous afficher cette extension en plus :

PHP – Créer un fichier CSV ou Excel encodage UTF-8 / UTF-16LE

Vendredi 14 mai 2010

Voilà un petit bout de code qui permet de générer un simple fichier Excel en PHP
L’astuce est que l’encodage utilisé pour la page PHP est UTF-8 et donc lors de la génération on peut se retrouver avec des problèmes sur les caractères accentués.
En effet Excel utilise l’UTF-16LE et non UTF-8, je me suis plusieurs fois frotté à ce problème alors cette fois je note l’astuce, ça peut toujours servir à d’autres en plus d’assister ma pauvre mémoire interne ;)

//Voilà les en-tetes qui vont permettre à votre navigateur de reconnaitre le type de fichier et son nom (ici Export.xls)
header( "Content-type: application/vnd.ms-excel; charset=UTF-16LE" );
header('Content-Disposition: attachment; filename="Export.xls"');

$contenu =  "Description\tPrix Unitaire\tQuatité\tTotal\n"; // La premiere ligne de mon tableau \t change de cellule \n change de ligne

echo chr(255).chr(254).mb_convert_encoding( $contenu, 'UTF-16LE', 'UTF-8');  // On converti ma chaine UTF-8 vers UTF-16LE et on ajoute 2 caractères qui permettront à Excel d'identifier le fichier sans problème.

Et voilà c’est aussi simple que ça et c’est compatible Office Windows et Office Mac (peut-être pas Office 2004)

Couper un fichier MP3 avec FFMPEG via PHP

Lundi 10 mai 2010

Ca fait bien longtemps que je n’ai pas posté, alors voici un petit bout de code bien sympathique ;)

Si vous avez FFMPEG d’installé sur votre serveur web (voir cet article pour l’installation )
Il est possible de découper des MP3 via un petit bout de code system sous PHP :

system ("ffmpeg -ss 0 -t 20 -i ".dirname(__FILE__)."/masource.mp3 ".dirname(__FILE__)."/monextrait.mp3", $res_var);

-ss : représentant le début à couper en secondes (ici le début de la chanson, départ à 0 secondes)
- t : représentant la durée à couper (ici 20 secondes)

Et pour les néophytes du PHP « dirname(__FILE__) » représente le chemin absolu vers le fichier source et le fichier de destination ( du genre /var/www/html/monsite ).

PHP-Linux commande pour détecter un Type-Mime

Lundi 9 novembre 2009

Alors voilà une ligne de commande (sous linux) qui permet de détecter le type MIME d’un fichier.

<?php
$filename="monimage.png";
$type=exec("file -i -b $filename");
echo $type;

//Affiche : image/png
?>

Vous me direz OK c’est simple… mais quel intérêt ?
Et là je vous dis… admettons qu’il y a un répertoire ou vous stockez des fichiers.
Ce répertoire vous ne souhaitez pas que vos visiteurs puissent le parcourir ou accéder à ses fichiers directement.
Alors vous placez un fichier .htaccess dans votre répertoire interdisant à tout le monde d’y accéder.
Contenu du fichier .htaccess :

<Limit GET POST>
deny from all
</Limit>

Ensuite voilà comment notre code d’identification de type MIME va être utile
Pour envoyer un fichier du répertoire inaccessible, nous allons via Apache créer une copie d’un des fichiers à mettre à disposition et l’envoyer au navigateur
Voilà à quoi peut ressembler le code :

<?php
$filename="monimage.png";

//Lecture du contenu du fichier que l'on place dans une variable $content
$fp = fopen ($filename, 'r');
$content = fread($fp, filesize($filename));
fclose ($fp);

//Récupération du type de fichier
$type=exec("file -i -b $filename");

//Construction des en-têtes du fichier pour que le navigateur comprenne ce qu'on lui envoi (un fichier image)
header('Content-Type: '.$type);
header('Content-Disposition: inline; filename="'.basename($filename).'"');  

//Affichage du contenu du fichier
echo $content;

Voilà ce genre de code peut un jour être utile alors je vous le laisse ;)