[support] Issues with initializing Variables on startup..

Scott Matthews smatthews at optaros.com
Tue Jan 29 17:43:09 UTC 2008


Conf_init calls conf_path.  the first line in conf path is:
   static $conf = '';

As I said, once I globally changed the intended array variable to  
something other than $conf ($config_vars for instance) it worked as  
expected.

Now, as I mentioned before, before I tried to initialize in the  
settings.php file, I just relied on the database value that I set.   
This was not being retrieved when I called variables_get() and  
variables_get() was only returning the value I had as the default.   
The only thing I can think of from what you are saying is that in my  
module I have to specifically call variables_init() for it to work.   
Is that true?  when in the stack is variables_init called?


Scott Matthews
Senior Developer
(w) 617-227-1855 x164
(m) 617-710-8430
(f) 617-224-5388
smatthews at optaros.com




On Jan 29, 2008, at 12:04 PM, Metzler, David wrote:

> Yes true, I was mistaken about the variables being instatitated.  
> But these values are initially loaded from the database by the  
> variable_init function, called in the drupal bootstrap process  
> before settings.php is loaded.  Yes you can override these in  
> settings.php, in which case the database value doesn’t matter, but  
> hey are still meant to be site configuration values that do not  
> change.  As the settings.php file indicates you don’t normally use  
> this method, unless you’re rally trying to something vhost  
> specific.  They are not intended to house global variables that you  
> intend to change during the page load.   Variable_set is designed  
> to change the database given values and is functioning as  
> designed.  It’s used by the admin pages to alter the site specific  
> values.
>
>
>
> 90% of all use cases are handled using variable_get() to get the  
> site specific configuration settings from the database and loaded  
> in cache.   It’s only in weird multi-site hosting cases that you  
> would ever be overriding the values retrieved by variable_get in  
> settings.php.  It is not the preferred method of handling values  
> that you expect to change during a page load or between page loads  
> on a site.
>
>
>
> Conf_init() in my inspection of the source code on drupal_api  
> initializes conf to an array() not a string. Where do you see this  
> behavior?
>
>
>
> Dave
>
>
>
> From: support-bounces at drupal.org [mailto:support- 
> bounces at drupal.org] On Behalf Of Scott Matthews
> Sent: Tuesday, January 29, 2008 8:19 AM
> To: support at drupal.org
> Subject: Re: [support] Issues with initializing Variables on startup..
>
>
>
> I don't believe you fully understood me.
>
>
>
> First off, variable_get does NOT retrieve from the database.  if  
> you look in the code it ONLY retrieves from that $conf variable  
> that variable_set stores the variable in when it sets to the  
> database.  If, as you suggest David, it really should retrieve from  
> the database then it is not working as defined.
>
>
>
> function variable_get($name, $default) {
>
>   global $conf;
>
>
>
>   return isset($conf[$name]) ? $conf[$name] : $default;
>
> }
>
>
>
>
>
>
>
> Second, according to the comments in the settings.php, you can  
> initially override any variables stored in the database in the  
> settings.php file by setting the same variable that variable_get  
> and variable_set uses:
>
>
>
> /**
>
>  * Variable overrides:
>
>  *
>
>  * To override specific entries in the 'variable' table for this site,
>
>  * set them here. You usually don't need to use this feature. This is
>
>  * useful in a configuration file for a vhost or directory, rather  
> than
>
>  * the default settings.php. Any configuration setting from the  
> 'variable'
>
>  * table can be given a new value.
>
>  *
>
>  * Remove the leading hash signs to enable.
>
>  *
>
> /# $conf = array(
>
> #   'site_name' => 'My Drupal site',
>
> #   'theme_default' => 'minnelli',
>
> #   'anonymous' => 'Visitor',
>
> # );
>
>
>
>
>
> Scott Matthews
>
> Senior Developer
>
> (w) 617-227-1855 x164
>
> (m) 617-710-8430
>
> (f) 617-224-5388
>
> smatthews at optaros.com
>
>
>
>
>
>
>
>
>
> On Jan 29, 2008, at 11:04 AM, Metzler, David wrote:
>
>
>
>
> I think you’re confusing two completely independent constructs.
>
>
>
> Variable_get and variable_set are used to store system wide  
> settings that should persist in the database.  They are never (to  
> my knowledge) instantiated as PHP variables. The caching structure  
> is meant to reduce the number of database hits involved in loading  
> variables, and should not generally be accessed directly.  Multiple  
> calls to variable_get should leverage the cached variables as  
> appropriate.
>
>
>
> The variables in settings.php can be used, you can define your own  
> global variables there, but if you want them to persist between  
> page loads you need to do that yourself.  IN your hooks you can  
> reference these variables after defining them as globals, but be  
> careful with namespace collisions.  I usually create a global  
> variable that has the same name as my module and store everying  
> inside it (as an associative array).
>
>
>
> Finally session variables can be used and will persist in the  
> database for the duration of a session.
>
>
> Hope that clarifies things.  It sounds like drupal is behaving as  
> designed here.
>
>
>
> Dave
>
>
>
> From: support-bounces at drupal.org [mailto:support- 
> bounces at drupal.org] On Behalf Of Scott Matthews
> Sent: Tuesday, January 29, 2008 7:37 AM
> To: support at drupal.org
> Cc: Ron Trevarrow
> Subject: [support] Issues with initializing Variables on startup..
>
>
>
> I found what Appears to be a bug (or two) with initializing  
> variables in Drupal.
>
>
>
> It is suggested that you can uncomment and set initial variable  
> values in settings.php with the $conf array.  In doing so, and not  
> seeing my variables set when retrieving using variable_get, I  
> discovered that conf_init(), when called to initialize the  
> configure file path, it sets $conf to a string.  I know that since  
> it initializes settings.php within the context it conceptually  
> SHOULD reset it to a variable, but it doesn't.   I proved this by  
> changing the variable array name in settings.php, variable_get,  
> variable_set, variable_init and conf_init to $config_vars and the  
> values I initialized in settings.php were reflected when my  
> application later retrieved them using variable_get.
>
>
>
> This bug is currently hindering the flexibility of an application  
> that I'm writing that will be deployed to different environments.   
> I initially tried to set the variables in the 'variable' table of  
> the Database in order to retrieve them with variable_get but that  
> method only accesses the cached variables in $conf (or in my case,  
> $config_vars.  Is this on purpose?  I see that variable_set will  
> not only set the cached variable but will also set into the  
> database.  This seems to be a bug as well to me.  Can someone  
> clarify this for me?
>
>
>
> Scott Matthews
>
>
>
>
>
>
>
>
>
>
> -- 
>
> [ Drupal support list | http://lists.drupal.org/ ]
>
>
>
> -- 
> [ Drupal support list | http://lists.drupal.org/ ]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20080129/e030eceb/attachment-0001.htm 


More information about the support mailing list