Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> biblioteka w c - zmienne globalne
lewal
post 17.11.2003, 22:18:36
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 25.05.2003

Ostrzeżenie: (0%)
-----


na potrzeby projektu nad ktorym wlasnie pracuje pisze biblioteke funkcji w c wywolywanych pozniej w php - wszystko dziala chodzi calkiem szybko, ale pojawila sie mala watpliwosc

czy kazdy user bedzie mial osobny komplet zmiennych globalnych w tej bibliotece?
ex. jesli w c bedzie zmienna globalna login wykorzystywana przez rozne funkcje to czy kazdy uzytkownik bedzie mial w niej faktycznie swoj login czy bedzie to jedna wspolna wartosc dla wszystkich?

jesli natomiast dla kazdego bedzie osobna to czy dla jednego uzytkownika tez beda osobne zmienne dla osobnych watkow?
ex. otwieram sobie jedna z podstron - zmienna globalna page_id wstazuje odtad na ta podstrone - niestety strona laduje sie koszmarnie wolno wiec w drugim oknie tej samej przegladarki otwieram inna podstrone - page_id oczywiscie ma nowa wartosc - pytanie tytlko czy page_id z tej pierwszej strony tez zmieni wartosc czy jest tylko `do uzytku` pierwszej podstrony?

i ostatni juz problem jak pozbyc sie tych zmiennych globalnych? typy proste mozna przekazywac przez parametry, ale biblioteka korzysta rownierz z list (wartosci wywietlane na stronie sa zapisane jako lista) i tu potrzebny jest wskaznik - natomiast po przekopaniu manuala do php nie zauwazylem najmniejszej wzmianki o wskaznikach - da sie to jakos obejsc?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
adwol
post 18.11.2003, 03:02:03
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
czy kazdy user bedzie mial osobny komplet zmiennych globalnych w tej bibliotece?

To zależy od tego jaki masz serwer WWW. Jeśli jest bezwątkowy to każdy proces obsługujący jedno żądanie od klienta będzie posiadał swoją kopię zmiennej globalnej, więc nie będą one kolidować ze sobą (przestrzenie pamięci procesów są rozłączne). Ten przypadek obowiązuje również gdy moduł jest wciągany za pomocą funkcji dl().

Jeśli masz serwer wielowątkowy, sprawa się komplikuje. Jeden proces może osbługiwać wtedy wiele żądań i jedna zmienna globalna jest widoczna w każdym wątku. Aby uzyskać zmienne globalne widoczne tylko w jednym wątku musisz wówczas deklaracje swoich zmiennych globalych zawrzeć pomiędzy liniami:
[php:1:1591d26840]<?php
ZEND_BEGIN_MODULE_GLOBALS(modul)
ZEND_END_MODULE_GLOBALS(modul)
?>[/php:1:1591d26840]
dodać taką linię:
[php:1:1591d26840]<?php
ZEND_DECLARE_MODULE_GLOBALS(modul);
?>[/php:1:1591d26840]
oraz później odwoływać się do nich w ten sposób:
[php:1:1591d26840]<?php
TSRMG(modul_globals_id, zend_modul_globals *, zmienna);
?>[/php:1:1591d26840]

Więcej szczegółów znajdziesz w module szkieletowym w dystrybucji php.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 07:56