MySQL : différence entre DATETIME et TIMESTAMP

13 08 2010

Quand on veut stocker une date/heure dans MySQL, on a le choix entre 2 types de champs :

  • DATETIME
  • TIMESTAMP

Il ne faut pas confondre le type TIMESTAMP de MySQL avec le timestamp UNIX utilisé par PHP, qui correspond au nombre de secondes écoulées depuis le 1 janvier 1970 (naissance d’UNIX).

Lire la suite »



PHP : fonction date() en français : date_fr()

15 04 2010

La fonction date(format, <timestamp>) retourne une chaîne de caractère correspondant à une date au format passé en paramètre.

Le problème c’est qu’elle parle anglais cette fonction : le nom des mois et des jours ne sont pas traduit.

Voici la même fonction, mais traduite en français :

function date_fr($format = 'l j F Y, H:i', $time = null){
	if(empty($time)) $time = time();

	$date = date($format, $time);

	$jour_en = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
	$jour_fr = array("Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche");

	$mois_en = array("January","February","March","April","May","June","July","August","September","October","November","December");
	$mois_fr = array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");

	$date = str_replace($jour_en, $jour_fr, $date);
	$date = str_replace($mois_en, $mois_fr, $date);

	return $date;
}

Cette version marche beaucoup mieux que la bidouille qui consiste à utiliser les fonctions setlocale( LC_TIME, “fr” ); et strftime :

function dateFR( $time ){
	setlocale( LC_TIME, "fr" );
	return strftime( "%A %d %b %Y" , strtotime( $time ) );
}


CodeIgniter ou CakePHP ?

13 02 2010

Les deux frameworks PHP les plus connus sont Zend Framework et Cake PHP (utilisé notamment pour le site officiel des extensions firefox).

Lire la suite »



Importer un gros fichier dans MySQL

19 12 2009

MySQL est utilisé par beaucoup de monde pour créer des sites dynamiques PHP/MySQL.

Il existe un outil bien pratique et très utilisé : phpMyAdmin, qui fournis une interface graphique à MySQL.

Le problème c’est qu’il y a souvent des bugs (l’ordi ram à fond) quand on importe un gros fichier SQL. La solution c’est de se passer de phpMyAdmin et d’utiliser directement MySQL en ligne de commande.

Et ne fuyez pas à la lecture de ligne de commande, en fait c’est très simple, voici un exemple qui importe le contenu de fichier.sql dans la base basename avec EasyPHP (ça marche aussi avec WAMP, mais les identifiants de connexion MySQL sont différents) :

mysql -h localhost -u root --default_character_set utf8 basename < fichier.sql



Configuration MAMP WAMP EasyPHP pour les nuls

27 05 2009

Un petit memo pour ceux qui galèrent comme des bêtes sauvages pour développer leur site en local avec PHP et MySQL.

Apache

Première vérification à faire, c’est le fichier httpd.conf qui sert à configurer le serveur HTTP Apache.

  • Vérifier que mod_rewrite est activé pour que l’URL rewriting (contenu dans le fichier .htaccess) fonctionne.
  • Vérifier le chemin ou est stocké le site sur votre ordinateur (directive DocumentRoot).

PHP

Seconde vérification : PHP, dans le fichier php.ini.

  • Vérifier que l’affichage des erreurs est bien activé, parce que si PHP est configuré pour n’afficher aucune erreur, vous allez en chier grave pour réparer votre script boiteux :

    error_reporting  =  E_ALL
    display_errors = On
    log_errors = On

  • Vérifier la configuration de la fonction mail, sinon vous ne risquez pas d’envoyer grand chose.
    Pour cela, il faut indiquer l’adresse du serveur SMTP à utiliser.

    Utilisez celui de votre fournisseur d’accès, par exemple moi je suis chez Orange, donc j’écris ça :

    SMTP = smtp.orange.fr

Après tout ça, si vous en chiez toujours autant, changez de technologie, Apache/PHP/MySQL c’est pas pour vous.



Récupérer l’extension d’un fichier en PHP

8 03 2009

Voilà une petite fonction bien pratique qui prend en paramètre le nom d’un fichier et qui retourne son extension (en tenant compte de la QUERY_STRING :

function get_ext($filename){
	$ext = substr($filename, strrpos($filename, '.') + 1);
	if(strpos($ext, '?')) $ext = substr($ext, 0, strpos($ext, '?'));
	return $ext;
}


UTF-8, c’est de la merde en barre !

10 01 2009

Et encore, je pèse mes mots ! Si vous utilisez un CMS comme Wordpress, ça va, vous n’avez pas tellement à vous interesser au choix de l’encodage pour vos pages web. Grosso modo, il y a deux encodage possibles :

  • Utiliser l’encodage local : Latin-1
  • Utiliser l’encodage universel : UTF-8

Alors à première vue, on peut se dire que le mieux est d’opter pour la seconde solution, pour ne pas être bridé par la suite. J’ai fait ce choix pour le développement d’un site, et maintenant je m’en mords les doigts !

Déjà, UTF-8 est rarement l’encodage par défaut des éditeurs de texte, donc dans un premier temps il vous faut convertir tous vos fichiers. Une fois que vous avez terminé cette tâche longue et fastidieuse, vous vous dites que la migration est enfin terminé.

 

Eh bien c’est pas du tout le cas, parce qu’il est maintenant impossible de stocker un texte avec accents dans une base de donnée.

En fait, MySQL a besoin qu’on lui dise qu’on travaille dans un encodage spécial avant toute requête :

SET NAMES ‘utf8′

Mais ce n’est pas terminé, parce qu’il faut toujours veiller à ce que les variables que vous manipulez, et en particulier les chaînes, soient toujours encodés en utf-8 grâce aux fonctions php utf8_encode et utf8_decode.

Et comme certaines fonctions PHP ne fonctionnent pas (un comble pour une fonction !) avec les chaînes UTF-8 (comme strrtr), je vous laisse imaginer le bordel qu’on obtiens à la fin !