Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: biblioteka w c - zmienne globalne
Forum PHP.pl > Forum > PHP
lewal
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?
adwol
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.