5

私はこれを理解しようとして髪を引っ張っています。Drupal ディレクトリの外にある場合、Bootstrap を正しく動作させることができません。このコードを Drupal ディレクトリで実行すると問題なく動作しますが、1 つ上のレベルでは動作しません。

私の 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 は、使用する環境を決定するために多くの高度な魔法を使用します。その理由の 1 つは、同じ Drupal インストールに複数のサイトが存在する可能性があるためです。

あなたが見逃していることの1つはです$base_url。これは、ブーストラップしたい Drupal サイトへの URL に設定する必要があります (例: $base_url = "http://example.com")。

もう 1 つの問題は、スクリプトと Drupal が同じ FQDN を持つ必要があることです。スクリプトを入れてhttp://foo.example.comDrupal を稼働させて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ます。ただし、この場合は、ログに記録する必要があります。のhttp://external.example.com/drupal代わりに でhttp://drupal.example.com

于 2010-07-28T23:00:06.957 に答える