[PHP-DEV] Global variables in extensions
Hi! I have a problem that is driving me crazy. I need to allocate some memory that will be available throughout a session. Firstly a database connection is established, but at the same time I read all relevant information about the db (records, attributes, typedeclarations and such and such). This is a rather lengthy process so I am trying to store these information in memory for later retrieval. This is the part, that doesn't work. Whenever a new page is loaded the information is lost. I have tried using static (global) variables, and I have tried the ZEND_BEGIN/END_MODULE_GLOBALS. About the ZEND_BEGIN/END... approach: the std. skeleton defines these macros: #ifdef ZTS #define RAIMAG(v) (raima_globals-v) #define RAIMALS_FETCH() php_raima_globals *raima_globals=ts_resource(raima_globals_id) #else #define RAIMAG(v) (raima_globals.v) #define RAIMALS_FETCH() #endif How do I utilize ZTS? Where is raima_globals_id defined? I do set a variable in PHP_MINIT_FUNCTION that variable is always set! But any other variables from the ZEND_BEGIN/END_MODULE_GLOBALS section (phew) that is set later do not remember their value??? Why is that? Thanks Thomas -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP-DEV] Global variables in extensions
How are you loading your extension? If you're using dl(), forget about retaining any type of information in between requests... You must use extension= in php.ini Zeev At 11:58 30/3/2001, Thomas Wentzel wrote: Hi! I have a problem that is driving me crazy. I need to allocate some memory that will be available throughout a session. Firstly a database connection is established, but at the same time I read all relevant information about the db (records, attributes, typedeclarations and such and such). This is a rather lengthy process so I am trying to store these information in memory for later retrieval. This is the part, that doesn't work. Whenever a new page is loaded the information is lost. I have tried using static (global) variables, and I have tried the ZEND_BEGIN/END_MODULE_GLOBALS. About the ZEND_BEGIN/END... approach: the std. skeleton defines these macros: #ifdef ZTS #define RAIMAG(v) (raima_globals-v) #define RAIMALS_FETCH() php_raima_globals *raima_globals=ts_resource(raima_globals_id) #else #define RAIMAG(v) (raima_globals.v) #define RAIMALS_FETCH() #endif How do I utilize ZTS? Where is raima_globals_id defined? I do set a variable in PHP_MINIT_FUNCTION that variable is always set! But any other variables from the ZEND_BEGIN/END_MODULE_GLOBALS section (phew) that is set later do not remember their value??? Why is that? Thanks Thomas -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED] -- Zeev Suraski [EMAIL PROTECTED] CTO co-founder, Zend Technologies Ltd. http://www.zend.com/ -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
[Fwd: Re: [PHP-DEV] Global variables in extensions]
missed the mailinglist :) Original Message Subject: Re: [PHP-DEV] Global variables in extensions Date: Fri, 30 Mar 2001 13:16:36 +0200 From: Thomas Wentzel [EMAIL PROTECTED] Organization: 2M Electronic A/S To: Zeev Suraski [EMAIL PROTECTED] References: [EMAIL PROTECTED] Hi Zeev, My extension is compiled _into_ php which is loaded as a module in apache! I'm not using the php.ini file at the moment - is it really necessary? Thomas Zeev Suraski wrote: How are you loading your extension? If you're using dl(), forget about retaining any type of information in between requests... You must use extension= in php.ini Zeev At 11:58 30/3/2001, Thomas Wentzel wrote: Hi! I have a problem that is driving me crazy. I need to allocate some memory that will be available throughout a session. Firstly a database connection is established, but at the same time I read all relevant information about the db (records, attributes, typedeclarations and such and such). This is a rather lengthy process so I am trying to store these information in memory for later retrieval. This is the part, that doesn't work. Whenever a new page is loaded the information is lost. I have tried using static (global) variables, and I have tried the ZEND_BEGIN/END_MODULE_GLOBALS. About the ZEND_BEGIN/END... approach: the std. skeleton defines these macros: #ifdef ZTS #define RAIMAG(v) (raima_globals-v) #define RAIMALS_FETCH() php_raima_globals *raima_globals=ts_resource(raima_globals_id) #else #define RAIMAG(v) (raima_globals.v) #define RAIMALS_FETCH() #endif How do I utilize ZTS? Where is raima_globals_id defined? I do set a variable in PHP_MINIT_FUNCTION that variable is always set! But any other variables from the ZEND_BEGIN/END_MODULE_GLOBALS section (phew) that is set later do not remember their value??? Why is that? Thanks Thomas -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED] -- Zeev Suraski [EMAIL PROTECTED] CTO co-founder, Zend Technologies Ltd. http://www.zend.com/ -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP-DEV] Global variables in extensions
Ah, no, it's not necessary. I thought you were talking about a dynamic extension. What exactly isn't working? Is something that you're storing in a static/global variable not retained by the time of the next request? A couple of things that are worth mentioning: - You can only set the values for global/static variables during the initial startup (minit). - Changes you make to these values afterwards will only be retained in the context of a single process, because the static/global variables are only global process-wide, whereas Apache has many simultaneous processes. My guess is that you probably considered global variables to be more global than they really are (i.e., across processes). In order to have variables that are shared among all Apache processes, you're going to have to use shared memory or some other type of persistent shared storage. Zeev At 13:16 30/3/2001, Thomas Wentzel wrote: Hi Zeev, My extension is compiled _into_ php which is loaded as a module in apache! I'm not using the php.ini file at the moment - is it really necessary? Thomas Zeev Suraski wrote: How are you loading your extension? If you're using dl(), forget about retaining any type of information in between requests... You must use extension= in php.ini Zeev At 11:58 30/3/2001, Thomas Wentzel wrote: Hi! I have a problem that is driving me crazy. I need to allocate some memory that will be available throughout a session. Firstly a database connection is established, but at the same time I read all relevant information about the db (records, attributes, typedeclarations and such and such). This is a rather lengthy process so I am trying to store these information in memory for later retrieval. This is the part, that doesn't work. Whenever a new page is loaded the information is lost. I have tried using static (global) variables, and I have tried the ZEND_BEGIN/END_MODULE_GLOBALS. About the ZEND_BEGIN/END... approach: the std. skeleton defines these macros: #ifdef ZTS #define RAIMAG(v) (raima_globals-v) #define RAIMALS_FETCH() php_raima_globals *raima_globals=ts_resource(raima_globals_id) #else #define RAIMAG(v) (raima_globals.v) #define RAIMALS_FETCH() #endif How do I utilize ZTS? Where is raima_globals_id defined? I do set a variable in PHP_MINIT_FUNCTION that variable is always set! But any other variables from the ZEND_BEGIN/END_MODULE_GLOBALS section (phew) that is set later do not remember their value??? Why is that? Thanks Thomas -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED] -- Zeev Suraski [EMAIL PROTECTED] CTO co-founder, Zend Technologies Ltd. http://www.zend.com/ -- Zeev Suraski [EMAIL PROTECTED] CTO co-founder, Zend Technologies Ltd. http://www.zend.com/ -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP-DEV] Global variables in extensions
Thank you very much for your answer, Zeev. It really helped me understand (to some extend) what is going on. Yes! I considered global variables to be more global than the case being :( Well I guess I should go for the shared memory approach then, but how? Reading about shmget in the man-page revealed to me, that it is necessary to store a key that is used to reference the memory segment, but how is this done! If I could store the key, then I would have no need to use shared memory. Obviously I could allocate a segment in MINIT and use this throughout, but then it wouldn't be possible for me to alter the segment size - which sounds sort of bad... Thomas Zeev Suraski wrote: Ah, no, it's not necessary. I thought you were talking about a dynamic extension. What exactly isn't working? Is something that you're storing in a static/global variable not retained by the time of the next request? A couple of things that are worth mentioning: - You can only set the values for global/static variables during the initial startup (minit). - Changes you make to these values afterwards will only be retained in the context of a single process, because the static/global variables are only global process-wide, whereas Apache has many simultaneous processes. My guess is that you probably considered global variables to be more global than they really are (i.e., across processes). In order to have variables that are shared among all Apache processes, you're going to have to use shared memory or some other type of persistent shared storage. Zeev At 13:16 30/3/2001, Thomas Wentzel wrote: Hi Zeev, My extension is compiled _into_ php which is loaded as a module in apache! I'm not using the php.ini file at the moment - is it really necessary? Thomas Zeev Suraski wrote: How are you loading your extension? If you're using dl(), forget about retaining any type of information in between requests... You must use extension= in php.ini Zeev At 11:58 30/3/2001, Thomas Wentzel wrote: Hi! I have a problem that is driving me crazy. I need to allocate some memory that will be available throughout a session. Firstly a database connection is established, but at the same time I read all relevant information about the db (records, attributes, typedeclarations and such and such). This is a rather lengthy process so I am trying to store these information in memory for later retrieval. This is the part, that doesn't work. Whenever a new page is loaded the information is lost. I have tried using static (global) variables, and I have tried the ZEND_BEGIN/END_MODULE_GLOBALS. About the ZEND_BEGIN/END... approach: the std. skeleton defines these macros: #ifdef ZTS #define RAIMAG(v) (raima_globals-v) #define RAIMALS_FETCH() php_raima_globals *raima_globals=ts_resource(raima_globals_id) #else #define RAIMAG(v) (raima_globals.v) #define RAIMALS_FETCH() #endif How do I utilize ZTS? Where is raima_globals_id defined? I do set a variable in PHP_MINIT_FUNCTION that variable is always set! But any other variables from the ZEND_BEGIN/END_MODULE_GLOBALS section (phew) that is set later do not remember their value??? Why is that? Thanks Thomas -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED] -- Zeev Suraski [EMAIL PROTECTED] CTO co-founder, Zend Technologies Ltd. http://www.zend.com/ -- Zeev Suraski [EMAIL PROTECTED] CTO co-founder, Zend Technologies Ltd. http://www.zend.com/ -- PHP Development Mailing List http://www.php.net/ To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]