+51.00
Рейтинг
75.55
Сила

Лариса

с консолью хакера всё просто, если имеете представление о php вообще и о структуре livestreet
в index.php есть строчка
define ('SYS_HACKER_CONSOLE', false);

переключаете в true, перезагружаете страничку и жмете Ctrl+~

теперь в нужном экшене(в вашем случае ActionProfile) дампим нужную переменную

dump($sResult['collection']);

и в консоли смотрим вывод, на каком объекте затык.

Удобная штука для отладки, чтобы не травмировать народ var_dump. Но следует заметить, что используется она ТОЛЬКО для отладки (ибо при ее активации есть проблемы с ajax)
  • avatar xyz
  • 0
Topic.class.php
функция GetTopicsGood
видимо, заменить
'blog_type' => array(
				'personal',
				'open'
			),
на
'blog_type' => array(
				'open'
			),

пробуйте
почему-то при написании слов в строку ничего не происходило (вываливался запрос с текстом «Hacking attempt»), с чего понял, что не передается в запрос параметр security_ls_key. Решилось так: (вместо скрипта, что перед формой)
{literal}
<script language="JavaScript" type="text/javascript">
document.addEvent('domready', function() {      
        new Autocompleter.Request.HTML($('search_form'), DIR_WEB_ROOT+'/include/ajax/tagAutocompleter.php', {
                'indicatorClass': 'autocompleter-loading', 
                'minLength': 2, 
                'selectMode': 'pick', 
                'multiple': false ,
                'postData': {
                    security_ls_key: LIVESTREET_SECURITY_KEY
                }
        }); 
});     
</script>
{/literal}


По сути в объект третьего параметра функции добавить
'postData': {
    security_ls_key: LIVESTREET_SECURITY_KEY
}
  • avatar tih
  • 0
Хех, вот создаешь файл в хуках и вешаешь перехваты на нужные акшины. Надеюсь из примера все понятно.

/classes/hooks/HookCloseSome.class.php

<?php
class HookCloseSome extends Hook {
    public function RegisterHook() {
        $this->AddHook('action_init_ActionBlog_before','Check',__CLASS__,0); //Закрываем блоги
                $this->AddHook('action_init_ActionPeople_before','Check',__CLASS__,0); //Закрываем людей

    }

    public function Check() {
                /**
         * Проверяем авторизован ли пользователь
         */
                    
        if (!$this->User_IsAuthorization()) {
            $this->Message_AddNoticeSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('attention'));
                        Router::Action('login');
                        Router::getInstance()->ExecAction();
                       }
             }
}
?>
судя по всему это означает превышение значения MySQL у твоего хостинг провайдера на тарифе.

попробуй в файле Database.class.php после этих строк:


$oDbSimple->query("set character_set_client='utf8'");
$oDbSimple->query("set character_set_results='utf8'");
$oDbSimple->query("set collation_connection='utf8_bin'");


добавить вот такую строку

$oDbSimple->query("SET SQL_BIG_SELECTS=1");


незабудь почистить кэш после всего этого.
Действительно, проблема в нарушении целостности данных в базе — имеются комменты, ссылающиеся на удаленные топики. Почему-то скрипт конвертации, на который была ссылка выше, мне не помог. Пришлось удалять комментарии к несуществующим топикам вручную:

delete from prefix_comment_online where target_id not in (select topic_id
 from prefix_topic);


После этой операции и очистки кеша модуль прямого эфира заработал нормально.

Подозреваю, что надо бы ещё почистить таблицу prefix_comment, где тоже есть комментарии к несуществующим топикам, но пока не стал этого делать, потому что не вижу ни одного негативного проявления.
Пишу полностью что и как.
Открываем файл /classes/hooks/HookStatisticsPerformance.class.php
После
class HookStatisticsPerformance extends Hook {
	public function RegisterHook() {
		$this->AddHook('template_body_end','Statistics',__CLASS__,-1000);


Добавляем
$this->AddHook('topic_show','TopicShow');


Далее, после
public function Statistics() {
		$oEngine=Engine::getInstance();
		
		$iTimeInit=$oEngine->GetTimeInit();
		$iTimeFull=round(microtime(true)-$iTimeInit,3);
		$this->Viewer_Assign('iTimeFullPerformance',$iTimeFull);
		
		$aStats=$oEngine->getStats();
		$aStats['cache']['time']=round($aStats['cache']['time'],5);
		$this->Viewer_Assign('aStatsPerformance',$aStats);
		
		$this->Viewer_Assign('bIsShowStatsPerformance',Router::GetIsShowStats());
		return $this->Viewer_Fetch('statistics_performance.tpl');
	}


Добавляем
public function TopicShow($aParams) {
        $oTopic=$aParams['oTopic'];
        $oTopic->setCountRead($oTopic->getCountRead()+1);
        $this->Topic_UpdateTopic($oTopic);
    }


В шаблоне добавляем в topic.tpl или в topic_list.tpl
{$oTopic->getCountRead()}
  • avatar ort
  • 0
такая же ситуация была на этом сайте, это проблема связанна с Suhosin-Patch для php
у себя сделал suhosin.session.encrypt=off в php.ini, помогло
  • avatar floyd
  • 0
Нет, не все сразу. Очень смешно кстати. Я так понял не у меня первого такая проблема с LS.

ошибка:
[Tue Jun 15 19:57:43 2010] [error] [client 207.46.195.232] ALERT — canary mismatch on efree() — heap overflow detected (attacker '20
7.46.195.232', file '/home/www/blog.***.ru/www/engine/include/function.php', line 318)

из всех логов появляется только в LiveStreet. IP и скрипт различаются, конечно.
В /top/ и /my/ блоков никогда и не было, если конечно Вы сами не желаете их туда вставить, а поэтому скорее вот так:
/**
 * Настройки вывода блоков
 */
$config['block']['rule_index_blog'] = array(
	'path' => array( 
'___path.root.web___/blog$',
'___path.root.web___/blog/*$',
'___path.root.web___/blog/*/*$',
'___path.root.web___/index/*$',
'___path.root.web___/blog/*/*\.html$',
'___path.root.web___/blog/*\.html$',
),
хмм а в конфиг посмотреть не судьба?)
config/config.php:

/**
* Настройки вывода блоков
*/
$config['block']['rule_index_blog'] = array(
'path' => array(
'___path.root.web___/blog$',
'___path.root.web___/blog/*$',
'___path.root.web___/blog/*/*$',
'___path.root.web___/index/*$',
'___path.root.web___/blog/*/*\.html$',
'___path.root.web___/blog/*\.html$',
'___path.root.web___/top$',
'___path.root.web___/top/*$',
'___path.root.web___/top/*/*$',
'___path.root.web___/my/*$',
'___path.root.web___/my/*/*$',
),
пропиши так, и глюка не будет...)
или я в чём-то не прав?)
  • avatar ort
  • 2
Проблема в не целостности базы, возможно она была MyISAM.
Конвертировать текущую 0.3.1 БД в нормальный целостный вид можно этим скриптом. Далее уже получившуюся БД конвертировать в 0.4.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
set_time_limit(0);


$conn1 = mysql_connect("localhost", "root", "");
$conn2 = mysql_connect("localhost", "root", "",true);

if (!$conn1) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}
  
if (!mysql_select_db("livestreet03",$conn1)) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}
if (!mysql_select_db("livestreet03new",$conn2)) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}
mysql_query("set character_set_client='utf8'",$conn1);
mysql_query("set character_set_results='utf8'",$conn1);
mysql_query("set collation_connection='utf8_bin'",$conn1);
mysql_query("set character_set_client='utf8'",$conn2);
mysql_query("set character_set_results='utf8'",$conn2);
mysql_query("set collation_connection='utf8_bin'",$conn2);


function buildInsertSql($sTable,$aRow)  {
	$sql='INSERT INTO '.$sTable.' SET ';
	foreach ($aRow as $key => $value) {
		if (!is_null($value)) {
			$value="'".mysql_escape_string($value)."'";
		} else {
			$value='NULL';
		}
		$sql.=' '.$key."=".$value.",";
	}
	return trim($sql,',');
}

function exportTable($sTable) {
	global $conn1;
	global $conn2;
	
	$iAll=0;
	$iExp=0;
		
	$res = mysql_query("SELECT * FROM {$sTable}",$conn1);
	if ($res) {
		while ($row = mysql_fetch_assoc($res)) {
			if (@mysql_query(buildInsertSql($sTable,$row),$conn2)) {
				$iExp++;
			}
		}
		$iAll=mysql_num_rows($res);
		mysql_free_result($res);
	}
	echo "Export {$sTable}: {$iExp} from {$iAll}\n";
}


//пользователи
exportTable('prefix_user');
exportTable('prefix_user_administrator');
exportTable('prefix_user_vote');

//блоги
exportTable('prefix_blog');
exportTable('prefix_blog_user');
exportTable('prefix_blog_vote');

//топики
exportTable('prefix_topic');
exportTable('prefix_topic_vote');
exportTable('prefix_topic_tag');
exportTable('prefix_topic_read');
exportTable('prefix_topic_question_vote');
exportTable('prefix_topic_content');
exportTable('prefix_topic_comment');
exportTable('prefix_topic_comment_vote');
exportTable('prefix_topic_comment_online');

//почта
exportTable('prefix_talk');
exportTable('prefix_talk_comment');
exportTable('prefix_talk_user');

//география
exportTable('prefix_city');
exportTable('prefix_city_user');
exportTable('prefix_country');
exportTable('prefix_country_user');

//остальное
exportTable('prefix_reminder');
exportTable('prefix_page');
exportTable('prefix_invite');
exportTable('prefix_friend');
exportTable('prefix_favourite_topic');

?>
  • avatar noonv
  • 2
http://idea2.ru/files/feedback/feedback.zip
вот модуль для 0.3.1
Установка:
1. скопировать
2. настроить адрес в конфиге
3. доступ по адресу сайт/feedback

Условие использования:
бесплатно при условии сохранения копирайта.
  • avatar ort
  • 4
было:

<?
class LsUser extends Module {
	
}


class UserEntity_Country extends Entity {    
  
}

class Mapper_User extends Mapper {
	
}



class PluginPage_Page extends Module {
	
}

class PluginPage_PageEntity_Page extends Entity {
	
}

class PluginPage_Mapper_Page extends Mapper {
	
}
?>

стало:

<?
class ModuleUser extends Module {
	
}

class ModuleUser_EntityCountry extends Entity {    
  
}

class ModuleUser_MapperUser extends Mapper {
	
}



class PluginPage_ModulePage extends Module {
	
}

class PluginPage_ModulePage_EntityPage extends Entity {
	
}

class PluginPage_ModulePage_MapperPage extends Mapper {
	
}
?>
Натолкнулся на то же самое под Fedora 12 с memcache 1.4.5.
В общем, дело там в том, что до версии 1.4.0 был необязательный аргумент, указывающий мемкешу сохранить удаляемый объект в кеше после операции удаления таким образом, чтобы новые объекты с тем же именем не могли быть добавлены. Эта опция была полностью удалена в 1.4.0, но сделано это было неправильно, из-за чего выкидывались ошибки при попытке использовать эту опцию. В 1.4.3 это было исправлено, ошибки больше не выбрасывались, но и опция не работала. В 1.4.4 в целях обеспечения обратной совместимости мемкеш стал обрабатывать задание таймаута 0 (немедленное удаление), при котором всё работало так, как надо. Однако, в Zend_cache это было исправлено только 10 марта 2010 года.

Итого, если работает неправильно, то:
в строке 190 файла /classes/lib/external/DklabCache/Zend/Cache/Backend/Memcached.php
return $this->_memcache->delete($id);

меняем на
return $this->_memcache->delete($id, 0);

после чего проблема исчезает.
И еда в магазинах, тоже должна быть бесплатной, ведь она нужна всем!
Я придерживаюсь этого правила: «Нету денег — делай сам, есть деньги — пусть делают другие.»
  • avatar Dianka
  • 0
Чего вы мучаетесь, есть же pdd.yandex.ru! ;)
  • avatar Guf
  • 0
define('SYS_MAIL_TYPE','smtp');
define('SYS_MAIL_FROM_EMAIL','mydomain.com');
define('SYS_MAIL_FROM_NAME','mydomain.com');
define('SYS_MAIL_CHARSET','UTF-8');
define('SYS_MAIL_SMTP_HOST','tls://smtp.gmail.com');
define('SYS_MAIL_SMTP_PORT','465');
define('SYS_MAIL_SMTP_USER','user@mydomain.com');
define('SYS_MAIL_SMTP_PASSWORD','12345');
define('SYS_MAIL_SMTP_AUTH',true);
define('SYS_MAIL_INCLUDE_COMMENT_TEXT',true);
define('SYS_MAIL_INCLUDE_TALK_TEXT',true);
  • avatar ort
  • 3
{insert name=`block` block=`tags`}
Выход, собственно, прост. Не нужно отказываться от вики-разметки. Нужно её сделать понятной пользователю, вот и всё.

Приведу пример. Допустим, у вас есть поле для ввода, под ним перечислены непонятные теги, которые можно использовать. Не , а «ссылка на другую страницу» и так далее. Да и все доступные теги перечислять не надо, а только самые частоупотребимые. Посмотрите, как решили этот вопрос вконтакте (простигосподи).

А вообще в начале развития каждого проекта при нём должен быть администратор/менеджер/корректор, которые бы мониторил сайт и исправлял все недочёты и создавал вектор развития. Иначе бардак будет, каким бы хорошо организованным ни был контингент пользователей.

Вывод: пользователям минимальные необходимые средства для публикации в руки, остальное делает админ.