2010-07-28 4 views
5

Je suis en train de tirer mes cheveux en essayant de comprendre celui-là. Je n'arrive pas à faire fonctionner le Bootstrap correctement en dehors du répertoire Drupal. Cela fonctionne correctement si j'exécute ce code dans le répertoire Drupal, mais un niveau supérieur ne fonctionne pas.Drupal - utiliser boostrap pour vérifier utilisateur connecté en dehors de Drupal ne fonctionne pas

Mon chemin Drupal est/public_html/drupal /. Le script que je cours est dans/public_html.

$ L'utilisateur ne retourne pas l'utilisateur connecté. Je me suis assuré que ce n'est pas un problème interdomaines (c'est-à-dire 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"; 
} 
+0

Je pense que vous pouvez faire un drupal_bootstrap (BOOTSTRAP_SESSION). Devrait être beaucoup plus rapide. – gagarine

Répondre

6

Si l'u. ser n'est pas reconnu par Drupal dans votre script séparé, les chances sont élevées qu'il ne reçoive pas le bon cookie de session. Vous devriez vérifier les cookies mis en place par votre installation Drupal normale et voir s'ils sont également envoyés à votre script. Si ce n'est pas le cas, vérifiez la variable $cookie_domain dans votre settings.php de Drupal - ususally il est commenté, mais vous pourriez avoir besoin de le définir explicitement dans votre cas.

+0

Merci! Définissez le $ cookie_domain à "mydomain.com" et cela a fonctionné comme un charme! –

+0

Merci. Je n'aurais jamais trouvé ça!Mon script est sur le même domaine, donc pourquoi cookie_domain doit être réglé incorrectement est un mystère Il a été mis à ".example.org" (notez le leader.), Et devait être corrigé pour que mes autres scripts fonctionnent. – artfulrobot

2

Drupal utilise beaucoup de lourds wizardry à comprendre quel environnement d'utilisation: en partie parce qu'il pourrait y avoir plusieurs sites dans la même Drupal installer.

Une chose qui vous manque est $base_url. Cela doit être défini sur l'URL du site Drupal que vous souhaitez superposer (par exemple, $base_url = "http://example.com").

L'autre chose que vous allez rencontrer, mais il semble que vous l'avez déjà pris en charge, c'est que votre script et Drupal doivent avoir le même FQDN. Mettre le script sur http://foo.example.com et avoir Drupal en direct sur http://example.com ne fonctionnera pas. Donc, à moins que Drupal ne vive sur http://example.com/drupal et que votre script soit en ligne sur http://example.com, votre script retournera toujours l'objet utilisateur anonyme.


Modifier

Vous pourrait avoir votre script dans un FQDN qui n'est pas la même chose que Drupal (comme, par exemple, avoir un site Drupal à http://drupal.example.com qui pointe vers /var/www/drupal et ayant votre script à http://external.example.com/test.php qui pointe vers /var/www/test.php, mais, dans ce cas, vous devez avoir connecté au http://external.example.com/drupal au lieu de http://drupal.example.com

+0

Vous en avez besoin avant le bootstrap.inc include. Drupal l'utilise pendant le bootstrap pour déterminer son environnement. –

+0

Hmm - la variable '$ base_url' devrait être définie dans votre fichier settings.php, qui est lu par la logique d'amorçage, il ne devrait donc pas être nécessaire de le définir/redéfinir dans le script. –

+0

$ base_url doit être explicitement défini dans settings.php; sinon, Drupal devine en fonction de $ _SERVER ['HTTP_HOST'], qui ne sera pas défini correctement pour un script en dehors du répertoire Drupal. Le définir dans le script permet à l'installation de Drupal de rester intacte. Ceci est particulièrement utile lorsque vous avez un site, http://example.com, dans/var/www/drupal, et que votre script est http://foo.com/script.php qui pointe vers/var/www/script .php. –

Questions connexes