Archives par mot-clé : PHP

Quelques techniques de concaténation dans différents langages

Publié dans Geekeries | Laisser un commentaire

D’après Wikipédia : > Le terme concaténation […] désigne l’action de mettre bout à bout au moins deux chaînes (de caractères).
Simplement un petit mémo rapide sur la concaténation dans différents langages.

Javascript, jQuery, Java

variable1+variable2 "texte texte texte"+variable1

PHP

variable1.variable2 'texte texte texte'.variable1

C++

variable1<<variable2 "texte texte texte"<<variable1

SQL

CONCAT(variable1, variable2) CONCAT("texte texte texte", variable1)

CONCAT_WS pour ne pas être embêté avec les champs vides.

Un système de commentaire avec jQuery en Ajax (2)

Publié dans Javascript | 25 commentaires

Hier, j’expliquais comment faire un système de commentaire avec jQuery, c’est-à-dire un système de commentaires sans rechargement de la page. Mais il manquait encore l’appel Ajax, j’entends par là, l’appel asynchrone à un script PHP qui enregistre le commentaire ajouté dans une base de données. C’est aujourd’hui chose faites ! J’en profite pour expliquer les différents tests que j’ai effectué avec getJSON et post en mode JSON et XML.

Première étape : getJSON

Je rappelle l’idée de ce script : un utilisateur peut remplir un formulaire pseudo+commentaire et lorsqu’il l’envoie, hop son message apparait sans rechargement de la page en tête des autres commentaires. Son commentaire a été enregistré dans une base de données entre temps. Du coup :

  • on a besoin d’envoyer 2 données au script PHP : le pseudo et le contenu du commentaire
  • on a besoin que le script PHP nous renvoie 3 données : le pseudo et le contenu du commentaire (qu’on a sécurisé et affiné si besoin) et une valeur de retour (1 si ok, 0 si problème)

Et la, si vous êtes que moi et que vous ne connaissez pas JSON, vous avez le droit de vous demander quoi faire.
Continuer la lecture

Ainsi cron cron cron, les petites marionnettes

Publié dans Geekeries | Laisser un commentaire

ça cron ?
Voilà 3 mois que j’ai écris un billet intitulé avec autant de mauvais goût que celui que vous êtes en train de lire : ça cron ! Mise à part leur entrée en matière un peu capillotractée, ces 2 billets abordent le même sujet : les crons.
Cron, c’est un système sous Linux qui permet de déclencher un événement à intervalle régulier. Par exemple on peut exécuter tous les jours un script PHP qui nettoie une base de données, ou une ligne de commande Shell qui ouvre un lecteur audio et joue un titre au hasard. Bref, c’est un outils permettant de faire pas mal de choses intéressantes et qui font un peu rêver. Comme je l’expliquais précédemment, j’ai trouvé mon bonheur pour apprendre à utiliser cron sur le site Code18 : Installer un cronjob, mais à l’époque, je n’avais pas eu le temps de tester. Aujourd’hui, c’est chose faites ! Ce petit billet a donc pour but de retracer les grands étapes d’utilisation d’un cron.

Ce dont on a besoin

Tout simplement : un serveur accessible en ligne de commande sur lequel cron est installé.
Pour vérifier si cron est utilisable, il faut utiliser la ligne de commande qui liste les événements programmés :

crontab -l

Si cron est utilisable la liste des événements programmés s’affichera, ou s’il n’y en a pas, un message du style : no crontab for ******.

Dans le cas contraire : -bash: /usr/bin/crontab: Permission denied ou -bash: crontab: command not found.

Pour tout cela, il faut bien sûr se connecter auparavant au serveur en SSH :

ssh user@serveur

Ajouter ou modifier un événement

Il faut utiliser la ligne de commande :

crontab -e

Celle-ci ouvrira le fichier crontab (contenant les événements programmés) sous l’éditeur par défaut, vim par exemple.
Continuer la lecture

Utiliser une fonction PHP avec jQuery à l’aide de get

Publié dans Javascript | 3 commentaires

En ce moment, je m’amuse un petit peu avec jQuery et l’Ajax. C’est un domaine dans lequel, je ne me sens vraiment pas à l’aise, donc j’essaie de faire des progrès. Aujourd’hui, je suis tout content car j’ai réussi à utiliser une fonction PHP avec jQuery en utilisant les principes d’Ajax ! J’ai découvert la méthode get() dans jQuery, et c’est exactement ce que je cherchais.

Démarche générale

J’ai un formulaire contenant un champ titre et un champ url. Le champ url contient normalement le titre mais parsé par une fonction PHP maison parserUrl(). Pour faciliter la vie de l’utilisateur, je voulais ajouter un petit bouton « Actualiser » à côté du champ Url, afin de pouvoir actualiser l’url avec un nouveau titre à n’importe quel moment. Voici un démo pour voir le fonctionnement : démo Utiliser une fonction PHP avec jQuery.

Démo utilisation get() en jQuery

Démo utilisation get() en jQuery

Continuer la lecture

Montre mécanique

Transformer une date en langage naturel, en timestamp

Publié dans PHP | Laisser un commentaire

En ce moment, je m’amuse avec des flux RSS, et il se trouve que dans un flux RSS, on tombe souvent sur une date de la forme : « Fri Oct 30 17:17:00 2009 ». Bref, une date en langage naturel ! Mais voilà, ce dont j’ai besoin c’est d’une date au format timestamp (le nombre de secondes depuis le 1er janvier 1970 à minuit, aussi appelé l’epoch). Je pars donc avec mes grands sabots : des regex pour séparer heures, minutes, …, et un p’tit coup de mktime !
C’est pas mal, mais en fouillant dans la doc, j’ai trouvé une petite fonction fort sympathique : strtotime ! Cette fonction prend une chaine de caractères en argument et renvoie, si possible, le timestamp correspondant. Plusieurs mots clefs sont pris en compte, par exemple now, ou next Thursday. Et le format de date précédemment cité est bien reconnu, chouette, non ? Pour se convaincre :

$str = 'Mon Nov 2 07:01:11 2009';
$timestamp = strtotime($str);
$str2 = date('D M j H\:i\:s Y', $timestamp);
echo 'Date d\'origine : '.$str.'<br />Timestamp après strtotime : '.$timestamp.'<br />Date réécrite après strtotime : '.$str2;

Ce qui affiche bien :

Date d’origine : Mon Nov 2 07:01:11 2009
Timestamp après strtotime : 1257145271
Date réécrite après strtotime : Mon Nov 2 07:01:11 2009

Magique, non ?
Bon, je retourne à mes flux RSS.

Uploadify : uploader facilement avec Jquery

Publié dans Javascript | 2 commentaires

Voilà déjà quelques temps que j’entretiens, en parallèle de mon script « toolbar BBcode » un script d’upload de fichiers. Il contient une interface d’administration bien complète, et l’interface utilisateur permet d’uploader facilement un ou plusieurs fichiers à la fois, en renommant, écrasant, sélectionnant un dossier particulier, et bien sûr la gestion des fichiers déjà uploadés permet d’en faire autant. Récemment, en apprenant des notions d’Ajax, j’ai même appris à faire des uploads sans rechargement de pages, c’est beaucoup plus zoulie !

Continuer la lecture

Singleton(s) !

Publié dans PHP objet | Commentaires fermés sur Singleton(s) !

Voilà bien longtemps que je n’avais pas fait de billets sur le PHP Objet. A vrai dire, je suis en train d’apprendre la programmation orientée objet en cours (au travers du Java et du C++), donc ça fixe vraiment les idées et permet de comprendre pas mal de petites choses, notamment l’utilité de certaines notions, comme les singletons, qui me paraissait bien douteuse auparavant. Un singleton, c’est une classe que l’on ne peut instancier qu’une seule fois. Par exemple, en cours on a créé une classe liste dont hérite la classe liste vide, et la classe listeNonVide. Clairement, il n’existe qu’une et une seule liste vide (sinon, on ne s’en sort pas), donc cette classe ne peut être instanciée qu’une seule fois, donc c’est un singleton. Je n’ai pas encore trouvé d’exemples plus parlant, par contre sur Apprendre-PHP, l’exemple est celui d’une classe PresidentDeLaRepublique qui, en effet, ne peut être instanciée qu’une seule fois)

Comment faire ?

L’idée est la suivante : le constructeur de la classe est private, on ne peut donc instancier la classe en passant directement par lui. Par contre, une variable static possède un accessor (getMachin()) qui est public et qui appelle le constructeur si la classe n’est pas encore instanciée (variable static == null), ou retourne l’instance sinon. En somme, voilà ce que ça donne :
Continuer la lecture

BBcode Toolbar en PHP Objet – Version 1

Publié dans Projets | Laisser un commentaire

C’est vers fin juillet, que j’ai écrit un billet intitulé Documentation module toolbar en PHP objet qui parlait d’un système que je suis en train de concevoir : un module de toolbar BBcode en PHP objet, facilement installable sur tout type de site Web et totalement paramétrable. J’ai terminé ce module, et j’en sors donc la version 1. Une version stable (enfin, avec les essais que j’ai fait) et relativement satisfaisante à mon goût. Je l’ai installé dernièrement sur un site (qui n’est malheureusement pas encore en ligne) et cela ne m’a pas posé de problèmes. (même si ça m’a donné plein d’idées d’améliorations) Si vous souhaitez tester ce module sur votre site, pas de problèmes : téléchargez-le, puis suivez le readme.txt pas à pas. Et surtout, n’hésitez pas à me faire des retours. Ce module permet :

  • De créer, puis de générer différentes barres de boutons cliquables, à afficher au dessus de n’importe quel champ textarea
  • De paramétrer ces boutons, notamment leur action (création de balises [un][/un] ou [deux=trois][/deux], en passant par un pop-up, ou autre)

Il est implémenté en PHP (orienté Objet) et Javascript (utilisant le framework Prototype pour l’instant).

Paramétrage des boutons cliquables
Exemple de toolbar

J’espère qu’il vous donnera entière satisfaction ! En tout cas, à moi, il m’est bien utile, et je compte bien continuer à l’améliorer.

Annexes

Taille d’une image avec getimagesize

Publié dans PHP | Laisser un commentaire

Ouhahou, ça faisait longtemps ! Il faut dire que je suis parti en vacances tout une semaine, que c’est un peu le rush au boulot ces derniers temps, et accessoirement que j’ai de moins en moins Internet chez moi. Bref, j’ai reussi cahin caha à apprendre de nouvelles choses pendant au moins 30 minutes chaque jour, mais pour mettre ces découvertes à l’écrit, il m’aurait fallu un peu plus de temps. Hier, je cherchais à connaitre les dimensions (largeur et hauteur) d’une image. J’ai d’abord pensé à imagesx() et imagesy() que j’avais déjà utilisé et qui renvoie respectivement la largeur et la hauteur de l’image dont le descripteur est passé en argument. C’est justement là le problème, puisque pour ce servir de ces fonctions il faut d’abord utiliser imagecreatefromjpeg('nom du fichier image') ce qui n’est quand même pas très pratique. Surtout quand on tombe sur getimagesize(‘nom du fichier image’) ! Cette fonction retourne non seulement la largeur et la hauteur de l’image étudiée, mais aussi son format (notamment au format mime), son type de coloration (RGB ou CMYK) ! C’est plutôt beau, non ? Voyons un petit exemple :

<?php
echo '<pre>';
print_r(getimagesize('test.gif'));
echo '</pre>';

Ce qui retourne :

Array (
    [0] => 45
    [1] => 45
    [2] => 1
    [3] => width="45" height="45"
    [bits] => 7
    [channels] => 3
    [mime] => image/gif ) 

Voilà ce qui peut être utile :

  • Le champ 0 retourne la largeur en pixel. On retrouve cette largeur dans le champ 3 dans une chaine de caractères directement utilisable dans du code HTML
  • Le champ 1 retourne la hauteur en pixel. On retrouve cette hauteur dans le champ 3 dans une chaine de caractères directement utilisable dans du code HTML
  • Le champ 2 et mime retournent le format de l’image. Le champ 2 par son numéro, le champ mime au format mime utilisable directement dans les entêtes HTTP.

C’est quelque chose que je cherchais depuis quelque temps, le problème c’est que j’ai oublié dans quel projet j’en avais besoin…
Au passage, 2 autres informations dont je pense ne jamais me servir :

  • Le champ bits retourne le nombre de bits par couleur. ça peut boguer avec le format Gif. J’ai pas trop compris ce que cela voulait signifier
  • Le champ channels retourne le type de coloration (3 pour RGB, 4 pour CMYK)

Forcer le téléchargement d’un fichier

Publié dans PHP | Laisser un commentaire

Lorsque j’ai conçu la Bnbox v.3 j’aurais bien aimé savoir ce que j’ai découvert il y a peu. Comment forcer le téléchargement d’un fichier sur un site Web ? Par exemple un fichier PDF (so beautiful!) ou un fichier mp3 sont en général directement lus par les navigateurs récents. Mais il peut être pratique, parfois, d’éviter au visiteur la manipulation Clic droit > Enregistrer la cible du lien sous….

<?php
/**
 * Force le téléchargement d'un fichier
 * 
 * @param string $filePath Emplacement du fichier sur le serveur web
 * @param string $fileNameToDl=<em> Nom du fichier que l'utilisateur va télécharger (si on souhaite le rendre différent de celui d'origine)
 * @post Ouvre une fenêtre permettant le téléchargement du fichier
 * /
function forcerTelechargement($filePath, $fileNameToDl=</em>)
{
    header('Content-Description: Téléchargement le fichier '.$fileName);
    header('Content-Type: application/octet-stream'); // On peut mettre text/gif, etc...
    header('Content-Length: '.filesize($path.'/'.$fileName));
    header('Content-disposition: attachment; filename='.($fileNameToDl != NULL ? $fileNameToDl : basename($filePath))); // Nom du fichier téléchargé par l'utilisateur. On peut donc mettre ce qu'on veut.
    header('Pragma: no-cache');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé pour ne vraiment pas avoir de cache
    readfile($filePath); // Ouvre le fichier dans le buffer : d'après le geader, ce sera une fenêtre de téléchargement
    exit();
}

forcerTelechargement('./document/exemple.pdf');

Continuer la lecture