Kamelot Blog

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 10 mai 2013

ven
10
mai '13

Vous connaissez stream_resolve_include_path() ?

Le "problème" avec file_exists() c'est qu'il ne tient pas compte de l'include_path

stream_resolve_include_path() permet de palier à ce problème

if (file_exists([stream_resolve_include_path('monficher')) { .... }

mercredi 20 juin 2012

mer
20
juin '12

Ce 30 juin, on retire une seconde, et paf pour ceux qui ont mal codé de manière trop simpliste.

La rtbf titre : "Le 30 juin, nous gagnerons une seconde de vie

En pratique 30 juin prochain, après 23h59m59s, il sera 23h59m60s, avant de passer, la seconde suivante, le 1er juillet à 00h00m00s.

Donc ceux qui ont utilisé des intervalles calculés en secondes, du style 24*60*60 ... ben leur 13h00m00 du 30 juin devient 12h59:59 le 1er Juillet. Pas propre

C'est en fait le même problème que la mauvaise gestion de l'heure d'été, d'hiver et des 29 février.

Donc si vous ne travaillez pas sur une "durée" mais sur une "période", utilisez les bonnes fonctions date de php.

jeudi 7 juin 2012

jeu
07
juin '12

Réorganiser une classe.

Pour mon premier post depuis un bon bout de temps, je viens avec une question.

Comment organisez vous vos méthodes dans vos classes ?

  • toujours ajouter la dernière en bas ?
  • le construct et le destruct en haut ?
  • tous les setters ensembles ?
  • ou chaque setter à coté de son getter ?
  • triés alphabétiquement ?
  • ...

Et surtout comment organisez-vous vos classes ?

Je veux dire faites vous comme moi de bêtes couper/coller ? ou avez-vous une astuce ?

Personnellement, comme j'utilise comme on utilise du ZendStudio et du aptana, ca me plairait bien d'avoir un outil qui afficherait la liste des méthodes et propriétés comme "outline" mais avec lequel il serait possible de faire un drag&drop dans la liste pour que le code se mette à jour pour reproduire cet ordre.

Merci pour vos réponses....

lundi 12 mars 2012

lun
12
mar '12

Rétrospective php de Février ( partie 2 )

suite de mes tweet à propos de php en février

  • Cube (a qui on doit une bonne présentation au #fosdem) engage (en flandre) #php http://awe.sm/5eylz
  • PHP Bug Lost - A debug console and monitor tool for PHP scripts. http://awe.sm/5fEQy
  • List Of PHP String Functions Programmer Need To Know | Techno Tab http://awe.sm/5fEAs
  • Comment utiliser l'outil Zend_Tool en ligne de commande | LyRiX Blog http://awe.sm/5fCc8 #zendframework
  • Pascal Martin: Dommage d’utiliser #Ant, dans un projet #PHP,j’ai tendance à lui préférer #Phing
  • CakePHP evolves to 2.0 | Refulz PHP http://awe.sm/5f1Fu
  • #PHP 5.4 Built In Webserver http://awe.sm/5f4rW
  • PHP 5.4.0 RC8 released http://bit.ly/zfrMtc
  • j'ai commenté le dernier post de @mageekguy42 et je vais me faire descendre (vidéo)
  • #php 5.4 <?= is now always available regardless of the short_open_tag setting http://bit.ly/yibJIh
  • URL rewriting in PHPCloud | ESchrade - Pure PHP Goodness http://awe.sm/5ezV9
  • taint pour #php , une release tous les 2 jours http://awe.sm/5gEMM1 (vidéo)
  • Rafael Dohms - Your code sucks, let's fix it PHPBenelux Meeting February 28, 201 (vidéo) http://awe.sm/5gB3r2
  • Zend Framework / Nouveau View Layer pour ZF (vidéo) http://bit.ly/x7efQG2
  • Créer un moteur de recherche avec Sphinx et PHP http://awe.sm/5fxea #sphinxsearch #php
  • If you missed Michelangelo van Dam's webinar on Unit Testing Zend Framework Apps last week, you can now watch the... http://fb.me/1JVg1ROHT
  • Codeception a full-stack testing PHP framework. Inspired by BDD, for writing acceptance, functional and even unit tests http://awe.sm/5fsS3
  • PHP's development visualized by gource through svn commit logs http://awe.sm/5fsNO (vidéo)

lundi 27 février 2012

lun
27
fév '12

Rétrospective php de Février (partie 1 )

samedi 25 février 2012

sam
25
fév '12

Zend_Amf: surveiller et tester son service.

mercredi 25 janvier 2012

mer
25
jan '12

5 petites choses qui ne prennent pas beaucoup de temps pour s'investir dans la communauté php

original : http://devzone.zend.com/article/12450-Get-involed-in-the-PHP-community-5-easy-steps-that-take-less-than-5-minutes-each

1 ° Mettez en place un tag "PHP" sur votre Blog

Si vous parlez de php sur votre blog mais aussi d'autres choses.

  • Proposez un tag ou une catégorie dédiée à PHP
  • Proposez un feed rss de ce tag ou catégorie
  • Soyez actif dans cette catégorie
  • Portez cette catégorie à la connaissance des "planets"
    • http://www.planete-php.fr/
    • http://www.planet-php.net/blog/

vendredi 30 décembre 2011

ven
30
dec '11

Rétrospective php de Décembre

Tout ce que j'ai twetté en Décembre à propos de php.


mercredi 14 décembre 2011

mer
14
dec '11

limit negatif dans explode depuis PHP 5.1.0

Depuis PHP 5.1.0

array explode ( string $delimiter , string $string , int $limit  )

Si le paramètre limit est négatif, tous les éléments, excepté les -limit derniers éléments sont retournés.

$str = 'one|two|three|four';
print_r(explode('|', $str, -1));

résultat

Array
(
    [0] => one
    [1] => two
    [2] => three
)

ref :

PHP: explode - Manual

lundi 16 mai 2011

lun
16
mai '11

Le saviez vous ? PHP_EOL & REQUEST_TIME

Pour ne pas devoir utiliser "\n"

J'avais pour habitude de faire

defined('NL') || define('NL',"\n");

et j'avais du code du style

echo 'foo' . NL
.      'bar';

En fait depuis PHP 4.3.10 et PHP 5.0.2, la constante PHP_EOL existe nativement pour cela.

echo 'foo' . PHP_EOL
.      'bar';

Et l'intérêt principal, est dans les commentaires.

La valeur de PHP_EOL dépends de l'OS. On peut avoir \n, \r\n ou \r comme valeurs.

Ca vaut le coup de relire la liste des constantes préétablies. Ca peut donner des idées.

Dans le même ordre d'idée, un timestamp représentant le début de la demande est disponible dans la variable $_SERVER['REQUEST_TIME'] depuis PHP 5.1.

lundi 2 mai 2011

lun
02
mai '11

Plusieurs boutons "submit" dans un formulaire

En réponse au post "Plusieurs boutons " submit " dans un formulaire" publié sur Programmation Web|, je ressors un vieux post que j'ai écrit il y a 6 ans.

Je ne le recopie pas, je conseille d'aller le lire parce que les commentaires sont tout aussi intéressants.

Mais en pratique mon idée à l'époque était d'utiliser la même technique que pour les checkbox ou les radio.

On mets un name de la forme name="action[nom_de_mon_action]"

Cela donne 2 avantages

  1. on ne s'occupe que de action et puis on regarde ce qu'il y a dedans.
  2. on a pas du tout à s'inquiéter du contenu de value, ce qui est intéressant pour les formulaires internationalisés.

mercredi 16 mars 2011

mer
16
mar '11

memcached 2.0.0 en beta

PECL :: Package :: memcached :: 2.0.0b1

  • Change the return value for non-existing keys to be NULL rather than 'false', affects simple get only
  • Add fastlz library that provides better/faster payload compression
  • Add configure switch to enable/disable JSON serialization support
  • Add getAllKeys() method
  • Add deleteMulti() and deleteMultiByKey() methods
  • Add isPristine() and isPersistent() methods
  • Add setOptions() method to set multiple options at once
  • Add SERIALIZER_JSON_ARRAY type that decodes JSON payloads as arrays instead of objects
  • Add support for Unix domain socket connections
  • Add memcached.compression_threshold INI setting
  • Add memcached.compression_factor INI setting
  • Add memcached.compression_type INI setting
  • Implement a few speed optimizations
  • Many bug fixes and memory leaks plugged
  • Add several more tests
  • Add constants for libmemcached 0.37+:
  • Memcached::OPT_NUMBER_OF_REPLICAS
  • Memcached::OPT_RANDOMIZE_REPLICA_READ
  • Add 'on_new' callback to constructor
  • Add SASL support

jeudi 10 février 2011

jeu
10
fév '11

PHPBenelux User Group Meeting de février

Heure

mardi 22 février · 19:00 - 23:00

Lieu

PHPro
Veldkant 33A
Kontich, Belgium

Plus d'infos sur http://phpbenelux.eu/en/2011_Feb_meeting .

Présentations par

  • Jeroen Keppens (PHP in the dark),
  • Toon Keppens (Enterprise Drupal integration)
  • Koen Eelen (Enterprise Magento integration).

Au programme

  • 19h00 : Welcome & drinks
  • 19h30 : Puntavista case
  • 20h00 : Casestudy: linking IngramMicro to Magento
  • 20h30 : pause
  • 21h00 : PHP in the dark
  • 22h00 : Drinks & social

vendredi 21 janvier 2011

ven
21
jan '11

PHPBenelux Conference January 2011

Plus de 20 orateurs pour 24 présentations pendant les 2 jours de la PHPBenelux Conference January 2011

En effet, c'est déjà dans une semaine que PHPBenelux propose cette deuxième édition les 28 & 29 janvier 2011, à Anvers.


Achetez votre ticket

vendredi 12 novembre 2010

ven
12
nov '10

L'auto completion Zend Studio comprend le camel case

Si vous utilisez la notation Zend Framework, Mylibrary_Brol_Machin_Truc, vous pouvez en profiter pour accelerer votre utilisation de l'auto-completion dans Zend Studio

En effet pour Mylibrary_Brol_Machin_Truc, vous pouvez utiliser MBM.

Voici un exemple avec Zend_L*

Si vous voulez acceder à Zend_Loader qui est plus loin, vous pouvez utiliser les premières voyelles

Si ca ne suffit pas vous pouvez revenir aux consonnes après

samedi 6 novembre 2010

sam
06
nov '10

Comment voir les fichiers .htaccess dans l'explorateur de Zend Studio (ou Eclipse) ?

Vous cliquez sur la flèche en haut a droite de l'explorateur


puis il faut décocher la case qui dit de ne pas afficher les fichier de type .*


source : chrismacpherson.com

Screenshots réalisés avec FastStone Capture pas "libre" mais dispo sur liberkey

lundi 4 octobre 2010

lun
04
oct '10

Zend Studio 8.0 : @deprecated biffe les fonctions

Encore une autre petite découverte sympathique dans la beta de Zend Studio 8

Voyez cet exemple. J'ai 2 fonctions.

La première, foo(), que je documente simplement, et une autre, bar(),que je documente avec un @deprecated

On remarque que là où on utilise la fonction @deprecated, ligne 20, elle est biffée.

Je trouve que ca renforce l'utilité de ce tag.

Et donne envie de refactorer :-)

Il s'agit en fait d'une des nouvelles possibilités de coloration syntaxiques. En effet la finesse des réglage est accrue.

On peut aussi définir séparément le style des task tag, des éléments statiques, des commentaires multilignes, des Heredoc, des fonctions internes, des méthodes, des fonctions déclarées, ...

dimanche 3 octobre 2010

dim
03
oct '10

Zend Studio 8 : servers distants expliqués en vidéo.

Une vidéo intéressante au même propos que mon post précédent

dim
03
oct '10

Zend Studio 8.0 : enfin l'upload ftp même sur un projet svn; (avec un bug et une solution)

Il était temps.

Zend Studio 8 apporte finalement une solution utilisable pour combiner ftp et versionning sur le même projet.

Zend Studio 8.0 est basé sur la version Eclipse Helios.

Tout comme avant, on a remote server pour définir les serveurs ftp et ssh dont on dispose.

Ce qu'il y a de neuf c'est qu'on ne doit plus faire le choix entre svn et ftp.

En effet malgré la configuration svn, on peut maintenant aller dans "properties" (dernière option du menu image 1) choisir d'un des serveurs distant, on lui choisi un sous répertoire.

Plus haut dans le menu (image 1) une nouvelle entrée "Remote Server" permet de déclencher un upload ou un download manuel.

Dans la configuration (image 2) on peut choisir de déclencher cet upload au "save" ou à la tentative d’exécution.

Lire la suite...

mercredi 8 septembre 2010

mer
08
sep '10

Forum PHP Paris 2010 : 15 ans de PHP et des 10 ans de l'Afup.

Forum PHP Paris 2010 organisé par l'AFUP avec les meilleurs experts PHP français et internationaux

Le Forum PHP 2010 est officiellement annoncé pour les 09 et 10 novembre 2010 à la Cité des Sciences de Paris la Villette (France).

C'est le seul évènement professionnel en France consacré à la plate-forme PHP et aux technologies Web. Il rassemble les différents acteurs de la profession et valorise le dynamisme français en terme de technologies de pointe sur Internet.

Il sera placé sous le signe des 15 ans de PHP et des 10 ans de l'Afup.

vendredi 3 septembre 2010

ven
03
sep '10

Chuck Norris et l'éléphpant

Après E_Chuck_Norris, le package Chuck Norris pour Drupal.

On a de l'humour dans la communauté PHP.

dimanche 15 août 2010

dim
15
aoû '10

PHP TestFest 2010 à Lille le 21 août 2010

La TestFest 2010 française aura lieu le samedi 21 août 2010 à partir de 13 h 30dans les locaux de la société No Parking, située sur le site de l'Euratechnologies au 165 avenue de Bretagne à Lille, dans le bâtiment Leblanc au troisième étage.

C'est gratuit, allez y avec votre ordinateur portable.

mardi 3 août 2010

mar
03
aoû '10

Récupération des données d'un formulaire

Voici un petit formulaire:

[php]
<form>
  <input type="radio" name="BT.123" value="actif" />
  <input type="radio" name="BT.123" value="inactif" />
  <input type="submit" value="Submit" />
</form>

<?php
  echo "GET: ", $_GET['BT.123'];
  echo "POST: ", $_POST['BT.123'];
  echo "REQUEST: ", $_REQUEST['BT.123'];
?>

Qu'est ce qui s'affichera si on choisi "inactif" et qu'on soumet le formulaire ?


réponse dans le 1er commentaire

jeudi 29 juillet 2010

jeu
29
juil '10

PHP-FPM (FastCGI Process Manager)

PHP-FPM est disponible dans le dernier php (5.3)... mais qu'est-ce-que c'est ?

PHP-FPM (FastCGI Process Manager) est une alternative à PHP FastCGI avec toute une série d'amélioration.

Principalement utile pour les sites à fort taux d'utilisation.

Plusieurs VHosts avec un UID/GID différent et des PHP.ini différents.

FPM permet de faire tourner plusieurs VHosts avec un UID/GID différent et des PHP.ini différents.

Support de l'upload accéléré

Statistique de base

similaire à mod_status d'apache.

Redémarrage de secours en cas de destruction accidentelle de l'opcode

Un header d'erreur

une config style

[ini]
 fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"

... provoquera l'envoi de cette erreur au lieu d'en "200 tout va bien" avec une page blanche.

amélioration de la gestion des processus en cas de graceful stop/start

En pratique ca permet de prendre en compte une nouvelle config qui nécessite un redémarrage sans interrompre ce qui avait commencé avec l'ancienne configuration.

Journalisation des scripts lents

avec

[xml]
    <value name="request_slowlog_timeout">5s</value>
    <value name="slowlog">logs/slow.log</value>

donnera

[log]
 Sep 21 16:22:19.399162 pid 29715 (pool default)
 script_filename = /local/www/stable/www/catalogue.php 
 [0x00007fff23618120] mysql_query() /srv/stable/common/Database/class.MySQLRequest.php:20 
 [0x00007fff23618560] getResult() /srv/stable/common/Database/class.Facade.php:106 
 [0x00007fff23618aa0] query() /srv/stable/common/mysite.com/ORM/class.UsersMapper.php:99 

Journalisation de Stdout & stderr

fastcgi_finish_request()

une fonction spéciale pour clôturer la connexion avec le client, mais continuer un traitement php à découvrir en détail ici

Autres points

  • PHP-FPM est compatible avec ZendOptimizer

à lire aussi

Notes

[1] Qui, le temps de rédiger et publier cet article, a déjà été retravaillée. C'est la magie wikipedia

mercredi 28 juillet 2010

mer
28
juil '10

Utiliser Zend_Log

Allez on va essayer d'utiliser Zend_log convenablement.

L'idée c'est de découper les moments de décisions.

  1. J'écris mon code je décide de journaliser un message ou des infos
  2. Je gère mes journaux, je décide où va tel ou tel message.
  3. Je gère plusieurs staging, je change le comportement des mes dispatching
  4. Je change le format de stockage de mon journal, je décide comment disposer des informations reçues
  5. Je décide où je lis/récupère mes messages.

Julien débroussaille Zend_log dans sa Présentation du Zend Framework et une liste de tuto permet de compléter

J'écris mon code je décide de journaliser un message ou des infos

Pendant que je code ma réflexion doit se limiter à

  1. quel message envoyer
  2. quelles infos complémentaire envoyer
  3. quelle gravité/sévérité/catégoriser de message j'envoie.
<?php 
$log->info('Hello log');
?>

ajoutons une info

<?php 
$log->info('Hello log je suis à la ligne ' . __LINE__);
?>

Bon là on a envoyé le message

Je gère mes journaux, je décide où vont les messages.

Ca se passe plutôt dans le script. On prépare un objet ($log). qui sera utilisé par la suite dans le code mais on va commencer à lui dire que faire de ces messages qui remontent.

<?php 
$log = new Zend_Log();
?>

Première chose (évidente) assigner les writers (les scribes).

<?php 
$redacteur = new Zend_Log_Writer_Stream('/repository/des/ficher.log');
$log ->addWriter($redacteur);
?>

là c'est dans un un fichier mais "stream" permet aussi un accès plus large,

<?php 
$redacteur = new Zend_Log_Writer_Stream('php://output');
?>

Et on a pas que "stream", ca peut-être aussi

  • dans une base de donnée -> Zend_Log_Writer_Db,
  • dans firebug -> Zend_Log_Writer_Firebug,
  • dans un email -> Zend_Log_Writer_Mail,
  • dans un mock -> Zend_Log_Writer_Mock
  • dans syslog -> Zend_Log_Writer_Syslog
  • dans le néant ... (si le temps du développement ou de tests intensifs, vous ne voulez pas polluer vos logs, redirigez les un temps dans null -> Zend_Log_Writer_Null

//php <?php

$redacteur = new Zend_Log_Writer_Null;

?> ///

et si ca ne me plait pas je peux faire mon scribe en partant de Zend_Log_Writer_Abstract

je décide où va tel ou tel message.

Si c'est pour mettre la même chose partout ce n'est pas spécialement intéressant.

On va donc filtrer les messages à envoyer à chaque scribe. (rédacteur dans la doc)

Pour ca on a 4 outils

  • Zend_Log_Filter_Interface
  • Zend_Log_Filter_Message
  • Zend_Log_Filter_Priority
  • Zend_Log_Filter_Suppress

Je change le format de stockage de mon journal, je décide comment disposer des informations reçues

La façon dont on écrit chaque message est un format "par défaut" mais il peut être redéfini

  • Zend_Log_Formatter_Firebug
  • Zend_Log_Formatter_Interface
  • Zend_Log_Formatter_Simple
  • Zend_Log_Formatter_Xml

En utilisant cela vos pourrez

Tags