2

我读过这篇文章。

Drupal 安装在我的本地机器上并且工作正常。我在 drupal 安装的目录中创建了一个静态页面。喜欢http://localhost/usertest/userts.php

如果页面移动到root目录它可以工作,但是当我将页面移动到usertest或任何其他目录时它不起作用。

目录结构:
root - 包含所有drupal 文件的drupal 安装目录,包括includes, modules, sites等。
usertest- 根目录的子目录。

代码:
我的userts.php页面包含的是:

<?php 
$currdir=getcwd();
chdir($_SERVER['DOCUMENT_ROOT']);
require_once("./includes/bootstrap.inc");
drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
global $user;
chdir($currdir);


?>
<p>USER VAR :</p>
<?php print_r( $user ); ?>

输出: 虽然我登录了,但输出是作为匿名用户给出的:

USER VAR :
stdClass Object ( [uid] => 0 [hostname] => 127.0.0.1 [roles] => Array ( [1] => anonymous user ) [session] => [cache] => 0 ) 

但是,如果我删除chdir部分并将文件移动到root目录并访问它,http://localhost/userts.php那么它会给我当前的用户对象输出。

我无法弄清楚我在这里错过了什么。有人可以帮忙吗?

4

1 回答 1

2

你需要定义DRUPAL_ROOT

define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']);
require_once($_SERVER['DOCUMENT_ROOT'] . "/includes/bootstrap.inc");
drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);

编辑://

我自己很快就玩过这个,会话将无法正确加载您的用户属性,因为$base_url

在初始化 DRUPAL_BOOTSTRAP 之前,您可以使用此代码解决此问题

global $base_url;
// Assuming your drupal installation lives in the DOCUMENT_ROOT
//  -- Which yours does
$base_url = (array_key_exists('HTTPS', $_SERVER) ? 'https://' : http://') . $_SERVER['HTTP_HOST'];
于 2012-07-04T12:03:31.117 回答