Текст книги "CMS Drupal: система управления содержимым сайта"
Автор книги: Виктор Ромашов
Жанр: Программы, Компьютеры
сообщить о неприемлемом содержимом
Текущая страница: 17 (всего у книги 19 страниц)
Файл update.php предназначен для того, чтобы обновить текущую версию CMS Drupal. Кроме того, данный файл применяется при обновлении используемых на вашем сайте модулей.
Обновление CMS Drupal
Основной способ использования этого файла, а также основной способ обновления CMS Drupal описан в следующем алгоритме действий.
1. Создайте копию базы данных, используемой CMS Drupal (не забудьте проверить полученную копию на работоспособность), а также всех файлов CMS Drupal, которые были изменены или добавлены (в частности, скопируйте каталоги files и sites).
2. Войдите на сайт под учетной записью главного администратора (под учетной записью, которую вы создали сразу после установки CMS Drupal).
3. Переведите сайт из рабочего режима в режим технического обслуживания (это делается в разделе Управление → Настройка сайта → Сайт на обслуживании), чтобы не пугать случайных посетителей процессом обновления сайта.
4. Установите стандартную тему оформления Garland и отключите все дополнительные модули.
5. Удалите все файлы и папки CMS Drupal, после чего на их место скопируйте файлы и папки новой версии системы.
6. Переместите обратно все файлы CMS Drupal, которые вы изменили или добавили (те файлы, копии которых создавались на первом шаге обновления CMS).
7. Запустите файл update.php, открыв адрес вида http://<сайт>/update.php (если у вас не окажется достаточных прав доступа, присвойте переменной $update_ free_access значение True; как вы уже знаете, она определяется в файле settings.php).
8. Включите все нужные вам дополнительные модули, после чего снова запустите файл update.php.
9. Окончательно настройте обновленную версию CMS Drupal (например, установите понравившуюся тему оформления), после чего переведите сайт из режима технического обслуживания в рабочий режим.
Обновление модулей
Если вам нужно обновить один из установленных и использующихся модулей, то следует придерживаться такого алгоритма.
1. Удалите файлы старой версии модуля.
2. Скопируйте на их место файлы новой версии модуля (не забудьте перед этим распаковать файлы модуля, если они запакованы в архив).
3. Запустите файл update.php, открыв адрес вида http://<сайт>/update.php.
4. Проверьте настройки прав доступа к модулю, а также страницы настроек модуля – вдруг после обновления модуля были утеряны используемые вами настройки.
Несмотря на то что переводить сайт в режим технического обслуживания при обновлении модуля не так необходимо, как при обновлении CMS Drupal, рекомендуется все-таки это сделать.
Установка заплаток
Новые версии CMS Drupal и отдельных модулей выпускаются реже, чем хотелось бы. Намного чаще выпускаются заплатки – файлы, описывающие, какие строки кода нужно заменить в конкретном файле, чтобы избавиться от возникшей проблемы (как правило, связанной с системой безопасности CMS Drupal).
Заплатки представляют собой обычные текстовые файлы, содержимое которых хранится в специальном формате. Для установки заплаток файл update.php не применяется. Для этого нужно воспользоваться программой path, входящей в поставку операционных систем Linux. Поместите файл заплатки в каталог, где находится сценарий, содержимое которого заплатка изменяет, после чего воспользуйтесь командой вида path – p0 < «путь»/«заплатка». path.
Если программой path вы воспользоваться не можете, то устанавливать заплатку придется вручную. Однако дело это хлопотное, и иногда бывает проще дождаться появления новой версии CMS Drupal. Содержимое файла заплатки делится на строки, которые должны быть удалены из исходного файла, строки, которые должны быть добавлены в исходный файл, и обычные строки, которые изменять не нужно. Строки, которые должны быть удалены из исходного файла, начинаются с символа —. Строки, которые должны быть добавлены, начинаются с символа +.
Отдельно стоит рассмотреть две первые строки файла заплатки. Первая из них содержит путь и имя исходного файла и начинается с символов —. Вторая – путь и имя измененного файла – она начинается с символов +++. Обычно пути в обеих строках одинаковы. Именно в файле, заданном в данных строках, нужно изменять части кода, указанные ниже в файле заплатки.
Кроме того, в файле заплатки встречаются строки, начинающиеся с символов @@. Они указываются перед строками кода и определяют их расположение в исходном файле (начальный и конечный номера строки).
В качестве примера можно привести следующую вырезку из файла заплатки:
– Sites/drupal/sites/all/modules/filter_default/filter_default.module
2007-09-12 15:58:16.000000000 -0500
+++ sites/drupal6/sites/all/modules/filter_default/filter_default.module
2008-04-25 17:18:29.000000000 -0500
@@ -59,8 +66,8 @@ function theme_filter_default_admin_defa
for ($i = 1; $i < count($roles)+1; $i++) {
$row = array();
$row[] = $i;
– $row[] = drupal_render($form['role_'.$i]);
– $row[] = drupal_render($form['format_'.$i]);
+ $row[] = drupal_render($form['role_'. $i]);
+ $row[] = drupal_render($form['format_'. $i]);
$rows[] = $row;
}
Обратите внимание на строку кода, начинающуюся с символов @@. Она говорит о том, что код, идущий за ней, находится в строках 59–66 исходного файла (файла filter_default.module каталога sites/all/modules/filter_default).
Файл cron.phpДанный сценарий выполняет запуск планировщика заданий cron. Иными словами, если вы обратитесь по адресу http://<сайт>/cron.php, то сможете вручную запустить планировщик заданий. Рекомендуется хотя бы раз в день запускать планировщик заданий, так как его работа необходима для правильного функционирования CMS Drupal. Например, именно с помощью планировщика заданий CMS Drupal выполняет автоматическую оптимизацию таблиц своей базы данных (удаление старых или пустых записей, сжатие содержимого таблиц).
Надо отметить, что планировщик заданий cron – это стандартная программа операционных систем Linux, и в этих операционных системах его можно настроить на автоматический запуск. В операционных системах Windows наилучший способ запуска планировщика заданий – это самостоятельное открытие сайта http://<сайт>/cron.php. Хотя существует еще один способ запуска – создание назначенного задания, периодически открывающего этот сайт. Это делается с помощью оснастки Планировщик заданий (консоль taskschd.msc).
Планировщик заданий cron необходим для работы многих стандартных и сторонних модулей. Если у вас возникает сомнение, нужен ли планировщик заданий для определенного модуля, следует прочитать описание работы данного модуля. Если это не развеет ваших сомнений, то поищите в файле <имя_модуля>. module спорного модуля упоминание функции вида *_cron(). Если такая функция есть, то поддержка планировщика заданий данному модулю необходима.
Например, планировщик заданий просто необходим для следующих стандартных модулей: Aggregator, Drupal (пятая версия CMS), Filter, Node, Ping, Poll, Search, Statistics, System, Watchdog (пятая версия), Database logging (шестая версия), Trigger (шестая версия), Update (шестая версия).
Файл. htaccessОсновное назначение файла. htaccess – запрет доступа к определенным страницам вашего сайта, а также перенаправление с одной страницы сайта на другую (например, пользователь вводит понятные человеку адреса вашего сайта, которые с помощью данного файла автоматически преобразуются в реальные адреса). Однако, помимо этих возможностей, файл. htaccess поддерживает множество других. Например, возможность изменения директив файла php.ini.
Файл. htaccess поддерживает огромное количество возможностей, но поскольку его формат не является основной темой нашей книги, мы рассмотрим лишь часть тех возможностей, которые он поддерживает.
Изменение директив файла php.ini
В первую очередь обратите внимание, что с помощью данного файла можно редактировать директивы файла php.ini (вы уже умеете редактировать директивы файла php.ini с помощью сценария settings.php каталога sitesdefault). Для этого применяется запись вида php_value директива значение. Например, по умолчанию в файле. htaccess, создаваемом CMS Drupal, можно встретить следующие строки:
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
Как видите, по умолчанию CMS Drupal с помощью файла. htaccess изменяет значения следующих переменных файла php.ini.
▪ magic_quotes_gpc – определяет, будет ли разрешено использование «магических кавычек» в запросах GET, POST и cookie-наборах (то есть будет ли автоматически применяться функция stripslashes/addslashes для всех данных, полученных из GET, POST и cookie-наборов).
▪ register_globals – разрешает или запрещает возможность использования короткого стиля доступа к данным, полученным GET– и POST-методами. При использовании короткого стиля доступа пропадает необходимость в глобальных массивах $_GET и $_POST, так как на основе данных, полученных GET– и POST-методами, будут автоматически создаваться переменные. Например, при получении адреса http://xxx.com.ua?a=3&b=2 сервер автоматически создаст переменные $a (со значением, равным 3) и $b (со значением, равным 2). Считается, что использование короткого стиля доступа снижает общий уровень защиты веб-сервера.
▪ session.auto_start – если значение равно 1, то сервер будет автоматически устанавливать сеансы. В противном случае для создания или подключения к сеансу нужно будет использовать PHP-функцию session_start();.
▪ mbstring.http_input – определяет кодировку символов по умолчанию для HTTP-ввода. Указание значения pass отключает конвертацию HTTP-ввода.
▪ mbstring.http_output – определяет кодировку символов по умолчанию для HTTP-вывода.
▪ mbstring.encoding_translation – определяет, выполняется ли автоматическая кодировка входящих HTTP-запросов.
Запрет доступа к файлу с указанных IP-адресов
Еще одна задача файла. htaccess, которая пользуется популярностью у администраторов сайтов, заключается в возможности запретить доступ к определенному файлу пользователям, которые имеют указанные IP-адреса. Список может состоять из любого количества IP-адресов – каждый заблокированный IP-адрес указывается новой строкой вида Deny from IP-адрес. Например, реализовать поставленную задачу можно с помощью следующего кода (в данном случае мы запрещаем доступ к файлу rss.xml, расположенному в корне каталога сайта):
<Files «rss.xml»>
Order Allow,Deny
Allow from all
Deny from 188.127.44.57
Deny from 188.127.33.52
</Files>
Разновидностью поставленной выше задачи может быть запрет доступа к определенному файлу со всех IP-адресов, кроме адреса локального компьютера (то есть с компьютера, на котором находится ваш сайт, получить доступ к файлу будет возможно):
<Files «rss.xml»>
Order Deny,Allow
Deny from all
Allow from local.
</Files>
Перенаправление адресов
Представьте себе ситуацию: ваш сайт находится в одном из каталогов корневой папки веб-сервера, например, по адресу http://example.com/my_site/. Вы хотите, чтобы пользователи могли получить доступ к вашему сайту с помощью адресов вида http://example.com/, а не с помощью полного адреса http://example.com/my_site/.
Иными словами, нужно сделать так, чтобы веб-сервер автоматически преобразовывал адреса вида http://example.com/xxx в адреса вида http://example.com/my_site/xxx:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/my_site
RewriteRule ^my_site(.*)$ http://example.com$1 [R=301,L]
После того как вы это сделаете, следует также изменить значение переменной $base_url, расположенной в файле settings.php каталога sitesdefault. Данной переменной нужно присвоить новый адрес корневого каталога вашего сайта, то есть значение http://example.com.
Механизм чистых ссылок
Алгоритм использования механизма чистых ссылок (как и на что заменяются стандартные адреса сайта) определяется именно с помощью файла. htaccess.
Например, посмотрите на следующие строки файла. htaccess, создаваемого при установке CMS Drupal, – именно они управляют механизмом чистых ссылок:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Если при попытке установить механизм чистых ссылок вы получаете сообщение It appears your host is not configured correctly for Clean URLs. Please check for ModRewrite support with your administrator, решить проблему можно путем изменения стандартных настроек механизма чистых ссылок. Например, можно попробовать изменить код, приведенный выше, на следующий код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]
Кроме того, можно попробовать «насильно» включить механизм чистых ссылок, однако это уже не относится к файлу. htaccess.
Работа с базой данных MySQL
Как и другие CMS, а также отдельные сайты на основе PHP, для хранения своих настроек и страниц публикаций Drupal использует базу данных. Вы это уже знаете, ведь перед установкой CMS Drupal вы самостоятельно создавали базу данных, имя и атрибуты для подключения к которой впоследствии указывали во время установки системы.
Несмотря на то что практически все настройки CMS Drupal можно изменить с помощью элементов на страницах управления сайтом, бывают случаи, когда для этих целей удобнее воспользоваться запросами к базе данных. В некоторых случаях запросы к базе данных могут быть единственным способом восстановить работоспособность CMS Drupal. Например, если вы забыли пароль к административной учетной записи, а воспользоваться функцией восстановления пароля по каким-либо причинам не можете.
Доступ к базе данныхПрежде всего рассмотрим способы, с помощью которых можно получить доступ к базе данных CMS Drupal. Самый простой из них – воспользоваться специальной оболочкой наподобие phpMyAdmin, которая существенно упрощает работу с базами данных и их поддержку в актуальном состоянии. Практически каждый уважающий себя хостинг обладает поддержкой подобной оболочки. И, скорее всего, вам будет предложено воспользоваться именно оболочкой phpMyAdmin – она очень популярна.
Переходя от одной крайности к другой, заметим, что самый сложный способ – это использование стандартных программ командной строки, которые поставляются вместе с базой данных MySQL. Этот способ работает не всегда, так как не каждый хостинг предоставляет своим клиентам возможности доступа по SSH и разрешает работу непосредственно с программами из комплекта MySQL.
Ни самый сложный, ни самый легкий способы работы с базой данных CMS Drupal в этой книге описаны не будут. Самый легкий способ вы запросто изучите самостоятельно, а самый сложный может быть интересен только опытным пользователям, которые очень хорошо знают MySQL.
Реализация запросов с помощью PHP
Мы рассмотрим способ доступа к базе данных из сценариев – с помощью языка PHP. Это не очень сложно – достаточно запомнить несколько строк кода, и вы сможете почувствовать себя королем баз данных.
Существует несколько видов запросов, и для каждого из них следует использовать отдельный синтаксис PHP-кода. Рассмотрим их по порядку.
<?php
echo db_result(db_query("SELECT COUNT(name) FROM system WHERE
type='module' AND status=1"));
?>
Данный код отображает в окне браузера данные, которые возвращаются любым запросом SQL, содержащим функцию COUNT. Эта функция говорит о том, что запрос должен вернуть не сами объекты (отдельные записи базы данных), а число, определяющее их количество. И это число мы сразу же выводим на экран.
В частности, в данном случае мы отображаем количество модулей, которые включены на вашем сайте.
<?php
$result = db_query("SELECT name FROM system WHERE type='module' AND
status=1");
$num_rows = 0;
while ($item = db_fetch_array($result)) {$num_rows++;}
echo $num_rows;
?>
Если же вам нужно определить количество записей, которые возвратил тот или иной запрос SQL (то есть выполнить запрос SELECT, в котором не используется функция COUNT), то можно воспользоваться данным кодом. Этот код работает как в пятой версии CMS Drupal, так и в шестой. Именно поэтому лучше всего использовать именно его. Несмотря на то что в пятой версии CMS Drupal специально для подсчета количества возвращенных записей используется функция вида db_num_ rows($result), в шестой версии CMS Drupal эта функция не работает.
<?php
db_query(«UPDATE `node_revisions` SET `format` = '2'»);
?>
С помощью данного кода выполняются SQL-запросы вида INSERT и UPDATE. В частности, приведенный запрос изменяет формат ввода для всех созданных на вашем сайте публикаций (на формат PHP Code).
Ввод запросов с помощью PHP
Код для выполнения запросов мы уже знаем. Осталось только определиться с тем, куда мы будем вводить его. Для этих целей можно использовать возможности создания публикаций. Иными словами, достаточно создать публикацию любого типа (например, раздел Создать материал → Page), введя в поле Body ваш PHP-код и не забыв указать формат ввода PHP Code. После того как вы заполнили все нужные поля на странице создания публикации, нажмите кнопку Предпросмотр. С ее помощью вы увидите результат выполнения своего запроса, и при этом новая страница сайта добавлена не будет.
Еще один способ выполнить PHP-код – создать новый PHP-файл в корне вашего сайта, после чего обратиться к нему из окна браузера. Используя данный метод, не забывайте, что каждый PHP-файл вашего сайта должен начинаться с таких строк:
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
После того как вы воспользовались созданным PHP-файлом, не забудьте его удалить. Ведь если вы этого не сделаете, любой желающий сможет также запустить ваш PHP-файл, что может привести к нежелательным последствиям.
И самый последний способ – это создать новый PHP-файл в корне вашего сайта, который отображал бы форму для ввода SQL-запроса. Например, файл с таким содержимым:
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
if (isset($_POST['Sql_Command'])){
$_POST['Sql_Command'] = str_replace(«rnrn», "", $_POST['Sql_
Command']);
if (strpos($_POST['Sql_Command'], «;rn») === false){
$arr_cmds[0] = $_POST['Sql_Command'];
}else{$arr_cmds = explode(«;rn», $_POST['Sql_Command']);}
for($i=0;$i<count($arr_cmds);$i++){
$arr_cmds[$i] = str_replace(«rn», "", $arr_cmds[$i]);
$arr_cmds[$i] = stripslashes($arr_cmds[$i]);
$result = db_query($arr_cmds[$i]) or print($arr_cmds[$i].": ".
mysql_error(). «<br />»);
while ($row = db_fetch_array($result)) {
foreach ($row as $key => $value) echo $key.' = '. $value.'; ';
echo «<br />»;
}
}
echo «<br />». $i. «команд выполнено»;
}
?>
<form method="post" id="sql_cmd">
<input type="checkbox" name="sql_back" <?php if ($_POST['sql_back'] ==
'on'){echo 'checked';}?>> – отобразить запрос после выполнения<br />
<textarea style="width:90 %;" rows="10" name="Sql_Command" title="Введите
команды sql"><?php if ($_POST['sql_back'] == 'on'){echo $_POST['Sql_
Command'];}else{echo «select * from where»;}?></textarea>
<input class="cinline" type="Submit" value="Выполнить запрос">
</form>
С помощью такого файла вы сможете выполнять любые SQL-запросы без необходимости заново создавать PHP-код, выполняющий их. Думаю, не стоит вам говорить, что такой PHP-файл после использования нужно обязательно удалить со своего сайта либо же настроить права доступа к нему. Иначе последствия могут быть самыми плачевными.
Примеры запросов SQLРассмотрим запросы к таблицам базы данных, с которой работает CMS Drupal. Перечисленные ниже запросы позволяют выполнять наиболее популярные действия над базой данных, в частности с настройками CMS Drupal.
▪ UPDATE variable SET value = 's:1:"0"; WHERE name= 'site_offline'; DELETE FROM cache WHERE cid = 'variables'; – перевести сайт из режима технического обслуживания в рабочий режим.
▪ UPDATE variable SET value = 's:1:"1"; WHERE name= 'site_offline'; DELETE FROM cache WHERE cid = 'variables'; – перевести сайт из рабочего режима в режим технического обслуживания.
▪ UPDATE users SET name='логин', pass=md5('пароль') WHERE uid=1; – сменить логин и пароль главного администратора вашего сайта.
▪ UPDATE «system» SET status=1 WHERE name='имя модуля'; – включить модуль с указанным именем.
▪ SELECT name FROM system WHERE type='module' AND status=1; – отобразить список всех модулей, включенных на вашем сайте.
▪ UPDATE «node_revisions» SET «format» = 2; – изменить формат ввода для всех публикации вашего сайта. В столбце format указывается новый формат ввода публикаций. Данный столбец может принимать следующие значения:
– 1 – формат ввода Filtered HTML;
– 2 – формат PHP code;
– 3 – формат Full HTML.
▪ UPDATE blocks SET visibility=0 WHERE module='block' AND delta=номер LIMIT 1; – отключить блок, номер которого указан в столбце delta.
▪ SELECT COUNT("nid") FROM "{node}"; – вывести количество публикаций, созданных на вашем сайте.
▪ SELECT filename FROM {system}; – отобразить список всех путей, по которым находятся модули и темы CMS Drupal.
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.