+5.97
Рейтинг
14.97
Сила
  • avatar ff00
  • 2
Не хватает только ссылки на JShirnk
  • avatar ff00
  • 0
Нужно удалить
<div class="vd-w"><div class="vd-c">
и
</div></div>

Парсер обрезал в прошлом сообщении
  • avatar ff00
  • 0
Скопировал с оптимизацией под свой шаблон:
В строке
$sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)<\/video>/Ui', '<div class="vd-w"><div class="vd-c"><iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe></div></div>', $sText);


Нужно удалить '' и ''
  • avatar ff00
  • 0
Немного доработал
$regExp = '/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video([\d]+)_([\d]+)(?:\?[\s\S]+|)<\/video>/Ui';
if(preg_match($regExp, $sText)) {
	preg_match_all($regExp, $sText, $sTextMatches);
	for($i=0;$i<count($sTextMatches[1]);$i++){
		$html = file_get_contents('http://vk.com/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i]);
		preg_match('/\\\"hash2\\\":\\\"([a-f0-9]+)\\\"/Ui', $html, $matches);
		$sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)<\/video>/Ui', '<div class="vd-w"><div class="vd-c"><iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe></div></div>', $sText);
	}
}
  • avatar ff00
  • 0
Для одноядровой системы нужно поставить
xcache.count = 1
xcache.var_count = 1
  • avatar ff00
  • 0
ОС какая Debian, CentOS, Ubuntu? Я с Debian работаю там настройки xcache лежат в etc/php5/conf.d/20-xcache.ini

Вот эти строки лучше закомментировать, или придется настраивать админку, по другому xcache не заведется
[xcache.admin]
xcache.admin.enable_auth = Off
; Configure this to use admin pages
; xcache.admin.user = ""
; xcache.admin.pass = ""


И памяти лучше добавить
xcache.size  = 1024M
xcache.var_size  = 1024M


С xcache странички генерируются реально быстрее чем с memcache, поэтому я именно его и использую, плюс там больше функций по работе.
  • avatar ff00
  • 0
А что за система стоит?
  • avatar ff00
  • 0
Незнаю, у меня всё четко определяет. Напишите свой IP, а я посмотрю по SxGeo какой город покажет.
  • avatar ff00
  • 0
Тогда уж сначала нужно сохранить файл настроек =) установить memcached, затем установить xcache, затем перезапустить службу apache.
  • avatar ff00
  • 0
Сбросьте кэш, если есть возможность перезапустите сервер и наблюдайте повториться или нет.
  • avatar ff00
  • 0
Переходите на memcache, а лучше на xcache. С файловым кэшем при большом объеме информации творятся чудеса.
  • avatar ff00
  • 0
Какой тип кэширования используется?
  • avatar ff00
  • 0
Есть замечательная база данных IP адресов SxGeo. Она на любой IP возвращает подробную информацию о населенном пункте Страна->Регион->Город, широта, долгота и т.д. Так вот если у админа в профиле будет указан город или регион, то можно будет сравнивать их с БД на основе IP, т.к. IP не подделаешь. У меня на SxGeo крутиться погодный сервис, т.е. посетитель заходит и на основе его IP ему показывается прогноз по его населенному пункту.
  • avatar ff00
  • 1
Я бы на Вашем месте не по юзерагенту проверял, который может узнать любой злоумышленник, а проверял бы относится или нет IP адрес администратора к населенному пункту указанному в профиле.
  • avatar ff00
  • 1
public function isAdministrator() {
	$check = $this->_getDataOne('user_is_administrator');
	if($check AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])){
 header('location: http://site.com');
 die();
}
	return $check;
}


Не знаю сработает или нет, но думаю принцип понятен.
  • avatar ff00
  • 0
Если у админа нет нужного юзерагента?
  • avatar ff00
  • 1
К примеру classes/modules/user/User.enity.class.php

Если заменить функцию isAdministrator на:
public function isAdministrator() {
	$check = ($this->_getDataOne('user_is_administrator') AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])) ? false : true;
	return $check;
}

то без нужного узьверьагента не будут предоставлены права администратора

А если заменить на:
public function isAdministrator() {
	$check = $this->_getDataOne('user_is_administrator');
	if($check AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])) die();
	return $check;
}

то просто получим белый кинескоп. Не испытывал, но должно сработать.
  • avatar ff00
  • 2
Быстренько набросал парсер для видео вконтакта, испытал — кажись работает нормально.
Для каждого видео из вконтакта идет загрузка странички с видео из вконтакта, т.е. идут запросы к вконтакту, это необходимо для получения значения hash видео. К счастью это происходит только при добавлении или редактировании топика или коммента, соответственно в этот момент возможен «небольшая» задержка, по другому пока не получается.

Допускаются ссылки вида
<video>http://vk.com/video123456789_123456789</video>

Код (добавить в Text.class.php в функцию VideoParser):
#Регулярка для вконтакта
$regExp = '/<video>http(?:s|):\/\/(?:www\.|)vk\.com\/video([\d]+)_([\d]+)<\/video>/Ui';
#Если есть видео из вконтакта
if(preg_match($regExp, $sText)) {
	#Считаем количество видео вконтакта
	preg_match_all($regExp, $sText, $sTextMatches);
	for($i=0;$i<count($sTextMatches[1]);$i++){
		#Получаем страницу с видео
		$html = file_get_contents('http://vk.com/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i]);
		#Ищем hash для видео
		preg_match('/\\\"hash2\\\":\\\"([a-f0-9]+)\\\"/Ui', $html, $matches);
		#Заменяем ссылки
		$sText = preg_replace('/<video>http(?:s|):\/\/(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'<\/video>/Ui', '<iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText);
	}
}

Не забудьде добавить vk.com в jevix.php
  • avatar ff00
  • 0
В ВК для iframe требуется знать hash который формирует вконтакт, этот hash присутствует в поделиться->код вставки. Т.е. простой ссылкой на видео вставить не получиться, т.к. неизветен hash. И Ваша конструкция кажись неработоспособная, вставляйте iframe, других вариантов кажись нет.
  • avatar ff00
  • 1
По моему проще ограничить доступ из движка. Проверять заданные условия в инициализации пользователя, и если они не проходят, то просто останавливать скрипт. Что-то на подобии:

if($user->isAdministrator() AND !preg_match('/SECRET_CODE/', $_SERVER['HTTP_USER_AGENT'])) die();