Логин через сторонний скрипт в консоли

28 сентября 2010 в 21:43

Добрый вечер,

возникла следующая необходимость: уметь создавать ноды через консоль из стороннего скрипта.
Поскребя по форумам нашел следующее решение:

login.php

<?php

// ...что-нибудь делаем

include('./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

user_authenticate(array('name' => 'admin', 'pass' => '*****'));

// ...теперь мы залогинены на сайте, можно делать что-нибудь ещё
?>

вызвав его через консольку
php login.php

получил следующий ответ:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="/./misc/favicon.ico" type="image/x-icon" />
    <title>Site off-line | Drupal</title>
    <link type="text/css" rel="stylesheet" media="all" href="/./modules/system/defaults.css?0" />
<link type="text/css" rel="stylesheet" media="all" href="/./modules/system/system.css?0" />
<link type="text/css" rel="stylesheet" media="all" href="/./modules/system/system-menus.css?0" />
<link type="text/css" rel="stylesheet" media="all" href="/./modules/system/maintenance.css?0" />
<link type="text/css" rel="stylesheet" media="all" href="/./themes/garland/style.css?0" />
<link type="text/css" rel="stylesheet" media="all" href="/./themes/garland/minnelli/minnelli.css?0" />
<link type="text/css" rel="stylesheet" media="print" href="/./themes/garland/print.css?0" />
        <!--[if lt IE 7]>
     <link type="text/css" rel="stylesheet" media="all" href="/./themes/garland/fix-ie.css" />    <![endif]-->
  </head>
  <body>

<!-- Layout -->
  <div id="header-region" class="clear-block"></div>

    <div id="wrapper">
    <div id="container" class="clear-block">...

т.е. код страницы "Сайт на техобслуживании". Сам файл находится в корне.
Куда дальше копать для решения проблемы?

Комментарии

"paladin.on" wrote:
Даже если без авторизации, вот такой вот скрипт все равно выдает код maintenance page

потому что не определена масса нужных переменных.

Для "поржать" откройте ваш скрипт через браузер из корня drupal, все будет ок.

Старость, не помню уже все, но вроде так:


<?php
$_SERVER
['HTTP_HOST']       = 'default';
$_SERVER['REMOTE_ADDR']     = '127.0.0.1';
$_SERVER['SERVER_SOFTWARE'] = 'ЫЫ';
$_SERVER['REQUEST_METHOD']  = 'GET';
$_SERVER['QUERY_STRING']    = '';
$_SERVER['PHP_SELF']        = $_SERVER['REQUEST_URI'] = '/';

include(

'./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

?>
28 сентября 2010 в 22:34

Через браузер-то заходит, это все понятно.
Нужен рецепт, чтобы аналогично запускать его через консольку.

"Vladimir_VVV" wrote:
потому что не определена масса нужных переменных.

Определение указанных переменных результат не изменило.

28 сентября 2010 в 22:49

так а может у Вас сайты в мультисайтинге пашут а default ненастроен?
хотя это относится только к index.php а если файл указаным кодом то должна быть просто пустая страница но не как не маинтенс.

28 сентября 2010 в 23:31

Совет в топике помнится из моего блога. Этот код гарантированно работает на D6. См. настройки PHP для CLI. Если просто вызвать из корня сайта в командной строке index.php, выдаёт страницу друпала или тоже страницу обслуживания? Если второе, см. подключён ли для CLI драйвер СУБД, может ещё какие отличия в конфигах PHP для вебсервера и для CLI.

29 сентября 2010 в 19:13

Через браузер все открывает как надо - код выполняется верно и с авторизацией и без.
CLI есть:

php -v
PHP 5.1.6 (cli) (built: Sep 30 2008 14:25:04)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

как посмотреть его конфиг на предмет отличий от CGI? Или пора уже в техподдержку писать?

29 сентября 2010 в 22:29

paladin.on wrote:
как посмотреть его конфиг на предмет отличий от CGI? Или пора уже в техподдержку писать?

$ php -info

29 сентября 2010 в 22:30

там есть про конфиг который загружен, нужно искать строки типа:
для php(cli):

Configuration File (php.ini) Path => /etc/php5/cli
...
Scan this dir for additional .ini files => /etc/php5/cli/conf.d

для php-cgi

<tr><td class="e">Configuration File (php.ini) Path </td><td class="v">/etc/php5/cgi </td></tr>
...
<tr><td class="e">Scan this dir for additional .ini files </td><td class="v">/etc/php5/cgi/conf.d </td></tr>

Потом по этим путям открыть конфиги и сравнить по подключенным расширениям.

"axel" wrote:
Если второе, см. подключён ли для CLI драйвер СУБД

Очень похоже что не включен Mysql(с его производными), больше вариантов с майнтенсом нет.

30 сентября 2010 в 11:35