Le Mercredi 30 Octobre 2002 19:04, Pascal Perez - LHA a �crit :
> Bonjour,
>
> J'ai un petit probl�me que je n'arrive pas � r�soudre.... j'ai plusieurs
> scripts PHP qui demandent tout le temps les m�me variables et j'aimerais
> faire en sorte qu'elles deviennent des variables d'environnement au m�me
> titre que, par ex., $HOSTNAME ou $MACHTYPE.

Salut,
Tu peu utiliser les fonctionaliters de partage m�moire ipc, ceci te permet de 
cr�er un segment m�moire patageable par plusieurs processus, ces segements 
sont indentifi� par un num�ros.
Pour ceci php propose les fonctions d�crites � la page internet suivante: 
http://www.php.net/manual/fr/ref.sem.php .
Le seul petit probl�me et de trouver un num�ros (cl�s de la memoire) qui n'est 
et ne sera pas utiliser par d'autres applications. Avec php4 > 4.2 tu peus 
utiliser la function ftok sinon faut la faire au pif en regardant les num�ros 
d�j� utiliser avec la commande cat /proc/sysvipc/sh ou ipcs.

J'ai mis un petit example ci dessous qui fonctionne chez moi, il suffit de 
d'appeler le script depuis un explorateur avec optionnelement le parametre 
oper=init pour r�initiliser le conteur ( http://xxxx/xxxx.php?oper=init). Tu 
peus �galement utiliser la commande $php xxxx.php [init] .
Par ailleur rien n'emp�che d'utiliser d'autre langages c (fonctions shmget, 
shmat) pour acceder au m�me segment m�moire mais dans ce cas il faudra  
regarder comment php enregistre ces variables dans le segment memoire.
Naturelement ce segment se volatilise si l'ordi s'arrete ou si tu utilise la 
commande $ipcrm sur le segment mais tu peus faire un petit script appeler au 
shutdown qui sauve la valeur et un autre qui la restore au boot.
A+
Martial

Example de script php4
<?
        // header("Content-Type: text/html; charset=ISO-8859-1");
        // si php >= 4.2 $shmkey = ftok(
        //      $HTTP_SERVER_VARS["SCRIPT_FILENAME"],"smhtest");
        $shmkey = 0x100;
        $shmid = shm_attach ( $shmkey, 100, 0600);
        $shmvarkey = 0;
        if ((isset($argv[1]) && $argv[1] == "init") || 
            (isset($oper) && $oper == 'init')){
                $cnt = 0;
                shm_put_var( $shmid, $shmvarkey, $cnt);
        }
        $cnt = shm_get_var ( $shmid, 0);
        echo "Valeur du compteur global = $cnt<BR>\n";
        $cnt++;
        shm_put_var( $shmid, $shmvarkey, $cnt);
        shm_detach ( $shmid ); // optionnel car le detach se fait d'office
                                           // quand le process s'arrete.
?>

-- 
MuTECH
Martial Guex
Rue des Alpes
1452 Les Rasses
Switzerland

Tel: +41 (24) 454 46 35
GSM: +41 79  473 16 39
Fax: +41 (24) 454 46 32
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.

Répondre à