WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Global variabel i PHP (https://www.wn.se/forum/showthread.php?t=7805)

void 2005-05-07 01:43

Hej,

jag skulle vilja skapa en variabel som alla mina php-sidor ska ha tillgång till. Har aldrig gjort detta i PHP tidigare och efter lite sökande har jag inte hittat nåt svar.

I t ex JSP kan jag ju sätta scope till antingen request, page, session eller application. Det jag är ute efter är alltså det som motsvarar application fast i PHP.


mvh
Marcus

grazzy 2005-05-07 01:55

Det är tyvärr inte helt trivialt, men det går via semaphores
http://docs.php.net/en/ref.sem.html

stakes 2005-05-07 15:33

<?php
session_start();

$variabeln = ”data”;

session_register(”variabeln”);
?>

includera denna i index filen eller något liknande så finns variablen kvar tills användaren stänger ner webrowsern..

eller om du vill döda den själv :P

<?php
session_destroy();
?>


läs mer på php.net

void 2005-05-07 16:04

Citat:

Originally posted by stakes@May 7 2005, 15:33
<?php
session_start();

$variabeln = ”data”;

session_register(”variabeln”);
?>

includera denna i index filen eller något liknande så finns variablen kvar tills användaren stänger ner webrowsern..

eller om du vill döda den själv :P

<?php
session_destroy();
?>


läs mer på php.net

Hur man använder en vanlig sessionsvariabel vet jag. Jag uttryckte frågan lite fel i första stycket, jag är inte ute efter en variabel som alla mina sidor har tillgång till, utan jag vill att alla användare ska ha tillgång till variabeln. Dvs en variabel som alla som använder applikationen har tillgång till, inte bara en person som är fallet med PHP och session.

Ska kika på det grazzy tipsade om, men det verkar inte helt trivialt.

PeterM 2005-05-07 17:09

Har inte haft anledning att testa själv, men mmCache/eAccelerator verkar ha funktioner som går att använda till detta.

Snabbt cut&paste från dokumentationen:

eaccelerator_put($key, $value, $ttl=0)
puts the $value into shared memory for $ttl seconds.

eaccelerator_get($key)
returns the value from shared memory which was stored by eaccelerator_put() or null if it is not exists or was expired.

eaccelerator_rm($key)
removres the $key from shared memory

eaccelerator_gc()
removes all expired keys from shared memory

netflax 2005-05-09 09:20

Hej,

Jag brukar alltid skapa en sida med konstanter som jag alltid inkluderar i alla nya sidor. I dessa konstanter sätter jag upp variabler som jag kommer att behöva runtom på sajten, t.ex. mysql-login etc..

I en ny fil constants.php
Kod:

<?php
define("THE_VARIABLE_NAME", "värdet-här");
?>

På varje ny sida inkluderar jag därefter constants.php och får på så sätt tillgång till alla konstanter.
Kod:

<?php
require("/utils/constants.php");
print THE_VARIABLE_NAME;
?>

Jag har funnit detta vara den smidigaste lösningen.. men smaken är som baken.

fasko 2005-05-09 13:18

netflax's lösning är (mig veterligen) den enda vettiga om du har konstanter.
Är det variabeldags skulle jag ta en titt på om man inte kan använda en databas i kombination med antingen sessionsvariabler eller bara en databas (högre tryck på databasen då dock).

Om de lösningarna av någon anledning inte passar så är nästa lösning jag kommer att tänka på att spara värdet i en fil på nåt bra ställe (t ex variabel.txt). Sedan hämta info från filen när man behöver det.
Jag har inte så mkt erfarenhet av att hämta info från filer, säkerheten omkring o så. Men det går ju ganska fort och lätt att slänga in info i en fil i t ex sessionsvariabler om du behöver värdet ofta.

grazzy 2005-05-09 13:24

Därför använder man sempahorer, det är resurssnålt, effektivt och tillverkat för just den här användningen. Att öppna en fil för att hämta ett värde känns inte särskilt optimalt. Inte heller att köra ett SQL-anrop.

Nåt i stil med detta borde funka:
$resource = sem_get(1); # hitta resurs-id till sempahore 1
shm_put_var($resource, 1, 'ett värde'); # spara 'ett värde' på plats 1 i semaphore 1

Nu kan man i alla andra instanser av programmet använda sig av:
$resource = sem_get(1); # hitta resurs-id till sempahore 1
shm_get_var($resource, 1); # hämta värde 1 från semaphore 1.

Om jag inte förstått något fel. En lite hjälp på vägen iaf.

netflax 2005-05-09 13:50

Smaken är som baken som sagt... den är delad.

Att använda semaforer i ett stort projekt kan lätt bli något svårbegripligt när det helt plötsligt står:

shm_get_var($resource, 654);

Vad är 654 för variabel? Självklart kan man då istället använda:

shm_get_var($resource, DATABASE_PASSWORD);

Men då behöver man har den konstanten på alla sidor, alltså inkluderad från en constants.php eller liknande ;)

Gör vilket du tycker verkar enklast...

grazzy 2005-05-09 13:58

Jag tror inte riktigt du har förstått skillnaden netflax. Heh, om du lagrar ett databaspassword i en semaphore? Den om nåt skulle kunna vara en konstant.

...


Alla tider är GMT +2. Klockan är nu 08:57.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson