De plus en plus de systèmes de raccourcissement d'URL existent, et le système est somme toute relativement simple à mettre en place. Il demande un peu de logique et l'utilisation d'un encodage en base 62: les 10 chiffres et les 26 lettres (minuscules et majuscules).
Tag - fonctions utiles
01/ 07/2010
Générer des clefs RSA en php
CrazyCat » 01/ 07/2010 11:28 » PHP
Voici une fonction très simple pour générer des clefs RSA.
Elle ne prend qu'un argument, la longueur en bits de la clé privée (512, 1024 ou 2048). Elle retourne un tableau contenant la clef privée, la clef publique et un message d'erreur.
<?php /** * Generates RSA keys * @param integer $pkbits Private key bits * Specifies how many bits should be used to generate a private key * Must be 512, 1024 or 2048 * @return array Contains private key, public key and error message */ public function generateRsa($pkbits=512) { $rsaKey = array('private' => '', 'public' => '', 'error' => ''); $pkbits = intval($pkbits); if ($pkbits != 512 && $pkbits != 1024 && $pkbits != 2048) { $rsaKey['error'] = 'Private key bits must be 512, 1024 or 2048'; return $rsaKey; } $res = openssl_pkey_new(array('private_key_bits' => $pkbits)); // Get private key openssl_pkey_export($res, $privkey); // Get public key $pubkey = openssl_pkey_get_details($res); $rsaKey['private'] = $privkey; $rsaKey['public'] = $pubkey['key']; return $rsaKey; } ?>
27/ 05/2010
Fonction glob récursive
CrazyCat » 27/ 05/2010 10:45 » PHP
La fonction glob est utilisée dans de nombreux langages, elle sert à lister tous les fichiers (et répertoires) qui vérifient un masque.
La petite fonction qui suit sert à rechercher tous les fichiers qui vérifient un masque dans une arborescence.
<?php /** * Recursive glob * @param string $pattern Masque à vérifier * @param string $path Répertoire initial * @param integer $flags Drapeaux * @return array list of files */ function rglob($pattern='*', $path='', $flags = 0) { $paths=glob($path.'*', GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT); $files=glob($path.$pattern, $flags); foreach ($paths as $path) { $files=array_merge($files,rglob($pattern, $path, $flags)); } return $files; } ?>
Les drapeaux sont ceux utilisés par la fonction glob:
- GLOB_MARK : Ajoute un slash final à chaque dossier retourné
- GLOB_NOSORT : Retourne les fichiers tant l'ordre d'apparence (pas de tri)
- GLOB_NOCHECK : Retourne le masque de recherche si aucun fichier n'a été trouvé
- GLOB_NOESCAPE : Ne protège aucun métacaractère d'un antislash
- GLOB_BRACE : Remplace {a,b,c} par 'a', 'b' ou 'c'
- GLOB_ONLYDIR : Ne retourne que les dossiers qui vérifient le masque
- GLOB_ERR : Stop lors d'une erreur (comme des dossiers non lisibles), par défaut, les erreurs sont ignorées.
25/ 03/2010
Ajax en post avec jQuery
CrazyCat » 25/ 03/2010 14:00 » JavaScript
Actuellement, jQuery possède une fonction ajax qui est getJSON et qui permet de faire des appels Ajax qui récupèrent des données au format JSON. Le seul souci est que les paramètres envoyées le sont en GET, avec toutes les contraintes que cela impose.
Pour pouvoir fonctionner en POST avec la même logique, j'ai étendu jQuery avec une fonction postJSON:
jQuery.extend({ postJSON: function( url, data, callback) { return jQuery.post(url, data, callback, "json"); } });
Elle prend les mêmes arguments que getJSON mais fonctionne en POST.
12/ 11/2009
Retrouver le type MIME
CrazyCat » 12/ 11/2009 15:40 » PHP
Lorsqu'on propose un téléchargement via une interface web, ou si on veut mettre des pièces jointes dans un mail, il faut avoir le "mime-type" (Multipurpose Internet Mail Extensions) du fichier. Une fonction PHP existe pour celà , c'est mime_content_type() malheureusement elle n'est pas toujours disponible.
Voici une petite astuce qui permet de la recréer:
<?php if (!function_exists(mime_content_type)) { // Nous sommes dans le cas où elle n'existe pas function mime_content_type($f) { $ext = strtolower(substr($f,strrpos($f, "."))); // On ne se base que sur l'extension du fichier switch($ext){ case ".gz": $mtype = "application/x-gzip"; break; case ".tgz": $mtype = "application/x-gzip"; break; case ".zip": $mtype = "application/zip"; break; case ".pdf": $mtype = "application/pdf"; break; case ".png": $mtype = "image/png"; break; case ".gif": $mtype = "image/gif"; break; case ".jpg": case "jpeg": $mtype = "image/jpeg"; break; // Notez le cas d'un même type avec différentes extensions case ".txt": $mtype = "text/plain"; break; case ".htm": case ".html": $mtype = "text/html"; break; default: $mtype = "application/octet-stream"; break; // Par défaut, c'est application/octet-stream } return $mtype; } } ?>
10/ 10/2009
Recherche "à proximité"
CrazyCat » 10/ 10/2009 15:53 » PHP
Ceci est la suite logique du billet précédent et permet de faire une recherche de points géolocalisés dans un rayon autour d'un point donné.
L'explication fera intervenir quelques légères notions mathématiques et géographiques, mais uniquement pour la compréhension du fonctionnement.
05/ 10/2009
Envoyer un email html avec pièce jointe en PHP
CrazyCat » 05/ 10/2009 16:50 » 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.
06/ 09/2009
Les assertions et vérification de formulaire
CrazyCat » 06/ 09/2009 15:48 » PHP
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.
07/ 08/2009
Fonction fputcsv en PHP4
CrazyCat » 07/ 08/2009 14:53 » PHP
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.
13/ 05/2009
Fonction str_split
CrazyCat » 13/ 05/2009 14:11 » PHP
Bien que je développe essentiellement en PHP 5, il m'arrive parfois d'avoir à travailler sur des hébergements qui sont encore en PHP 4, ce qui est parfois handicapant car des fonctions manquent.
Récemment, je me suis servi dans un script de la fonction str_split() qui permet de transformer une chaîne de caractères en un tableau. Bien entendu, je ne suis pas le seul à avoir fait cela, il y a d'autres versions sur la page officielle.
array str_split ( string string [, int split_length] ) : Convertit une chaîne de caractères en tableau. Si le paramètre optionnel split_length est spécifié, le tableau retourné sera découpé en sous-parties, chacune de taille split_length, sinon, chaque sous-partie aura la taille d'un caractère.
Cette fonction retourne FALSE si split_length est inférieur à 1. Si la longueur de split_length est supérieure à celle de string, la chaîne entière est retournée dans le premier (et seul) élément du tableau.
Fonction
<?php if (!function_exists('str_split')) { /** * Convertit une chaine en tableau * Retourne false si $length est inférieur à 1, sinon un tableau * @param string $string Chaine à convertir * @param integer $length Longueur des sous-ensembles * @return mixed */ function str_split($string, $length=1) { if (intval($length)<1) return false; if (strlen($string)<=$length) return array($string); $parts = array(); while(strlen($string)>0) { $parts[] = substr($string, 0, $length); $string = substr($string, $length); } return $parts; } } ?>
Utilisation
$string = 'Salut Dave'; $test = str_split($string); print_r($test); $test2 = str_split($string, 3); print_r($test2);
Cet exemple va afficher:
Array (
[0] => S
[1] => a
[2] => l
[3] => u
[4] => t
[5] =>
[6] => D
[7] => a
[8] => v
[9] => e
)
Array(
[0] => Sal
[1] => ut
[2] => Dav
[3] => e
)« billets précédents - page 1 de 2