Et si on jouait ?

Vous voulez vous détendre quelques minutes ? J'ai déplacé le curveball sur g33k-zone, profitez-en !

Pour ceux qui ne le sauraient pas, curveball est un pong en 3D, avec la possibilité de donner des effets à la balle.

Curveball 2

Envoyer un email html avec pièce jointe en PHP

C'est toujours un casse-tête pour envoyer un email avec des pièces jointes.

Cette classe est très simple d'utilisation et possède seulement les options basiques. Elle prépare le contenu du mail et utilise simplement la fonction mail() de php pour l'expédier. Le code ne sera quasiment pas détaillé, ci-dessous vous trouverez essentiellement l'explication de l'utilisation et l'accès aux sources.

Lire la suite

Concaténation de champs avec MySQL

Petite surprise en développant une requête qui fait la recherche d'un mot dans trois champs concaténés, elle ne retourne aucun résultat or le mot est bien présent dans l'un des champs. La requête est de la forme:

SELECT *
FROM table
WHERE CONCAT(champ1, champ2, champ3) LIKE '%mot%'

Après un petit tour dans la documentation MySQL, voici ce que l'on trouve:

CONCAT(str1,str2,...) Retourne une chaîne représentant la concaténation des arguments. Retourne NULL si un des arguments est NULL. Cette fonction peut prendre plus de 2 arguments. Si un argument est un nombre, il sera converti en son équivalent sous forme de chaîne de caractères

Pour une concaténation de champs dont certains peuvent avoir la valeur NULL, il faut employer CONCAT_WS():

SELECT *
FROM table
WHERE CONCAT_WS(' ', champ1, champ2, champ3) LIKE '%mot%'

Les assertions et vérification de formulaire

Cette classe abstraite permet de vérifier certaines assertions, ou en d'autres termes de vérifier qu'une valeur répond à une condition.

Les vérifications présentées ici sont très simples mais permettent de traiter la plupart des conditions requises pour un formulaire. Voici le détail des fonctionnalités actuelles.

Lire la suite

Utilisation des singletons en PHP5

Un singleton est utilisé lorsque l'on a besoin d'une instance unique d'une classe, par exemple une connexion à une base de données.

Avec une petite astuce sur la création de votre classe, en utilisant un masque (aussi appelé pattern) de création, vous pouvez faire en sorte que l'appel d'une classe soit unique dans tout votre site.

Lire la suite

Fonction fputcsv en PHP4

Alors que la fonction fgetcsv existe en PHP4 et en PHP5, la fonction fputcsv n'existe qu'en PHP5, ce qui est fort dommage lorsqu'on veut travailler avec des fichiers d'exports ou bien lorsqu'on veut avoir un script utilisable sur la plupart des serveurs sans connaitre leur version de PHP.

Lire la suite

Contrôler un email

Je ne vais pas me bloquer sur la version RFC d'une adresse e-mail, ni sur la vérification de son existence, mais sur une vérification syntaxique basique.

Syntaxe d'une adresse e-mail

Une adresse e-mail comporte 2 parties: utilisateur et domaine.
L'utilisateur peut compporter tout les caractères alphanumériques, ainsi que le "-", le " _" et le "+" (bien que rare). Le domaine est composé de plusieurs caractères alphanumériques, ainsi que du "-", le tout suivi d'un point et de 2 à 4 caractères.

Expression régulière

Nous pouvons donc valider la plupart des emails avec le masque suivant:

^([_a-z0-9-+.]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$

Cette expression marche dans 95% dans cas. Elle doit bien entendu être traitée de manière case-insensitive (sans tenir compte de la casse).

Limitation de l'accès SSH

Parfois, lors d'une mise à jours d'un serveur par exemple, il peut être intéressans de limiter l'accès SSH au seul utilisateur root. Pour faire cela, c'est très simple: il suffit de mettre la raison dans un fichier /etc/nologin et les autres utilisateurs se verront refuser l'accès, avec comme raison le contenu du fichier.

Pour ré-autoriser l'accès, supprimez le fichier.

Bloquer les attaques "brute force" avec iptables

Iptables est l'interface en ligne de commande permettant de configurer Netfilter, qui est un module du noyau Linux qui offre la possibilité de contrôler, modifier et filtrer les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage de connexions internet et d'autorisation du trafic réseau.

Il est possible de configurer iptables pour automatiquement bloquer les adresses IP qui feraient trop de tentatives d'accès à votre serveur, un peu à la manière de fail2ban mais sans installer de module complémentaire.

Lire la suite

json_encode et json_decode en PHP4

Malgré ce que j'ai pu dire précédemment, il arrive parfois que je doive adapter mes scripts pour des versions anciennes de PHP. Je suis donc obligé d'avoir une petite série de fonctions de compatibilité, que je vais vous proposer au fil de mes développements.

Les fonction json (decode et encode) ne sont natives en PHP que depuis la version 5.2, mais heureusement il y a un moyen de les rendre accessibles depuis les versions antérieures. Pour cela, il faut télécharger le package JSON-PEAR et en extraire le fichier JSON.php.

Ensuite, ce petit script vous permet de créer (si nécessaire) les fonctions:

<?php
if ( !function_exists('json_decode') ){
	require_once (dirname(__FILE__).'/JSON.php');
    function json_decode($content, $assoc=false){
		if ( $assoc ){
			$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
		} else {
			$json = new Services_JSON;
		}
		return $json->decode($content);
	}
}
 
if ( !function_exists('json_encode') ){
	require_once (dirname(__FILE__).'/JSON.php');
	function json_encode($content){
		$json = new Services_JSON;
		return $json->encode($content);
    }
}
?>

Bien entendu, je pars du principe que JSON.php est dans le même répertoire que le fichier de fonctions, à vous d'adapter les chemins utilisés dans require_once

- page 2 de 5 -