Archives du tag: php

Développement Mac OS X Web

Le développement web sur Mac

Un rapide article pour vous présenter les différents outils vous permettant d’être rapidement opérationnel pour le développement web sur Mac OS X.

Apache / PHP / Ruby On Rails / MySQL

Concernant Apache, il faut savoir que le serveur est déjà installé d’origine sur le Mac, il y a juste à le configurer dans les options de partage. Il en va de même pour PHP 5 et Ruby.

Pour installer Ruby On Rails, gem sera votre allié.

Pour ce qui est de MySQL, ce n’est guère plus compliqué : vous trouverez la version serveur sur le site officiel. Je vous conseille également l’outil MySQL Workbench qui est très bien fait pour gérer ses bases de données.

L’éditeur TextMate

L’éditeur ViM est intégré à Mac OS X. Cependant, je ne suis pas certain qu’il satisfasse tout le monde.

Personnellement, j’utilise TextMate. Il coûte 45 € mais il est très performant. On peut le tester pendant 30 jours gratuitement.

Son gros avantage est qu’il est généraliste et intègre de nombreux Bundles, et certains se trouvent également sur le web : ActionScript, PHP, Apache, JavaScript, HTML, CSS, Git, Subversion, SQL, Prototype / Script.aculo.us, JQuery, JQTouch,  Ruby On Rails, SproutCore, XML, Perl, Cake PHP, Python… Et ça, uniquement pour les langages web.

Il permet par exemple de compresser le JavaScript, déboguer le code, avoir une auto-complétion efficace.

CyberDuck

Une fois que l’on a testé le code localement, on souhaite bien entendu l’envoyer sur un serveur. CyberDuck permet de gérer correctement tout type de serveur. Il est relativement puissant et regorge de fonctionnalités et de protocoles. (FTP, FTPS, SSH, ..)

Il est disponible en version gratuite (donation optionnelle) ou payante si le logiciel convient. ( 18,99 € sur le Mac App Store )

Synchronisation FTP / SSH avec MacFusion

Pouvoir éditer le code avec TextMate en sélectionnant les fichiers dans CyberDuck, c’est bien.

Pouvoir accéder au projet complet dans un répertoire donnée synchronisé avec le serveur, c’est mieux !

Pour cela, installez MacFUSE.

Ensuite, installez Macfusion.

Et c’est parti, vous pouvez synchroniser comme vous voulez n’importe quel répertoire en montant le répertoire distant localement.

Le débogage

Les différents navigateurs intègrent chacun leurs outils de débogage.

Concernant Safari, le navigateur par défaut de Mac OS X, vous pouvez afficher le menu Développement en passant par les préférences avancées.

Par exemple, grâce à l’inspecteur web (qui s’affiche justement via le menu développement), vous pouvez voir comment sont gérées les ressources, comment est organisée la hiérarchie de votre page, vous pouvez également entrer du code javascript à la volée… c’est vraiment très pratique.

Tester les services web

Souvent, nous avons accès à des services web permettant d’exploiter telle ou telle ressource. Cependant, il est souvent bien difficile de les tester.

Il y a bien entendu l’outil curl, accessible en ligne de commande, qui permet d’effectuer des tests complets, mais qui reste très austère.

Personnellement, j’utilise HTTP Client, disponible pour 1,59 € sur le Mac App Store. Il permet d’effectuer des tests rapidement et de voir les données HTTP brutes, le tout dans une interface graphique simple mais efficace.

RapidWeaver : l’éditeur WYSIWYG

RapidWeaver est disponible sur le Mac App Store pour 39,99 € et vous permet de concevoir très rapidement des sites web, sans connaissances techniques.

Pour les applications web

Le kit de développement fourni avec XCode intègre Dashcode, qui permet de concevoir visuellement des applications web pour Mac, iPhone et iPad.

MobDis, disponible gratuitement sur le Mac App Store, permet de concevoir des applications web également.

Share
Développement

xml_encode() : le XML facile

Les développeurs PHP vont certainement adorer cette fonction.

Elle permet d’encoder un tableau (à indexes ou pas) de manière efficace. Elle est basée sur un autre code qui ne fonctionnait malheureusement pas très bien.
Les CDATA sont également automatiquement insérés au besoin.
Quand il n’y a pas d’index, les données ressortent sous l’intitulé entry et la racine du document sera toujours entries.

function xml_encode($mixed, $domElement = NULL, $DOMDocument = NULL) {     if (is_null($DOMDocument)) {         $DOMDocument = new DOMDocument;         $DOMDocument->formatOutput = true;   		$rootNode = $DOMDocument->createElement('entries'); 		$DOMDocument->appendChild($rootNode);           xml_encode($mixed, $rootNode, $DOMDocument);           echo @$DOMDocument->saveXML();     } else {         if (is_array($mixed)) {             foreach ($mixed as $index=>$mixedElement) {                 if (is_int($index)) { 					$nodeName = 'entry'; 				} else { 					$nodeName = $index; 				} 				$node = $DOMDocument->createElement($nodeName); 				$domElement->appendChild($node); 				xml_encode($mixedElement, $node, $DOMDocument); 			}         } else { 			// TODO: test if CDATA if needed 			$new_node = $DOMDocument->createTextNode($mixed);               $domElement->appendChild($new_node);         }     } }

On l’utilise comme json_encode().

Par exemple :

<?php   header('Content-Type: text/xml');   function xml_encode($mixed, $domElement = NULL, $DOMDocument = NULL) {     if (is_null($DOMDocument)) {         $DOMDocument = new DOMDocument;         $DOMDocument->formatOutput = true;   		$rootNode = $DOMDocument->createElement('entries'); 		$DOMDocument->appendChild($rootNode);           xml_encode($mixed, $rootNode, $DOMDocument);           echo @$DOMDocument->saveXML();     } else {         if (is_array($mixed)) {             foreach ($mixed as $index=>$mixedElement) {                 if (is_int($index)) { 					$nodeName = 'entry'; 				} else { 					$nodeName = $index; 				} 				$node = $DOMDocument->createElement($nodeName); 				$domElement->appendChild($node); 				xml_encode($mixedElement, $node, $DOMDocument); 			}         } else { 			// TODO: test if CDATA if needed 			$new_node = $DOMDocument->createTextNode($mixed);               $domElement->appendChild($new_node);         }     } }   $entree[0] = "texte";   for ($i = 0;$i < 50;$i++) { 	$entree[$i]['nom'] = "texte pour nom ${i}"; 	$entree[$i]['valeur'] = "texte pour valeur ${i}";   	$donnes['debut'] = 0; 	$donnes['fin'] = 100; 	$entree[$i]['donnees'] = $donnes;   	for ($j = 0;$j < 5;$j++) { 		$liste[$j] = "liste ${j}"; 	}   	$entree[$i]['liste'] = $liste;   	$entree[$i]['xml'] = "donnees avec <a>balise xml</a>"; }   echo xml_encode($entree);   ?>

Affichera :

<?xml version="1.0"?> <entries>   <entry>dexte</entry>   <entry>     <nom>texte pour nom 1</nom>     <valeur>texte pour valeur 1</valeur>     <donnees>       <debut>0</debut>       <fin>100</fin>     </donnees>     <liste>       <entry>liste 0</entry>       <entry>liste 1</entry>       <entry>liste 2</entry>       <entry>liste 3</entry>       <entry>liste 4</entry>     </liste>     <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>   </entry>   <entry>     <nom>texte pour nom 2</nom>     <valeur>texte pour valeur 2</valeur>     <donnees>       <debut>0</debut>       <fin>100</fin>     </donnees>     <liste>       <entry>liste 0</entry>       <entry>liste 1</entry>       <entry>liste 2</entry>       <entry>liste 3</entry>       <entry>liste 4</entry>     </liste>     <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>   </entry>   <entry>     <nom>texte pour nom 3</nom>     <valeur>texte pour valeur 3</valeur>     <donnees>       <debut>0</debut>       <fin>100</fin>     </donnees>     <liste>       <entry>liste 0</entry>       <entry>liste 1</entry>       <entry>liste 2</entry>       <entry>liste 3</entry>       <entry>liste 4</entry>     </liste>     <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>   </entry>   ... </entries>

Et voilà !

Share