Programmes en PHP sans serveur web (WinBinder et Bamcompile)

Comme vous le savez déjà sûrement, le langage de programmation PHP est orienté WEB. Afin de pouvoir le faire fonctionner il faut au préalable avoir installé un serveur web (Apache 2) avec l'extension PHP. Désormais, il est possible d'utiliser ce langage pour créer des applications diverses sans utiliser de serveur comme vous le feriez en C mais en profitant de la simplicité de PHP.

En effet, WinBinder est un logiciel permettant de générer très simplement une interface graphique grâce à l'API Windows. Il dispose de plus d'un assistant de création pour les fenêtres grâce auquel vous pourrez réaliser en 5 minutes une interface graphique. A la suite de cela il ne vous restera plus qu'a écrire et appeler vos fonctions à partir des éléments de celle-ci.

Cependant, afin de pouvoir interpréter ce type de scripts, il vous est obligé d'avoir installer WinBinder sur votre poste. C'est donc à ce stade que vous pourrez utiliser Bamcompile pour compiler vos scripts en incluant les dll utilisées pour générer un fichier exécutable et diffuser votre programme à la manière de tout autre application programmée en C ou C++ par exemple.

Des exemples sont d'ailleurs fournit avec ce compilateur pour comprendre comment il fonctionne et vous montrer ce qu'il permet de faire.

Néanmoins, petit bémol pour ces logiciels, ils ne permettent pas encore d'utiliser PHP 5. En effet, vous serez obliger de programmer dans la version 4 de ce langage car même si vous pouvez utiliser la 5 avec WinBinder, Bamcompile vous limitera à la 4.

Pour plus d'informations, vous pouvez vous rendre sur les sites respectifs de ces outils :

Site web de WinBinder
Site web de Bamcompile

Voici un petit programme rapide permettant d'illustrer ce que vous pouvez réaliser.

    1 - Programme

Script généré par "WinBinder Form Editor" (vous pouvez exporter ce code PHP en faisant "File/Export PHP Code...". Cependant, cela sera fait automatiquement si vous sauvegardez votre projet dans cet éditeur.

Fichier "hello.form.php" (il vous suffit de le renommer en hello.form;phpw pour le rendre exécutable grâce à WinBinder) :

<?php
/*******************************************************************************

WINBINDER - form editor PHP file (generated automatically)

*******************************************************************************/

// Control identifiers

if(!defined('IDC_PUSHBUTTON1001')) define('IDC_PUSHBUTTON1001', 1001);
if(!defined('IDC_PUSHBUTTON1002')) define('IDC_PUSHBUTTON1002', 1002);

// Create window

$winmain = wb_create_window(null, AppWindow, '(Empty Form)', WBC_CENTER, WBC_CENTER, 270, 97, 0x00000000, 0);

// Insert controls

wb_create_control($winmain, PushButton, 'Afficher le texte', 20, 20, 90, 25, IDC_PUSHBUTTON1001, 0x00000000, 0, 0);
wb_create_control($winmain, PushButton, 'Quitter', 150, 20, 90, 25, IDC_PUSHBUTTON1002, 0x00000000, 0, 0);

// End controls

?>

Nous allons maintenant rajouter ce dont nous avons besoin pour permettre au programme de fonctionner correctement. La variable APPNAME permet de définir le nom de l'application et donc le nom qui sera afficher dans la barre de titre de la fenêtre :

define("APPNAME", "Hello World");

Ajout d'un label pour le copyright ;) :

if(!defined('IDC_COPYRIGHT')) define('IDC_COPYRIGHT', 1003);
wb_create_control($winmain, Label, 'SlayerFromHell 2007 - '.date('Y').' ©', 135, 80, 97, 15, IDC_COPYRIGHT, 0x00000020, 0, 0);

On assigne la fenêtre principale à sa fonction :

wb_set_handler($winmain, "process_main");

Création de la boucle principale permettant de laisser la fenêtre active tant que le signal de fermeture n'est pas reçu :

wb_main_loop();

Définissions de la fonction principale :

function process_main($window, $id){
}

A partir de cet instant vous êtes prêt à écrire votre programme.

Voici le contenu de mes fichiers :

  • Fichier hello.form.phpw
<?php

/*******************************************************************************

WINBINDER - form editor PHP file (generated automatically)

*******************************************************************************/

/*******************************************************************************

Fichier réalisé par SlayerFromHell pour illustrer le fonctionnement de WinBinder

*******************************************************************************/

include('include\winbinder.php'); //Il faut toujours pointer le fichier contenant les fonctions de WinBinder
include('fonctions.php');

//Nom de l'application (titre de la fenêtre)
define("APPNAME", "Hello World");

// Control identifiers

if(!defined('IDC_PUSHBUTTON1001')) define('IDC_PUSHBUTTON1001', 1001);
if(!defined('IDC_PUSHBUTTON1002')) define('IDC_PUSHBUTTON1002', 1002);
if(!defined('IDC_COPYRIGHT')) define('IDC_COPYRIGHT', 1003);

// Create window

$winmain = wb_create_window(null, AppWindow, APPNAME, WBC_CENTER, WBC_CENTER, 270, 97, 0x00000000, 0);

// Insert controls

wb_create_control($winmain, PushButton, 'Afficher le texte', 20, 20, 90, 25, IDC_PUSHBUTTON1001, 0x00000000, 0, 0);
wb_create_control($winmain, PushButton, 'Quitter', 150, 20, 90, 25, IDC_PUSHBUTTON1002, 0x00000000, 0, 0);
wb_create_control($winmain, Label, 'SlayerFromHell 2007 - '.date('Y').' ©', 104, 55, 160, 15, IDC_COPYRIGHT, 0x00000020, 0, 0);

// End controls



//Code rajouter pour faire fonctionner le programme
//On assigne la fenêtre principale à sa fonction
wb_set_handler($winmain, "process_main");

//On entre dans la boucle principale
wb_main_loop();

//Définissions de la fonction principale
function process_main($window, $id){
	switch($id){
		case IDC_PUSHBUTTON1001:
			afficheMessage($window);
			break;
		case IDC_PUSHBUTTON1002:
		case IDCLOSE:				//La constante IDCLOSE est prédéfinie par WinBinder
			wb_destroy_window($window);
			break;
	}
}
?>
  • Fichier fonctions.php
<?php
/*******************************************************************************

Fichier réalisé par SlayerFromHell pour illustrer le fonctionnement de WinBinder

*******************************************************************************/

function afficheMessage($myWindow){
	wb_message_box($myWindow, "Hello World !!!", APPNAME);
}

?>

J'aurais pu mettre la ligne "wb_message_box($window, "Hello World !!!", APPNAME);" directement dans la fonction principale mais cela permet de voir plus en profondeur le fonctionnement de l'outil.

    2 - Compilation

Pour compiler votre programme, il vous faut créer une arborescence incluant toute les dll dont vous avez besoin. Dans mon cas j'ai un répertoire "test" contenant un répertoire "hello" et les fichiers "compile.bat" ainsi que "hello.bcp" Le répertoire hello contient les sources de mon programme ainsi que répertoire "include" avec les dll winbinder (j'en ai laissé quelques unes dont je ne me sert pas pour l'exemple).

  • Fichier compile.bat

Indique le chemin vers bamcompile et le fichier d'instruction à utiliser.

C:\bamcompile1.21\bamcompile hello.bcp
pause
  • Fichier hello.bcp

Contient les paramètres nécessaires à la compilation des sources

; Bamcompile example project file
; Nom du fichier principal
mainfile hello.form.phpw
; Nom du fichier généré
outfile Hello.exe
; Indique si le fichier doit être compressé (en général toujours positionner pour ne pas obtenir un exécutable trop gros)
compress
; L'exécutable final est une application Windows (sans cela vous aurez une fenêtre d'invite de commande en arrière plan)
windowed
; Nom du fichier d'icône
icon hello\icone.ico
; Nom répertoire à incorporer
embed hello
; Emplacement de la dll WinBinder
extension hello\php_winbinder.dll

Vous pouvez télécharger un fichier ZIP contenant mon programme ici.

Commentaires

1. Le jeudi, septembre 4 2008, 15:37 par Epoc

Cool merci ^^

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet