2010-07-28 21 views
5

Bunu çözmemeye çalışırken saçlarımı çekiyorum. Bootstrap'in Drupal dir'in dışında düzgün çalışmasını sağlayamıyorum. Bu kodu Drupal dizininde çalıştırırsam iyi çalışır, ancak bir seviye çalışmaz.Drupal - Drupal dışında oturum açmış kullanıcı girişini kontrol etmek için boostrap kullanmıyor

Drupal yolum/public_html/drupal /. Çalıştığım komut dosyası/public_html.

$ kullanıcı oturum açmış olan kullanıcıyı iade etmiyor. Alanlar arası bir sorun olmadığından emin oldum (ör. Www.domain.com - domain.com). kısmen yüklemek Aynı Drupal içinde birden çok site olabilir çünkü:

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

Bir drupal_bootstrap (BOOTSTRAP_SESSION) yapabileceğinizi düşünüyorum. Daha hızlı olmalı. – gagarine

cevap

6

u edin. ser, Drupal tarafından ayrı senaryonuzda tanınmaz, uygun oturum çerezini alma şansı yüksektir. Normal Drupal yüklemeniz tarafından ayarlanan çerezleri kontrol etmeli ve senaryonuza gönderilip gönderilmediklerini kontrol etmelisiniz. Aksi takdirde, Drupals settings.php dosyanızdaki $cookie_domain değişkenini kontrol edin - genellikle yorumlanır, ancak durumunuza açık bir şekilde ayarlamanız gerekebilir.

+0

Teşekkürler! $ Cookie_domain öğesini "mydomain.com" olarak ayarlayın ve bir çekicilik gibi çalıştı! –

+0

Teşekkür ederim. Bunu asla bulamazdım!Komut dosyasım aynı etki alanında, bu yüzden cookie_domain neden yanlış ayarlanması gerektiğini bir gizem. ".example.org" olarak ayarlandı (başlığa dikkat edin.), Ve diğer komut dosyalarının çalışması için buna sabitlenmesi gerekiyordu. – artfulrobot

2

Drupal kullanmak ne çevre anlamaya ağır büyücülük çok kullanır.

Eksik olan bir şey $base_url. Bunun, güçlendirmek istediğiniz Drupal sitesinin URL'sine ayarlanması gerekir (ör. $base_url = "http://example.com").

Karşılaşacağınız diğer bir şey var, ama daha önce yaptığınız gibi görünüyor, komut dosyanız ve Drupal'ın aynı FQDN'ye sahip olması gerekiyor. Komut dosyasını http://foo.example.com adresine koymak ve Drupal'ın http://example.com üzerinde yayınlanması işe yaramayacaktır. Yani, Drupal http://example.com/drupal üzerinde yaşıyor ve komut dosyanız http://example.com üzerinde yaşıyorsa, komut dosyanız her zaman anonim kullanıcı nesnesini döndürecektir.


Düzenleme

Sen olabilir sahip Drupal en (beğenme, örneğin aynı değil bir FQDN daki komut, /var/www/drupal işaret http://drupal.example.com bir Drupal sitesine sahip ve komut sahip /var/www/test.php işaret http://external.example.com/test.php de; bu durumda, ancak, sen http://external.example.com/drupal yerine http://drupal.example.com de giriş yapmış olması gerekiyordu

+0

bootstrap.inc içermeden önce buna ihtiyacınız var. Drupal, ortamını belirlemek için önyükleme sırasında kullanır. –

+0

Hmm - '$ base_url' değişkeni bootstrapping mantığı tarafından okunan settings.php dosyasında tanımlanmalıdır, böylece betikte tanımlamak/geçersiz kılmaya gerek yoktur. –

+0

$ base_url, settings.php; Aksi takdirde, Drupal, Drupal dizininin dışındaki bir betik için doğru şekilde ayarlanamayan $ _SERVER ['HTTP_HOST'] değerini temel alır. Komut dosyasında ayarlanması, Drupal kurulumunun el değmeden kalmasına izin verir. Bu özellikle http://example.com,/var/www/drupal adresinde bir siteye sahip olduğunuzda ve komut dosyanız http://foo.com/script.php adresinde bulunduğunda/var/www/script komutunu kullandığınızda yararlıdır. .php. –