I'm pulling my hair out trying to figure this one out. I can't get the Bootstrap to work properly when outside of the Drupal dir. It works fine if I run this code in the Drupal dir, but up one level doesn't work.
My Drupal path is /public_html/drupal/. The script I'm running is in /public_html.
$user is not returning the logged in user. I've made sure it's not a cross-domain issue (i.e. www.domain.com vs. domain.com).
chdir('/path/to/drupal');
include_once('./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
global $user;
if ($user->uid) {
print "Logged in";
} else {
print "Logged out";
}
If the user is not recognized by Drupal in your separate script, chances are high that it does not receive the proper session cookie. You should check the cookies set by your normal Drupal install and see if they get send to your script as well. If not, check the $cookie_domain
variable in your Drupals settings.php - ususally it is commented out, but you might need to set it explicitly in your case.
Drupal uses a lot of heavy wizardry to figure out what environment to use: in part because there could be multiple sites in the same Drupal install.
One thing you're missing is $base_url
. This needs to be set to the URL to the Drupal site you want to boostrap (e.g. $base_url = "http://example.com"
).
The other thing you're going to run into, but it looks like you already have it taken care of, is that your script and Drupal need to have the same FQDN. Putting the script on http://foo.example.com
and having Drupal live on http://example.com
will not work. So, unless Drupal is living on http://example.com/drupal
and your script is living on http://example.com
, your script will always return the anonymous user object.
Edit
You could have your script in a FQDN that's not the same as Drupal's (like, for example, having a Drupal site at http://drupal.example.com
which points to /var/www/drupal
and having your script at http://external.example.com/test.php
which points to /var/www/test.php
; but, in this case, you'd need to have logged in at http://external.example.com/drupal
instead of http://drupal.example.com
.