在驻留子目录的页面中获取drupal用户标识

时间:2012-07-04 11:45:55

标签: php session drupal drupal-7

我已阅读this post.

Drupal已安装在我的本地计算机上并且运行正常。我在drupal安装中的目录中创建了一个静态页面。 与http://localhost/usertest/userts.php

一样

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

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

代码:
我的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,它会给我当前的用户对象输出。

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

1 个答案:

答案 0 :(得分: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'];