PHP / ASP.NET

Quand il s’agit de développer pour le Web aujourd’hui, Main en arriere fleche dessinee 318 51824on n’a que l’embarras du choix. Beaucoup de méthodes reposent sur un préprocesseur - c’est-à-dire l’intégration de code dans les pages HTML avec des balises spéciales qui signalent la présence de ce code à un préprocesseur, et lui disent qu’il doit en faire quelque chose de particulier. De manière assez comparable à un CGI, ce code est exécuté sur le serveur, et renvoie un certain contenu, qui se présente comme une page HTML résultante renvoyée au browser. Tant le langage interprété Open Source PHP que les langages liés à l’architecture ASP.NET de Microsoft appartiennent à cette catégorie ; les pages Java Server (JSP) et Perl/Mason fonctionnent aussi de cette façon.

Dans cet article je mettrai l’accent sur PHP, la technologie qu’Oracle a retenue pour l’incorporer à ses produits, et sur ASP.NET. Je comparerai les différents points forts et points faibles de chacun, et discuterai en particulier ces domaines qui pourront vous aider à décider lequel retenir pour votre projet de développement. Il y a bien des facteurs à prendre en considération, et le meilleur choix n’est pas nécessairement le même pour tous les projets. Vous trouverez en guise de conclusion une comparaison point à point en termes de prix, vitesse et efficacité, sécurité, portabilité sur plusieurs plate-formes, et les avantages d’une solution open source.

 

Qu’est-ce qu’ASP.NET ?

 

Dernière incarnation d’ASP, ASP.NET n’est pas tout à fait compatible avec les versions précédentes d’ASP, car il s’agit d’une réécriture complète du logiciel. La technologie précédente d’ASP a beaucoup plus en commun avec PHP qu’avec ASP.NET, qui est un système complet de développement d’applications Web. L’une des principales caractéristiques de ce modèle est la souplesse de pouvoir choisir votre langage de programmation. ASP.NET fonctionne aussi bien avec des langages interprétés tels que VBScript, JScript, Perlscript et Python, que des langages compilés tels que VB, C#, C, Cobol, Smalltalk et Lisp. Le nouveau système utilise le moteur CLR (Common Language Runtime) ; votre langage source est compilé en p-code Microsoft Intermediate Language, qui est ensuite exécuté par le CLR.

Cet environnement apporte également ce qui est nécessaire à une vraie programmation orientée objet, et supporte d’authentiques héritage, polymorphisme et encapsulation. La bibliothèque de classes .NET est organisée en classes de base, spécialisées en tâches particulières telles que manipulation de XML ou d’images, et dont on peut en dériver d’autres,.

Outre le langage de programmation et la méthodologie, l’accès aux bases de données est un point fondamental. Quand vous programmez en ASP.NET, l’intégration avec les bases de données peut être effectuée à travers ODBC, qui fournit un ensemble cohérent de fonctions à appeler pour accéder à votre base cible.

 

Points forts et points faibles

 

L’atout principal d’ASP.NET est clairement sa conception et son implémentation bien pensés. C’est le rêve du programmeur objet, avec une grande souplesse de langage et le support de fonctionnalités objet sophistiquées. Dans ce sens, il est véritablement interopérable avec les connaissances existantes de vos programmeurs.

Une autre force d’ASP.NET est l’environnement de développement. Par exemple, les développeurs peuvent utiliser WebMatrix, un outil libre, Visual Studio .NET, ou divers outils Borland tels que Delphi et C++ Builder. Visual Studio, par exemple, permet le positionnement de points d’arrêt, la trace de sections du code, et le contrôle de la pile d’appels. Tout bien considéré, c’est un environnement de déboguage sophistiqué. Il est certain qu’une quantité d’offres tierces d’environnements de développement intégrés pour ASP.NET vont également apparaître sur le marché.

Mais ce que vous gagnez en robustesse, vous le payez en efficacité. ASP.NET coûte cher en ce qui concerne la consommation mémoire et le temps d’exécution, ce qui est dû en grande partie à l’exécution du p-code plutôt que d’un code natif. Pour les applications Web, ces limitations peuvent être un problème sérieux, parce que sur le Web votre application est susceptible de devoir servir des milliers et des milliers d’utilisateurs par seconde. La consommation de mémoire peut également devenir problématique sur votre serveur Web.

 

Qu’est-ce que PHP ?

 

PHP est un langage interprété basé sur le principe du prétraitement des pages HTML. Quand le préprocesseur PHP incorporé à votre serveur Web remarque une balise PHP du style de ce qui suit, le moteur PHP est invoqué pour exécuter le code :


<?php
du code ici
?>

PHP sera vite familier à tous les programmeurs qui ont travaillé avec des langages impératifs ; vous remarquerez des similarités de syntaxe avec Perl, C et Java. Strictement parlant, Java est un langage de programmation impératif, mais il utilise également des constructions et des concepts orientés objet. PHP fait des emprunts à cette structure là où c’est pratique, mais ce n’est pas un pur langage orienté objet.

Dans la discussion d’ASP.NET ci-dessus, j’ai mentionné le driver ODBC, et comment les applications pouvaientt être développées avec une couche ’base de données’ abstraite. En PHP, on peut aussi utiliser ODBC pour parler aux bases de données, et par conséquent vous avez une riche collection de bases de données suppportées dans laquelle piocher. Il existe également des drivers natifs pour MySQL, Oracle et Postgres. De plus, si vous vous connectez à Oracle, une bibliothèque OCI8 spécifique vous fournit un accès à Oracle encore plus riche en fonctionnalités, vous permettant d’utiliser des types tels que LOB, BLOB, CLOB et BFILE.

Vous êtes en droit de demander, à ce point, "Pourquoi donc des bibliothèques spécifiques d’une base de données sont-elles vantées comme des fonctionnalités de PHP ?". S’abstraire, ou être indépendant, des bases de données est une caractéristique intéressante si l’on cherche à écrire une application qui ’parle’ à plusieurs bases de données différentes ou qui peut être portée facilement vers une autre base de données - lorsque l’on passe du développement à la production, par exemple. Et il est vrai que ce sont des soucis et des considérations légitimes.

Mais, comme Tom Kyte le souligne dans son dernier livre, Effective Oracle by Design (Oracle Press), la dépendance d’une base de données devrait être le véritable but parce qu’il maximise votre investissement dans cette technologie. Si vous utilisez un accès générique à Oracle, que ce soit à travers ODBC ou la bibliothèque DBI de Perl, vous vous privez des fonctionnalités que n’ont pas les autres bases de données. Qui plus est, l’optimisation des requêtes est différente d’une base à l’autre.

Zend Technologies, un éditeur de logiciel qui contribue de manière significative à PHP, a créé un produit commercial qui est un environnement de développement appelé Zend Studio qui inclut un débogueur sophistiqué, un profiler et autres fonctionnalités. Le même éditeur a également développé un produit gratuit, Zend Optimizer, qui, combiné à Zend Encoder, compile le code PHP pour en améliorer les performances. D’autres produits commerciaux existent, tels que Zend Performance Suite, qui peut mettre en cache des pages PHP précompilées, améliorant encore plus les performances globales, dans des proportions impressionnantes.

 

Points forts et points faibles

 

PHP 4 a encore quelques manques, y compris l’absence de gestion des exceptions, mécanisme de gestion d’erreurs basé sur les événements qui interrompt le cours normal d’un programme et débranche le code vers une section spéciale de gestion d’erreur. Java dispose de ce mécanisme pour la gestion d’erreur, ainsi que C++ via la syntaxe try, catch et throw. Vous pouvez bien sûr gérer les erreurs en PHP, mais la structure n’est pas standardisée, ce qui fait que les programmeurs sont livrés à eux-mêmes pour l’implémentation de la gestion d’erreur, d’où moins de cohérence et une propension à réinventer la roue.

Une autre faiblesse de PHP est son insensibilité à la casse dans les noms de fonctions. Des programmeurs peuvent trouver cette caractéristique ennuyeuse, bien que cela ne soit pas un défaut majeur.

Je serai cependant plus sévère avec le modèle objet de PHP. PHP n’a pas été conçu comme un langage orienté objet. Certaines de ces caractéristiques sont des additions ultérieures, même si des efforts ont été faits pour assurer une compatibilité avec PHP 3, ce qui fait que l’on se retrouve un peu entre deux chaises. A dire vrai, un certain nombre de faiblesses ont été corrigées en PHP 5. A suivre.

PHP compense par une véritable excellence dans certains domaines ce qu’il laisse à désirer par ailleurs. Rien à redire sur son prix, vous n’avez pas à vous soucier des questions de licence. C’est de l’Open Source, également, ce qui veut dire qu’il y a toute une communauté qui garde l’oeil rivé sur les développements, identifiant les bogues et veillant à ce qu’ils soient corrigés. Et s’il y a quelque chose qui ne vous plaît pas, vous pouvez aller bricoler dans le code. De plus, PHP fonctionne nativement avec Apache : il peut être compilé comme module ou incorporé directement dans le binaire Apache.

Fonctionner avec Apache veut dire qu’avec PHP vous pouvez tirer parti de tous les investissements déjà effectués en termes de serveurs, parce qu’Apache tourne sur Windows, Linux, Solaris, et bon nombre d’autres systèmes Unix. Compte-tenu de son historique, le choix d’Apache est aussi bon en terme de sécurité. Finalement, PHP a moins de couches logicielles, ce qui veut dire que le serveur exécute moins de code pour analyser et exécuter votre page PHP, d’où une meilleure utilisation de la mémoire et une exécution plus rapide.

 

Quoi de neuf dans PHP 5 ?

 

La quatrième release béta de PHP 5 est sortie à la fin de décembre 2003, et la liste des modifications montre clairement que beaucoup de bogues ont été identifiés et corrigés. Même à l’état béta, c’était une version qui méritatit définitivement qu’on s’y arrête pour en étudier toutes les nouvelles fonctionnalités et différents progrès.

Les principaux apports de PHP 5 sont dans les domaines de la gestion d’exception et un nouvel objet qui introduit des fonctionnalités apportant une véritable programmation orientée objet à PHP. La gestion des exceptions était certainement l’un des manques les plus notables de PHP 4, et son addition à PHP 5 est sans conteste in signe de maturité. La gestion des exceptions signifie que vous avez dans votre logiciel une manière standard, définie dans le langage, de gérer les erreurs. Vous n’avez qu’à utiliser les méthodes try, catch et throw, et votre code PHP devient plus robuste et plus net.


<?php

class blue {

 function openFile ($inFile) {
   if (file_exists ($inFile)) {
     # code pour ouvrir le fichier ici
   } else {
     throw new Exception
       ("Erreur d'ouverture du fichier: $inFile");
   }
 }
}

$blueObj = new blue ();

try {
 $blueObj->openFile ('/home/shull/file.txt');

} catch (Exception $myException) {
 echo $myException->getMessage ();

 # reste du code de gestion d'exception ici
}

# reste des methodes de blue ici

?>

Le nouveau modèle objet a un certain nombre d’impacts positifs sur les programmes écrits en PHP. En PHP 4, quand un objet était passé à une fonction ou méthode, il l’était par valeur, à moins que vous n’indiquiez explicitement à PHP autre chose. Ce mécanisme signifiait que cet objet, toutes les structures de données en mémoire, devait être copié, une étape gourmande en mémoire et qui rend l’accès lent et cahotique. Dans PHP 5, les objets sont toujours passés par référence.

Les nouvelles fonctionnalités objet de PHP5, y compris constructeurs et destructeurs, sont dignes d’attention. Comme avec C++ et Java, ils fournissent une manière standard de créer l’objet, d’allouer la mémoire et d’initialiser ce qui doit l’être via une méthode constructeur, puis d’effectuer le nettoyage avec une méthode destructeur.

PHP 5 apporte aussi un contrôle plus subtil des méthodes et des variables dans vos classes. En PHP 4, tout était public : vous pouviez accéder aux variables de vos classes depuis l’extérieur de la classe ou dans des classes dérivées. Avec PHP 5, vous pouvez toujours rendre variables et méthodes publiques, mais vous pouvez également les définir comme privées, de manière à ce qu’elles ne soient accessibles qu’à l’intérieur de la classe elle-même. Une troisième option est de les définir protégées, ce qui ne les rend visibles que depuis la classe ou une sous-classe.

De plus, PHP 5 introduit une spécification de type, ou un meilleur typage. Quand vous passez un objet à une fonction, PHP peut vérifier qu’il est du bon type et émettre une erreur si la vérification échoue.

Des fonctionnalités supplémentaires existent, telles que les méthodes et variables statiques ou les classes abstraites, aussi reportez vous à la documentation pour avoir tous les détails.

 

Comparaison de la Sécurité

 

ASP.NET a officiellement pour prérequis l’utilisation d’IIS. Malheureusement, IIS traîne derrière soi une longue histoire de vulnérabilités, ce qui rend beaucoup d’administrateurs hésitants à l’utiliser pour la gestion de leur site Web. Savoir si ces faiblesses sont imputables à Microsoft ou au fait qu’IIS excite les hackers comme un chiffon rouge excite les taureaux n’est pas la question : ces systèmes ont souvent été attaqués et compromis. PHP tourne également sur Apache, qui est rapide, Open Source, et a en matière de sécurité un passé honorable. Comme je l’ai déjà mentionné, Apache fonctionne également sur de nombreux systèmes.

Si vous envisagez d’utiliser ASP.NET mais souhaitez employer Apache comme frontal pour Internet, vous avez heureusement la chance de disposer de quelques possibilités. Tout d’abord, vous pouvez utiliser Apache pour relayer des requêtes à IIS tournant de manière interne sur une autre machine. Apache gère alors un contenu statique et transmet le contenu aspx au serveur IIS, qui est invisible depuis l’Internet.

Toutefois, si vous voulez héberger ASP.NET avec Apache, une poignée de solutions sont possibles, qui peuvent être ou n’être pas supportées par Microsoft. En dernier recours, il y a le projet Mono de Ximian, qui travaillent au développement d’un module Open Source. Allez voir sur www.go-mono.com <http://www.go-mono.com> pour davantage d’informations.

Exemples d’accès à des bases de données

 

La connexion à une base de données est l’un des premiers traitements que vous envisagerez en PHP ou ASP.NET. La multiplicité des langages parmi lesquels on peut choisir rend l’opération un tout petit peu plus compliquée avec ASP.NET. Bien entendu, ces échantillons de code demanderaient à être inclus dans une page HTML, les classes instanciées, et ainsi de suite. Les informations qui suivent ont pour but de vous donner une idée du style du codage dans chaque cas.

Connexion de PHP 5 à Oracle

 

Voici une classe PHP 5 qui fournit connexion et déconnexion pour Oracle d’une des manières possibles (d’autres drivers, tels qu’ODBC, et des interfaces bases de données génériques peuvent aussi être utilisés) :


class oracle_object {
 protected $theDB;
 protected $user;
 protected $pass;
 protected $db;

 function __construct($u, $p, $d) {
   $this->user = $u;
   $this->pass = $p;
   $this->db = $d;
 }

 function db_open () {
   $theDB  =  @OCILogon($this->user,  $this->pass,  $this->db);
   db_check_errors($php_errormsg);
 }

 function db_close() {
   @OCILogoff($theDB);
   db_check_errors($php_errormsg);
 }

 function __destruct () {
   print ("adieu ...");
 }

}

Connexion d’ASP.NET à Oracle

 

Si vous cherchez à vous connecter à Oracle avec VB.NET (Visual Basic est le langage de programmation .NET par défaut de Microsoft), jetez un coup d’oeil à cet exemple qui vient de MSDN :


Imports System
Imports System.Data
Imports System.Data.OracleClient
Imports Microsoft.VisualBasic

Class Sample

 Public Shared Sub Main()

   Dim oraConn As OracleConnection = New OracleConnection("Data Source=MyOracleServer;Integrated Security=yes;")

   Dim oraCMD As OracleCommand = New OracleCommand("SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER", oraConn)

   oraConn.Open()

   Dim myReader As OracleDataReader = oraCMD.ExecuteReader()

   Do While (myReader.Read())
     Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", myReader.GetInt32(0), myReader.GetString(1))
   Loop

   myReader.Close()
   oraConn.Close()
 End Sub
End Class

Faire le choix

 

Sans supposer que vous penchez côté PHP, je concluerai que ses points forts font bien plus que compenser ses faiblesses (voir le résumé de la Table 1). Tout se ramène à une question de prix, vitesse et efficacité, sécurité, disponibilité dans de nombreux environnements, et caractère ’Open Source’. Sa seule faiblesse est l’absence d’une implémentation du modèle objet réellement pure et parfaite ; cependant, c’est un péché véniel. Bien que la structure du langage soit une aide puissante, au bout du compte la qualité du codage est une question de pratique, d’exécution, de bonnes habitudes, et de discipline.

 

Table 1

  PHP 4 PHP 5 ASP.NET
Coût du logiciel Gratuit Gratuit Gratuit
Coût de la plateforme Gratuit Gratuit $$
Vitesse Bonne Bonne Médiocre
Efficacité Bonne Bonne Médiocre
Sécurité Bonne Bonne Bonne
Plate-forme Bonne Bonne Médiocre (seulement IIS)
Système N’importe lequel N’importe lequel win32 (seulement IIS)
Sources disponibles Oui Oui Non
Exceptions Non Oui Oui
Programmation objet Médiocre Bonne Bonne

 

Prix. Nous ne devons ici pas seulement considérer le coût de l’investissement initial, qui est bien évidemment zéro dans le cas de PHP, mais aussi les coûts d’implémentation, de maintenance et de déboguage. Pour PHP, vous pouvez faire le choix d’investir dans le moteur d’optimisation de Zend. Pour ASP, cependant, vous commencez à payer dès le début, et vous devez remettre la main au portefeuille pour les technologies additionnelles - les bibliothèques de manipulation graphique, par exemple. A long terme, PHP ne va pas vous pousser à passer à la version supérieure ni prélever davantage de paiements de licences. Quiconque a eu à se battre avec un mécanisme de licences complexe sait également que les sociétés dépensent temps et argent rien qu’à vérifier qu’elles ne violent pas les accords de licence. De plus, il y a une différence de temps de réponse dans la correction des bogues. Ceci, bien entendu, se traduit par un écart de temps, qui se traduit à son tour en coûts pour l’ensemble des développements.

Vitesse et efficacité. Comme je l’ai mentionné plus haut, ASP.NET est un cadre de développement vous permettant d’utiliser divers langages de programmation. De plus, sa superbe orientation objet est mise en avant. Tout ceci est parfaitement exact, mais est disponible au détriment de la vitesse. Le prix de ces avantages est l’exécution de beaucoup plus de code pour exécuter une page ASP que vous n’en auriez à exécuter au sein du moteur PHP pour une page PHP équivalente. PHP est le genre de solution bête et méchante, qui ne vise à rien d’autre qu’à l’exécution du travail. Et bien que beaucoup de robustesse lui ait été ajoutée depuis les jours des versions 2.0 et 3.0, il conserve toujours cette approche d’un noyau optimisé pour la vitesse.

La vitesse n’est pas la seule considération. La consommation mémoire est importante aussi..

Sécurité. ASP.NET tourne sur IIS, qui a été compromis un nombre incalculable de fois, comme le rapporte une semaine sur deux la presse informatique. C’est devenu un tel problème qu’en dépit de tout l’investissement marketing pour le promouvoir, beaucoup de professionnels de l’informatique se refusent à risquer la sécurité de leurs réseaux avec un serveur Web IIS. PHP, de son côté, fonctionne avec Apache, qui a un bon historique en termes de vitesse, solidité, et sécurité renforcée. Pour plus d’informations je vous renvoie à www.securityfocus.com <http://www.securityfocus.com>.

Disponibilité dans de nombreux environnements. ASP.NET fonctionne avec IIS et commence à fonctionner avec Apache, qui peut tourner dans des quantités d’environnements. PHP a été conçu pour fonctionner avec Apache depuis le départ, ce qui veut dire que vous avez le choix entre beaucoup de serveurs fiables et qui ont fait leurs preuves.

Open Source. L’Open Source n’est pas qu’une torche philosophique brandie par des programmeurs idéalistes, ou des compagnies désireuses d’effectuer des économies de bout de chandelle sur les coûts de licence. Quand vous tombez sur des bogues dans le logiciel lui-même, la disponibilité du code source peut être une véritable bénédiction.

Dans l’un et l’autre cas, PHP comme ASP.NET, vous avez un grand nombre d’utilisateurs du logiciel, qui peuvent rencontrer à l’occasion un bogue. Avec ASP.NET, ces bogues ont à cheminer à travers un processus bureaucratique pour être reconnus, corrigés, testés, et la correction déployée dans un nouveau patch ou une nouvelle release. Les corrections de PHP, quant à elles, peuvent être obtenues et diffusées rapidement. N’importe qui ayant observé le développement Open Source sait que les nouvelles releases et les patchs sortent au bout de quelques jours, et non semaines ou mois comme avec le logiciel commercial. Et si cela ne va pas assez vite pour vous, vous avez toujours la possibilité de corriger vous-même un problème s’il le faut vraiment.