5

我正在拔头发试图弄清楚这一点。在 Drupal 目录之外时,我无法让 Bootstrap 正常工作。如果我在 Drupal 目录中运行此代码,它可以正常工作,但是上一层不起作用。

我的 Drupal 路径是 /public_html/drupal/。我正在运行的脚本在 /public_html 中。

$user 没有返回登录用户。我确定这不是跨域问题(即 www.domain.com 与 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";
}
4

2 回答 2

6

如果 Drupal 在您的单独脚本中无法识别用户,则很有可能它没有收到正确的会话 cookie。您应该检查正常 Drupal 安装设置的 cookie,看看它们是否也发送到您的脚本。如果没有,请检查$cookie_domainDrupals settings.php 中的变量 - 通常它会被注释掉,但您可能需要根据您的情况明确设置它。

于 2010-07-29T06:27:25.680 回答
2

Drupal 使用了很多繁重的魔法来确定使用什么环境:部分原因是同一个 Drupal 安装中可能有多个站点。

您缺少的一件事是$base_url. 这需要设置为您想要引导的 Drupal 站点的 URL(例如$base_url = "http://example.com")。

您将遇到的另一件事,但看起来您已经处理好了,您的脚本和 Drupal 需要具有相同的 FQDN。放上脚本http://foo.example.com并让 Drupal 继续运行是http://example.com行不通的。因此,除非 Drupal 存在http://example.com/drupal并且您的脚本存在于上,否则http://example.com您的脚本将始终返回匿名用户对象。


编辑

可以将脚本放在与 Drupal 不同的 FQDN 中(例如,有一个 Drupal 站点http://drupal.example.com指向,/var/www/drupal脚本http://external.example.com/test.php指向/var/www/test.php;但是,在这种情况下,您需要登录在 athttp://external.example.com/drupal而不是http://drupal.example.com.

于 2010-07-28T23:00:06.957 回答