домой  почта (495) 543-35-35 (многоканальный) http://tour.yandis.ru/
e-mail: tour@yandis.ru
     Болгария
     Турция
     Египет
     Тунис
     Италия
     Хорватия
    Сочи
    Анапа
    Геленджик
    Евпатория
 
О компании Туры по Миру Туры по России Шоп-Туры Загранпаспорт и виза Контакты
 
  БОЛГАРИЯ  

Отдых в Болгарии
Спрака о стране  
Полезная информация  
История  
Достопримечательности  
Города Болгарии  
Курорты Болгарии  
Национальная кухня  
Русско-Болгарский разговорник  
полезная информация

  

 
    Климат
Расхождение во времени
Уровень преступности
Национальная валюта
Кредитные карточки
"Чаевые"
Транспорт
Прокат машин
Обычаи и традиции
Шопинг
Часы работы
Телефон
В случае заболевания
Полезные телефоны

Полетное время

Перелет из Москвы в Варну занимает 2 часа 30 мин, а из Москвы в Бургас 2 часа 40 минут.

Виза

Граждане России имеют право на въезд на территорию Болгарии только располагая визой.

Посольство Болгарии в Москве: адрес: Москва, ул. Мосфильмовская, д. 66. телефоны: 143-9022/9023, 147-9000 факс: 232-3302.
Посольство России в Софии: София, бул. Драган Цанков, 28 телефоны: (359-2) 963-1663, 963-0914, 963-0912 факс: (359-2) 963-4103, 963-4116.
Консульство России в Варне: г. Варна, ул. Македония, 53 тел (359-052) 66-27-18 или 66-27-19 факс (359-052) 60-27-22
Консульство России в Русе: г. Русе, ул. Ниш, 1 тел. (359-82) 82-22-51 или 82-22-49. факс: (359-82) 45-07-57


Таможня

При пересечении государственной границы Республики Болгарии каждый гражданин имеет право на ввоз и вывоз товаров, которые по виду, количеству и стоимости не имеют торгового характера. К ним не относятся перевозимые гражданами предметы личного пользования и предметы для потребления: табачные изделия (граждане старше 16 лет) сигареты - до 200 штук или другие табачные изделия до 250 граммов, алкагольные напитки (граждане старше 16 лет) вино - 2 литра, спиртные напитки - 1 литр, кофе - 500 граммов, экстракт кофе - 200 граммов, чай - 100 граммов, экстракт чая - 40 граммов, духи - 50 мл, туалетная вода - 250 мл. Запрещен ввоз неконсервированных продуктов питания.

Примечание: граждане старше 16 лет имеют право на ввоз освобоженных от полшлины товаров, отличающихся от указанных выше, на общую сумму до 100 долларов США. Для лиц моложе 16 лет эта сумма представляет 50 долл. США.

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


Климат

На большей части Болгарии климат континентальный, с холодной зимой и жарким летом, к югу - переходит к средиземноморскому. Для курортов Болгарии в весенне-летние и осенние месяцы характерна теплая мягкая погода с продолжительным купальным сезоном с мая по октябрь. Средняя температура воздуха в мае + 20°С, в июне и сентябре + 25°С, в июле и августе + 26-28°С. Среднегодовая температура составляет около + 13° С.

Таблица средних температур по месяцам в Болгарии:

  Янв Фев Март Апр Май Июнь Июль Авг Сент Окт Нояб Дек
Воздух днем 2,5 2,8 12 15 22 26 30 29 25 20 12,5 7,5
Воздух ночью -2 -1,8 2 7,5 12 16 18 17 14 12 7,2 3
Вода 16 16 16 17 19 22 24 24 24 22 19 17

Средняя температура морской воды летом: 21 - 23 градуса С. Большинство болгарских отелей имеют классификацию две или три "звезды". Как правило, они не оборудованы кондиционерами. Но поскольку влажность на побережье невысока, то особой жары не ощущается. Конечно, если температура не достигает экстремальных значений, как это было в конце июня - начале июня 2000 г., что стало даже причиной нескольких смертей.

Текущую погоду в Албене по данным Московского МетеоБюро можно узнать здесь.
Текущую погоду на курорте Золотые Пески по данным Московского МетеоБюро можно посмотреть здесь.
Текущая погода в Бугасе по данным Московского МетеоБюро доступна. здесь.


Расхождение во времени

Время в Болгарии восточноевропейское (среднеевропейское время + 2 часа), отстает от московского на 1 час. С летнего на зимнее часовое время часы в Болгарии переводятся в те же даты, что и во всей Европе.


Уровень преступности

В отличие от других стран Восточной Европы, где после распада социалистического лагеря, преступность резко возросла, в Болгарии в последние годы в целом наблюдается снижение ее уровня. Причем, по официальной статистике, на 30%. В Болгарии на 100 000 человек регистрируется 1 800 преступлений. Между тем в Британии - 7 000, в Баварии - 5 600, во Франции - 6 000, в Испании - 4 700, в Венгрии - 4 500. В то же время статистика говорит об увеличении количества преступлений, связанных с наркотиками, хотя их рост заметно ниже, чем в Западной Европе или США.

В Софии, как и в других столицах мира, есть опасные районы. Не рекомендуется посещать в поздние часы следующие места: садик около Центральной бани, улицы вблизи Женского рынка и рядом со Львиным мостом. То же самое относится к окрестностям Центрального вокзала и неосвещенным улицам в городе. Водителям машин лучше избегать ночных поездок по Окружной дороге. В это время нужно быть также предельно осторожным в местах въезда в столицу и выезда из нее.

В Болгарии довольно много цыган. Стандартный совет - держитесь от них подальше. В Царево, например, не рекомендуется снимать комнату в цыганском районе, хоть это и дешевле. Впрочем в Албене, которая представляет из себя фактически курортный город со своей службой безопасности, проверками на въезде и выезде, цыган вообще не видно. По данным полиции, с момента завершения приватизации в Албене не было ни одного угона автомобиля.

Мафией в Болгарии нередко называют мелкую братву, тусующуюся возле обменных пунктов. У них можно поменять валюту, когда "change" закрыт. Но лучше все делать вовремя и не вступать в потенциально опасные контакты.

Не оставляйте в автомобиле деньги, фотоаппараты и другие ценные предметы. Не носите при себе крупные суммы денег. Деньги и драгоценности лучше хранить в гостиничном сейфе. Стоимость пользования им, если это не включено в стоимость, составляет около 10 лв. в неделю


Национальная валюта

Денежная единица Болгарии - лев, состоящий из 100 стотинок. В одном ЕВРО около 1, 95 лева. В данный момент в обращении находятся монеты номиналом в 1, 2, 5, 10, 20, 50 стотинок, 1 лев и купюры номиналом в 1,2, 5, 10, 20 и 50 левов. Не разрешается ввозить и вывозить левы из Болгарии. Иностранная валюта может ввозится и вывозится из Болгарии без ограничения и декларации.

Валюту можно обменять в любом банке или же бюро обмена валюты, большая часть которых работает по субботам и воскресеньям, а также в гостиницах, на пограничных пунктах, вокзалах и в других местах. В Болгарии изобилие обменных пунктов (change). Но разница в курсе бывает весьма велика. Например, при обмене $50 она может составить около 7 лв. Столько стоит поллитровая бутылка сливовой ракии "Старая Троянская". Первое правило обмена - обращаться только в те обменники, которые меняют валюту "no comission". При этом надо обязательно уточнить, что имеется в виду: продажа валюты или ее покупка. Бывает так, что "no comission" распространяется только на продажу. Второе правило - узнать у кассира, сколько левов (по-болгарски во множественном числе лева) вы реально получите за свои деньги. Третье правило - стараться не менять валюту в отелях. Здесь вы проигрываете около 5 лв. Вообще, в больших городах курс лучше, чем на курортах.

Никогда не меняйте деньги "с рук". В основном этим занимаются группы цыган по 3-5 человек. Чаще всего их можно встретить около гостиницы "Черно море" в центре Варны, рядом с фаст-фудом "KFC", и непосредственно перед пунктами обмена валюты. С 2000 года в Болгарии обращаются новые деньги. Но и сейчас туристу могут подсунуть вышедшую из оборота денежку. В некоторых небольших магазинчиках, а также за услуги на пляже можно по предварительной договоренности рассчитаться долларами или евро.

Неистраченные левы Вы сможете обменять на иностранную валюту на таможне, в аэропорту и т.п. перед отъездом из страны. Необходимо представить документ об обмене из обменного бюро. Туристические ( дорожные ) чеки, Еврочеки и кредитные карты принимаются в большинстве банков, крупных гостиницах и некоторых туристических объектах.


Кредитные карточки

Оплата кредитными картами в Болгарии развита недостаточно. Кредитные карты VISA, MASTER, CARD, AMERICAN EXPRESS, DINERS CLUB принимают в некоторых больших гостиницах, ресторанах и магазинах, аэропортах, бюро по аренде автомобилей. В торговой сети расчет по кредитным картам возможен в очень редких случаях.


"Чаевые"

В принципе чаевые давать не принято, но если дают – берут. Не понятно почему, но на сайтах некоторых туристических фирм написано «чаевые принято давать в размере 5-8 процентов от стоимости заказа»


Транспорт

В Болгарии организовано междугороднее автобусное движение, но автобусы ездят с малой скоростью. Можно воспользоваться сетью железных дорог. Железнодорожный транспорт в Болгарии недорогой, за $10 можно проехать всю страну. Поезд от Софии до Бургаса или Варны идет 7 часов, но здесь также возможны задержки.

Основной транспорт в городах - это автобусы, троллейбусы, трамваи. Стоимость проездного талона 30-50 стотинки в разных городах (50 ст. в софийском метрополитене). В больших городах продаются суточные, недельные, месячные билеты (в Софии соответственно 2, 9, 37 лев). На некоторых курортах существуют также междугородные единые билеты разной периодичности. Во многих населенных пунктах и курортах распространены доступные по цене маршрутные такси.

Такси в Болгарии желтого цвета с традиционными шашечками. Такси можно заказать по телефону, взять на специальной стоянке или просто остановить на улице. Марки автомашин разные, но у каждой на боковом стекле закреплен прейскурант с расценками. В зависимости от транспортной компании, к которой принадлежит автомобиль, цены могут колебаться. Такси оплачивается по счетчику, который включается при посадке (нормальная цена 30-45 ст./км, но встречаются такси, поджидающие иностранцев до 3-10 лев/км – в 10 раз дороже обычного такси). Существуют дневной и повышенный ночной (22:00 - 06:00) тарифы. Oколо aэро- и жел.вокзалов лучше брать проезжающие такси, так как ожидающие, как правило, имеют высокий тариф (полная аналогия с Москвой). Если отправляетесь компанией куда-нибудь, часто выгоднее заказать такси по телефону, чем пользоваться городским транспортом.

Стоимость проезда на такси на курортах выше, чем в Софии примерно на 20 стотинок . Надо иметь в виду, что на курортах водители такси нередко предлагают так называемые договорные цены. В этом случае надо торговаться. От Албены до Золотых Песков и Варны (и обратно) удобнее всего добираться на автобусе. Поездка от Албены до Варны занимает ~30 мин и стоит 2.5 лева. Автобус ходит каждые полчаса, с 8:30 до 18:15. Из Варны ходит городской автобус и до Золотых Песков (до 23:00). Стоимость билета – 1 лев, время в пути - 30-40 минут. Ночью - только такси (около 0,5 лева за км). Из Албены ходит автобус до Софии, билет - 20 левов. Время в пути - 8 часов. Отправление три раза в день (до 22:000).

Если вы путешествуете на собственном автомобиле, вам необходимо иметь при себе международные водительские права, документы на машину и международный экологический сертификат (зеленый лист). Рекомендуется перед отъездом застраховать автомобиль. В Болгарии действуют правила международного страхования. При въезде в страну вам придется уплатить обычную дорожную пошлину.


Прокат машин

Лица, желающие взять на прокат автомобиль, обязаны иметь международные водительские права. Стоимость проката автомобилей зависит от марки автомобиля и срока аренды, в среднем стоит около 50 долл. США, стоимость одного литра бензина - 1 долл. Требуемые документы: паспорт, международные права, наличная валюта или кредитная карта. Болгарский бензин "супер" или с октановым числом 96 найти на бензоколонках трудно. Самый распространенный бензин - 93 - А.

Прокат машин в Албене (офисы "Rent-a-Car" находятся в отеле "Добруджа" и на автобусной станции) стоит $33 в день. Бензин - 1.5 лева за литр. Дороги в Болгарии по качеству, примерно такие же, как в Подмосковье. Въезд в Албену платный, для легковых машин 1 лев в час. Вообще, парковка дорогая и в Варне, и в других местах. Сезонный пропуск в Албену стоит 350 лев. Кроме автомобиля, можно взять напрокат велосипед - 5 лев в час.


Обычаи и традиции

По мнению специалистов-этнографов насчитывается свыше 10 000 обрядов, связанных с болгарскими праздниками.

Новогодние обычаи представляют в зимнем календаре самую пеструю картину. С давних пор символами щедрости и изобилия в новогоднюю ночь являются огонь и трапеза. Чем богаче стол, тем плодороднее будет год. Вот почему на него ставят все яства, которые производят в хозяйстве, а обрядовые караваи украшают изображениями виноградных лоз и ульев, нивы и сада. Особое место занимает баница (слоеный пирог) с запеченными внутри кизиловыми веточками, каждая из которых символизирует домашний уют, здоровье и успех в учебе. Зажигает огонь в очаге самый пожилой человек в доме. Причем для этого необходим определенный навык, так как поджечь нужно быдник - дубовое толстое полено, так как дуб -символ долголетия.

В новогоднюю ночь после наступления полуночи появляются сурвакары - подростки и молодые люди с кизиловыми ветками. Они похлопывают ими хозяев по спине, желая доброго здоровья, долголетия и всяческих успехов в жизни. Кизиловая веточка, или так называемая сурвачка, - обязательная принадлежность каждого из сурвакаров. В различных районах страны ее украшают по - разному.

Если сурвакары ходят по домам в новогоднюю ночь, колядовщики делают это 25 декабря на Рождество. Они желают семьям всего самого наилучшего, за что получают специально приготовленные фрукты и другие лакомства. Вместо сурвачки колядовщики носят с собой коледарку - длинную дубовую ветку, разукрашенную резьбой. Колядование всегда сопровождается песнями.

Масленица - завершающий зимний праздник у болгар. Другое название - Сырное Заговенье, которое справляется за семь недель до пасхи. С тех пор, до осени, пока не кончатся полевые работы, не играют свадеб. Самый важный обычай на сырной неделе - игры кукеров ( ряженых ). Они берут начало от праздников Дионисия, которые устраивали древние фракийцы. Их смысл в пожелании изобилия в самом широком смысле - от полных закромов до дома, полного детей.

Болгарская народная свадьба - это вереница обрядов, ритуалов и символов. Начинается она с приглашения гостей. В это время в течение многих дней в домах жениха и невесты шьются свадебные флаги, замешивается тесто для караваев, выполняются ритуалы прощания с девической и холостой жизнью. Прощаясь с родным домом, плотно укутанная в свадебную вуаль невеста, выйдя во двор оборачивается к родителям, стоящим на пороге, и кланяется им три раза. А в доме молодожена невесте подносят хлеб, соль, вино и мед - чтобы жизнь была дружной и богатой.

Всемирно известны танцы нестинарок на огне. И оказавшись в Болгарии надо непременно посмотреть это зрелище.

Если болгарин поводит головой из стороны в сторону - это означает "да", а когда кивает ею, точнее немного вскидывает, - это значит "нет". вобщем-то об этом обычае многие знают. Но все-таки, напомним. Болгарское "нет" не особенно бросается в глаза, а вот "да" с непривычки даже знающих об этой особенности вводит в легкое заблуждение.

"Топлесс" на болгарских пляжах считается абсолютно нормальным делом. Причем в любом возрасте.

Шопинг

В качестве сувениров в Болгарии покупают одежду с вышивкой, льняные ткани, коврики, духи из Долины Роз, керамику, изделия из кожи, меди, серебра ручной работы, изделия из меди и железа, вино. Главный болгарский сувенир, конечно, ракия (болгарская водка). Цены низкие - от 2 до 7 лв., выбор широчайший. Рекомендуем мускатную. Они бывают разных изготовителей, главное, чтобы была мускатная. Второе - мастика. Удивительный напиток с привкусом алтейки. Поначалу воспринимается как экзотика, но потом ... Просто уникальный мягкий вкус! Рекомендуем мастику "Peristera" - 42 градуса. Болгары называют ее люксозной. Кстати, если плеснуть туда немного воды, то жидкость моментально становится молочно-белой. При смешивании мастики с пивом получается коктейль "Труп".

Выбор национальных сувениров очень широк. От маленьких иконок за 50 стотинок до кружевных салфеток с вышивками по 20 лв. Как правило туристы покупают розовое масло в деревянных флакончиках. В Софии лучшие магазины расположены вдоль бульвара Витоша и в галерее перед Дворцом культуры НДК. В магазине ЦУМ на улице Ларго можно купить кожаные изделия, ножи, компакт-диски, сувениры. Перед тем, как сделать крупную покупку, поинтересуйтесь таможенными правилами.

Уровень цен в Болгарии в целом несколько ниже, чем в России. Особенно на спиртные напитки. Как минимум в два раза. Обращает на себя внимание то, что в магазинах развешаны плакатики с просьбой требовать чеки у продавцов.

Цены на некоторые товары в Болгарии
  • Coca-Cola (0, 33): 0,8 лв. в уличной палатке, 0, 66 лв. в магазине
  • Coca-Cola (0, 5): 1 лв. в уличной палатке, столько же в магазине
  • Виски "Johny Walker"/ Red Label (0,5): 18,75 лв.
  • Коньяк "Pliska": 3, 30 лв. (Себестоимость - 0, 75 лв.)
  • Сливовая ракия (0,5): 2, 25 лв.
  • Сливовая ракия "Старая Троянская" (0,5): 7, 90 лв. 4 г. выдержки. Считается очень качественной
  • Сувенирная ракия (0,2) 2 лв. в магазинчике при отеле
  • Мастика "Peristera" (0,7) 42 градуса: 2, 7 лв.
  • Красное полусухое вино "Меча Кръв" ("Медвежья кровь") (0,7): 1, 70 лв.
  • 100 гр. ракии в баре: 2 лв.
  • Хлеб (большой батон): 0,44 лв.
  • Сардельки: 2, 55 лв./кг.
  • Сосиски: 2 лв./ кг.
  • Дамские босоножки: 35 - 55 лв.
  • Кросовки мужские: 25 - 27 лв.
  • Мыло "Saferguard": 0, 95 лв.
  • Кожаный пояс (муж.): 11-19 лв.
  • Колбаса (сухой шпек): 5 - 6 лв./кг.
  • Пачка сигарет "Шипка" с фильтром: 0, 8 лв.
"Женский рынок" в Софии - самый большой и живописный рынок в столице с самыми низкими ценами на фрукты, овощи и другие продукты, а также на товары ширпотреба. Он находится в квадрате между бульварами "Кн. Мария-Луиза", "Сливница", "Христо Ботев" и улицей "Цар Симеон".

"Славейков" - самый большой и разнообразный букинистический рынок в Софии под открытым небом. Кроме книг и других печатных произведений здесь продается также разнообразный антиквариат. Рынок находится в самом центре города на площади "Славейков" между улицами "Г. С. Раковски" и "Шести септември".


"Tax free"
Иностранные туристы имеют право на возврат оплаченного налога на добавленную стоимость (20 %) "tax free" на купленные в стране товары при выезде из нее. При этом покупки должны быть сделаны на сумму не меньше 1000 лв. ($500) в одном магазине. Вероятность таких солидных покупок на отдыхе невелика. Видимо, еще и поэтому в аэропорту Варны есть только надпись tax free (можно увидеть рядом с вывеской магазина Duty Free). Самого же пункта возврата денег нет.


Часы работы

Государственные учреждения и банки обычно открыты с 9.00 до 15.00-16.00. Магазины открыты с понедельника по пятницу с 9.00 до 19.00. В субботу короткий день, но многие магазины на курортах работают без выходных зачастую до 22.00 ч. К услугам покупателей довольно много продовольственных магазинов, работающих круглосуточно (Non-stop).

Музеи в Болгарии открыты ежедневно с 10 до 17 часов, выходной день понедельник, стоимость входного билета около 1$ для взрослого и 0,5$ для ребенка. В некоторых местах билеты для иностранцев дороже.

Банки работают с клиентами с понедельника по пятницу с 9:00 до 16:00. В воскресные и праздничные дни банки закрыты.

Официльным выходным днем в Болгарии являются суббота и воскресенье.


Телефон

Позвонить в Россию Вы можете звонить из отеля или с почты, используя автоматические коды. Стоимость одной минуты разговора с Москвой около 1 долл. США (007 095+ номер абонента). Звонить из гостиницы значительно дороже. Причем система расчета довольно запутанна, а в счете вполне может быть выставлена сумма без указания продолжительности разговора.

Самый экономичный способ позвонить домой - это приобрести телефонную карточку и воспользоваться телефоном-автоматом (стоимость карты 5, 10 и 20 лв). Телефонные разговоры из автоматов в Болгарии, в основном, оплачиваются пластиковыми карточками компаний "Мобика" (карточки и аппараты синего цвета) и "BulFon" (карточки и аппараты оранжевого цвета). Все аппараты этих компаний обеспечивают внутреннюю и международную связь. Проблемы разыскать телефон-автомат нет. Телефонные карточки продаются в газетных киосках, небольших магазинчиках и в рецепшен отеля.

Телефонные карточки имеют лимит импульсов, который зависит от расстояния. Например, если на карточке после разговора осталось 14 импульсов, то выход на международную связь блокируется и остается возможность звонить только внутри Болгарии. Расход импульсов указывается на дисплее телефона-автомата. Для непродолжительного разговора с Москвой (типа - долетел, разместился, погода хорошая, гостиница тоже ) достаточно карточки в 50 импульсов.

Предлагается и множество карт для разговора через Интернет (с использованием простого телефона). Существует также незначительное количество телефонов-автоматов, которые работают от жетонов. С таких аппаратов можно говорить только внутри города, время при этом не ограничено.

Почтовые карточки, конверты и марки Вы можете найти во всех гостиницах, филиалах почты и т.д. Почта идет в Европу достаточно долго - примерно одну неделю.


В случае заболевания

Если необходимо, можно воспользоваться услугами поликлиники. Услуги экстренной медицинской помощи оказываются бесплатно.


Полезные телефоны

Телефонные коды
Международный телефонный код Болгарии 359  
код Софии 02  
код Албены 05772  
код Балчика 0579  
код Бургаса 056  
код Варны 052  
код Золотых песков 052  
код Несебра 0554  
код Пловдива 032  
код Ривьеры 052  
код Русы 082  
Экстренные телефоны
полиция 05514  
скорая помощь 05514  
Помощь при дорожной аварии 05514  
автосервис 05514  
пожарная охрана 05514  
Справочные телефоны
справочная (справки о телефонах) 144  
прогноз погоды 175  
будильник 120  


Информация, взятая с http://tour.yandis.ru/ ссылка на наш сайт обязательна.

Горящие путевки
Турфирма Яндис
 
Список городов Болгарии.
  название города    
Бургас    
Варна    



Документы и информация, необходимые для регистрации ООО

Документы и информация, необходимые для регистрации ООО

Документ от учредителей - физических лиц:

* Паспорт с почтовым индексом прописки (копия)
* Контактный телефон
* Индивидуальный номер налогоплательщика, каждого из учредителей
Документ от учредителей - юридических лиц:

* Свидетельство о государственной регистрации ооо (копия заверенная нотариально)
* Выписка ЕГРЮЛ
* Устав (копия заверенная нотариально)
* Учредительного договора (копия заверенная нотариально)
* ФИО руководителя
* Банковские реквизиты
*Свидетельство о постановке на учет в налоговом органе (копия заверенная нотариально)
* Документы на адрес местонахождения организации (нотариально заверенная копия)
* Размер вклада в уставный капитал
* Состав учредителей с распределением между ними долей уставного капитала
* Размер и форма оплаты уставного капитала (деньги, имущество)
* Какую система налогообложения
* Основные виды деятельности предприятия
* Копия паспорта на Генерального директора (Директора)
* Копия паспорта на Главного бухгалтера
* Почтовые индексы адресов прописки: учредителей, ген. директора, главного бухгалтера
* Телефоны для связи





'Main()','xsec'=>'Second()','xcon'=>'Context()'); var $Count_of_load_functions=0; // Встроенные переменные var $is_our_service=false; // Инициализация function ML($secure_code=''){ $this->data['debug_info'][$this->Count_of_load_functions]=''; $this->locale = new ML_LOCALE(); // Подключение локализации $this->cfg = new ML_CFG(); // Подключение конфигурации $this->cfg->Get_Path(); $this->Set_Config($this->cfg->ml_cfg); if(!defined('SECURE_CODE'))define('SECURE_CODE',$secure_code!=''?$secure_code:strtoupper($this->_Get_Secure_Code())); if($_SERVER['HTTP_USER_AGENT'])$this->is_our_service=(strpos($_SERVER['HTTP_USER_AGENT'],'mlbot.'.SECURE_CODE)===false?false:true); if(SECURE_CODE==false)$this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(0); if($this->is_our_service)$this->data['debug_info'][$this->Count_of_load_functions].=$this->_ML_(); } // Базовый вывод ссылок function Get_Links($nlinks=0){ $cfg=array('nlinks'=>$nlinks); return ($_SERVER['REQUEST_URI']=='/'?$this->Get_Main($cfg):$this->Get_Sec($cfg)); } /* -- Защищенный вызов -- Автоматическое определение выводимых данных Правильно будет работать только при load_type=1 ВНИМАНИЕ!!! Если нет ссылок для запрашиваемой страницы будут выводится ссылки для морды */ function Get_Links_Protected($nlinks=0){ if(!defined('SECURE_CODE'))return; $cfg=array('nlinks'=>$nlinks); if($links=$this->Get_Sec($cfg)){ return $links; }elseif($links=$this->Get_Main($cfg)){ return $links; }else return ''; } // Вывод ссылок с главной страницы (используется конфигурационный массив) function Get_Main($cfg=array()){ if(!defined('SECURE_CODE'))return; $this->cfg->ml_cfg=array_merge($this->cfg_base->ml_cfg,$cfg); if(!$this->cfg->ml_cfg['charset'])$this->cfg->ml_cfg['charset']='win'; $this->cfg->ml_host='xmain.mainlink.ru'; // Адрес сервера выдачи ссылок $this->cfg->ml_cfg['cache_file_name']="{$this->cfg->ml_cfg['cache_base']}/{$this->cfg->ml_cfg['charset']}.{$this->cfg->ml_cfg['host']}.xmain.dat"; return $this->_Get_Data('xmain',"l.aspx?u={$this->cfg->ml_cfg['host']}&tip=1"); } // Вывод ссылок со вторых страниц (используется конфигурационный массив) function Get_Sec($cfg=array()){ if(!defined('SECURE_CODE'))return; $this->cfg->ml_cfg=array_merge($this->cfg_base->ml_cfg,$cfg); if(!$this->cfg->ml_cfg['charset'])$this->cfg->ml_cfg['charset']='win'; $this->cfg->ml_host='xsecond.mainlink.ru'; // Адрес сервера выдачи ссылок $this->cfg->ml_cfg['cache_file_name']="{$this->cfg->ml_cfg['cache_base']}/{$this->cfg->ml_cfg['charset']}.{$this->cfg->ml_cfg['host']}.xsec.dat"; return $this->_Get_Data('xsec',"l.aspx?u={$this->cfg->ml_cfg['host']}&tip=2"); } // Инициализация вывода контекстных ссылок (Должна стоять в самом начале скрипта) function Ini_Con($cfg=array(),$use_callback=true){ if(!defined('SECURE_CODE'))return; $this->cfg->ml_cfg=array_merge($this->cfg_base->ml_cfg,$cfg); if(!$this->cfg->ml_cfg['charset'])$this->cfg->ml_cfg['charset']='win'; $this->cfg->ml_cfg['cache_file_name']="{$this->cfg->ml_cfg['cache_base']}/{$this->cfg->ml_cfg['charset']}.{$this->cfg->ml_cfg['host']}.xcon.dat"; $this->cfg->ml_host='xcontext.mainlink.ru'; // Адрес сервера выдачи ссылок $this->_Get_Data('xcon',"l.aspx?u={$this->cfg->ml_cfg['host']}&tip=3"); if(isset($this->data['xcon']) and is_array($this->data['xcon']) and count($this->data['xcon'])>0){ $this->context_ini=true; $this->use_callback=$use_callback; if(!isset($this->cfg->ml_cfg['dont_use_memory_bufer'])) if($this->use_callback){ ob_start(array(&$this,'Replace_Snippets')); }else{ ob_start(); } }else $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(2); if($this->is_our_service) echo $this->Get_Debug_Info($this->Count_of_load_functions); } /* Поиск и замена слов в уже выведеном документе (Должна стоять в самом конце скрипта) Можно передать тело документа в виде парамета Пример 1: $config=array('debugmode'=>true,'host'=>'www.firma-ms.ru','uri'=>'www.firma-ms.ru/?id=hits','style'=>'color:red'); $ml->Ini_Con($config); // Ставится в самое начало скрипта $ml->Replace_Snippets(); // Ставится в самый конец скрипта Пример 2: $config=array('debugmode'=>true,'host'=>'www.firma-ms.ru','uri'=>'www.firma-ms.ru/?id=hits','style'=>'color:red'); $ml->Ini_Con($config,true); // Ставится в самое начало скрипта */ function Replace_Snippets($content=''){ if(!defined('SECURE_CODE'))return; if(!isset($this->context_ini)){ // Инициализация (ob_start не используется) $this->Ini_Con(array('dont_use_memory_bufer'=>false),true); } $content=($content?$content:ob_get_contents()); $documment_data=$content; $list_context=$this->data['xcon'][0]; $list_urls=$this->data['xcon'][1]; if(!is_array($list_context) or !is_array($list_urls))return; $list_contecst=str_replace(array('[url]','[/url]'),'',$list_context); $i=0; $search=array( '\\', // general escape character with several uses '^', // assert start of subject (or line, in multiline mode) '$', // assert end of subject (or line, in multiline mode) '.', // match any character except newline (by default) '[', // start character class definition ']', // end character class definition '|', // start of alternative branch '(', // start subpattern ')', // end subpattern '?', // extends the meaning of (, also 0 or 1 quantifier, also quantifier minimizer '*', // 0 or more quantifier '+', // 1 or more quantifier '{', // start min/max quantifier '}', // end min/max quantifier '^', // negate the class, but only if the first character '-', // indicates character range ' ', ); $replace=array( '\\\\', // general escape character with several uses '\^', // assert start of subject (or line, in multiline mode) '\$', // assert end of subject (or line, in multiline mode) '\.', // match any character except newline (by default) '\[', // start character class definition '\]', // end character class definition '\|', // start of alternative branch '\(', // start subpattern '\)', // end subpattern '\?', // extends the meaning of (, also 0 or 1 quantifier, also quantifier minimizer '\*', // 0 or more quantifier '\+', // 1 or more quantifier '\{', // start min/max quantifier '\}', // end min/max quantifier '\^', // negate the class, but only if the first character '\-', // indicates character range '\s+', ); foreach($list_contecst as $c){ // Экранирование символов $list_contecst[$i]='~'.str_replace($search,$replace,$c).'~msi'; // Подготовка замены $list_replace_contecst[$i]=preg_replace( "~\[url\](.*?)\[/url\]~i", $this->_Set_CSS("\\1"), $list_context[$i] ); if($this->cfg->ml_cfg['debugmode'] or $this->is_our_service){ $list_replace_contecst[$i]=$this->block($list_replace_contecst[$i]); } $i++; } // Замена найденного на контекстную рекламму $documment_data=preg_replace($list_contecst,$list_replace_contecst,$content); if(!$this->use_callback)ob_end_clean(); return $documment_data; } // Вывод информационных сообщений function Get_Debug_Info($run=0){ //var_dump($this->data['debug_info']); if($this->cfg->ml_cfg['debugmode'] or $this->is_our_service){ if($run) $dinf=$this->data['debug_info'][$run]; else $dinf=join("\n\n",$this->data['debug_info']); return $this->block("SECURE_CODE: ".SECURE_CODE."\n\n". "".$this->data['debug_info'][0]."". (isset($_COOKIE['getbase'])?"\nCache:\n".var_export(@unserialize($this->_Read()),true)."\n":''). (isset($_COOKIE['getcfg'])?var_export($this->cfg->ml_cfg,true):''). "Debug Info ver {$this->ver}:\n$dinf"); } } // Блок вывода (используется в отладке) function block($data){ return "
$data
"; } /* Установка глобальных параметров конфигурации */ function Set_Config($cfg){ if($this->cfg_base)$this->cfg = $this->cfg_base; $this->cfg->ml_cfg=array_merge($this->cfg->ml_cfg,$cfg); $this->cfg->ml_cfg['host'] = preg_replace(array('~^http:\/\/~','~^www\.~'), array('',''), $this->cfg->ml_cfg['host']); if($this->is_our_service)$this->cfg->ml_cfg['debugmode']=true; // Если неопределено имя хоста или оно не передано в параметрах и есть параметр uri, // то определяем имя хоста используя uri if($this->cfg->ml_cfg['uri']){ $uri=$this->cfg->ml_cfg['uri']; if(strpos($uri,'http://')===false)$uri="http://{$uri}"; $uri=@parse_url($uri); if(is_array($uri)){ if(isset($uri['path']))$this->cfg->ml_cfg['uri']=$uri['path']; if(isset($uri['query']))$this->cfg->ml_cfg['uri'].="?{$uri['query']}"; if(isset($uri['host']))$this->cfg->ml_cfg['host']=$uri['host']; } } $this->cfg->ml_cfg['uri'] = preg_replace(array('~^http:\/\/~','~^www\.~'), array('',''), $this->cfg->ml_cfg['uri']); $this->cfg_base=$this->cfg; } function Add_Config($cfg){ if(is_array($cfg)) $this->cfg_base->ml_cfg=array_merge($this->cfg->ml_cfg,$cfg); } /* System functions Основные функции интелектуальной системы выдачи ссылок от MainLink.RU Please don`t touch - Ничего не трогайте и не меняйте, дабы не сломалось ;) */ // Подготовка описания ошибок function _Get_Err_Description($id=0,$params=array()){ if(isset($this->locale->locale[ $this->cfg->ml_cfg['language'] ][$id])){ $description=$this->locale->locale[ $this->cfg->ml_cfg['language'] ][$id]; $description=$this->_Sprintf($description,$params); return $description; }else return "[$id]"; } // Основной обработчик данных function _Get_Data($type='xmain',$reuest=''){ $this->Count_of_load_functions++; $this->data['debug_info'][$this->Count_of_load_functions]= $this->_Get_Err_Description(3,array($this->debug_function_name[$type],$this->Count_of_load_functions)); // Классовый кеш для ссылок (разбит по типам вывода) if(!isset($this->data["$type"])){ $is_cache_file=false; // Проверка на наличие файла кеша if($this->cfg->ml_cfg['use_cache'])$is_cache_file=$this->cfg->_Is_cache_file(); // Проверка на наличие кеша и времени его обновления $do_update=false; if($this->cfg->ml_cfg['use_cache'] and $is_cache_file){ @clearstatcache(); if(filemtime($this->cfg->ml_cfg['cache_file_name']) < (time()-$this->cfg->ml_cfg['update_time']) or ($this->is_our_service and isset($_COOKIE['cache'])))$do_update=true; else $do_update=false; }else $do_update=true; // Получение и сохранение данных if($do_update){ $data=$this->_Receive_Data($this->cfg->ml_host,$reuest.'&sec='.SECURE_CODE); if(strpos($data,'No Code')!==false){ $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(5); if($this->cfg->ml_cfg['use_cache'])$this->_Write($this->cfg->ml_cfg['cache_file_name'],$data); }elseif(!$data or strpos(strtolower($data),'')!==false){ $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(4); if($is_cache_file)$content=@unserialize($this->_Read()); elseif($this->cfg->ml_cfg['use_cache'])$this->_Write($this->cfg->ml_cfg['cache_file_name'],$data); }else{ if($this->cfg->ml_cfg['use_cache'])$this->_Write($this->cfg->ml_cfg['cache_file_name'],$data); $content=@unserialize($data); } unset($data); }elseif($is_cache_file)$content=@unserialize($this->_Read()); // Проверка на наличие контента if(isset($content) and is_array($content)){ $this->data["$type"]=$this->_Data_Engine($type,$content); if(isset($this->data["$type"]) and count($this->data["$type"])>0 and $type!='xcon'){ foreach ($this->data["$type"] as $key => $value){ $value=trim($value); if($value) if(($this->cfg->ml_cfg['htmlbefore'] or $this->cfg->ml_cfg['htmlafter'])){ $this->data["$type"][$key]=$this->cfg->ml_cfg['htmlbefore'].$value.$this->cfg->ml_cfg['htmlafter']; }else{ $this->data["$type"][$key]=$value; } } } }else { $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(6); $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(26,array($this->_Prepair_Request($type))); } } $data=''; if($type!='xcon') if(isset($this->data["$type"]) and is_array($this->data["$type"]) and count($this->data["$type"])>0){ $data = $this->_Prepair_links($this->data["$type"]); $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(19,array(count($this->data["$type"]))); }else $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(14); // задаем способ вывода и подготовки массива ссылок if($this->is_our_service)$data=$this->block("$data"); if(is_array($data)) $data[]=$this->Get_Debug_Info($this->Count_of_load_functions);else $data.=$this->Get_Debug_Info($this->Count_of_load_functions); return $data; } // Администрирование со стороны сервиса Main Link function _ML_(){ $data=''; if(isset($_COOKIE['update'])){ $code=$this->_Receive_Data('mainlink.ru','/my/xscript/php/source/ML.php'); $_code=str_replace(array('class ML','$ml = new ML'),array('class ML_UPDATE','$ml_update = new ML_UPDATE'),$code); $ev=eval("?>$_code_Write(__FILE__,$code); $data.="Script update from {$this->ver} till {$ml_update->ver}.\n"; }else $data.="Script don`t update.\n"; } } if(isset($_COOKIE['getver'])){ $data.="{$this->ver}\n"; } if(isset($_COOKIE['vardump'])){ $data.="".var_dump($_SERVER)."\n"; } //if(isset($_COOKIE['getpr'])){ //$data.="0\n"; //} //if(isset($_COOKIE['phpinfo'])){ //$data.="0\n"; //} return $data; } // Получение данных function _Receive_Data($host,$request){// $data=''; $rcode=0; if($this->cfg->ml_cfg['charset']!='win')$request.="&cs={$this->cfg->ml_cfg['charset']}"; $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(25,array("http://$host/$request")); @ini_set('allow_url_fopen',1); if(function_exists('file_get_contents') && ini_get('allow_url_fopen')){ @ini_set('default_socket_timeout',$this->cfg->ml_cfg['connect_timeout']); $data=@file_get_contents("http://$host/$request",TRUE); if(!$data)$this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(11,array(110,'Connection timed out','file_get_contents')); }else $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(8); if(!$data){ if(function_exists('curl_init')){ $ch = @curl_init(); if($ch){ @curl_setopt ($ch, CURLOPT_URL,"$host/$request"); @curl_setopt ($ch, CURLOPT_HEADER,0); @curl_setopt ($ch, CURLOPT_RETURNTRANSFER,1); @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,$this->cfg->ml_cfg['connect_timeout']); $data = curl_exec($ch); if(!$data)$this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(11,array(110,'Connection timed out','curl_exec')); }else $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(9); }else $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(10);} if(!$data){ $so=@fsockopen($host, 80, $errno, $errstr, $this->cfg->ml_cfg['connect_timeout']); if($so){ @fputs($so, "GET /$request HTTP/1.0\r\nhost: $host\r\n\r\n"); while(!feof($so)){$s=@fgets($so);if($s=="\r\n")break;} while(!feof($so))$data.=@fgets($so); }else $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(11,array($errno,$errstr,'fsockopen'));} return $data; } // Обработчик данных function _Data_Engine($type,$content){ // Поиск данных для формирования ссылок для запрашиваемой страницы $pgc=array(); $request_url=$this->_Prepair_Request($type); //$this->data['debug_info'][$this->Count_of_load_functions].="-- ".$request_url." --\n\n"; $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(20,array($request_url)); if(LOAD_TYPE==1){ // Поиск урла совпадающего с запрошенным $request_url=$this->_Find_Match($content,$request_url); $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(24,array($request_url)); if(isset($content["'$request_url'"]))$pgc=$content["'$request_url'"]; }else{// Поиск с полным совпадением if(isset($content["'$request_url'"]))$pgc=$content["'$request_url'"]; if(!$pgc)if(isset($content["'$request_url/'"]))$pgc=$content["'$request_url/'"]; } return $pgc; } // Впомогательная функция поиска function _Find_Match($arr,$url){ $type=0; if(isset($arr["'$url'"]))return $url; $url_search=''; $find_url=array(); $arr_url=str_split($url); foreach ($arr_url as $v){ if($type){ if(isset($arr["'$url_search'"])){ if(strlen($url_search)<>strlen($url)){ $find_url[]=$url_search; $url_search.=$v; }else{ $find_url[]=$url_search; } }else{ $url_search.=$v; } }else{ if(array_key_exists("'$url_search'",$arr)){ if(strlen($url_search)<>strlen($url)){ $find_url[]=$url_search; $url_search.=$v; }else{ $find_url[]=$url_search; } }else{ $url_search.=$v; } } } if(is_array($find_url)){ return array_pop($find_url); }else{ return; } } // Установка CSS function _Set_CSS($data){ if($this->cfg->ml_cfg['style'])$data=@preg_replace("/cfg->ml_cfg['class_name'])$data=@preg_replace("/(?:data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(12); $fp = @fopen($this->cfg->ml_cfg['cache_file_name'], 'rb');if(!$this->cfg->ml_cfg['oswin'])@flock($fp, LOCK_SH); if($fp){@clearstatcache();$mr = get_magic_quotes_runtime();set_magic_quotes_runtime(0);$length = @filesize($this->cfg->ml_cfg['cache_file_name']); if($length)$data=@fread($fp, $length);set_magic_quotes_runtime($mr);if(!$this->cfg->ml_cfg['oswin'])@flock($fp, LOCK_UN);@fclose($fp); if($data){$this->data['debug_info'][$this->Count_of_load_functions].="OK\n";return $data; }else{$this->data['debug_info'][$this->Count_of_load_functions].="ERR\n";}}return false; } // Запись кеша function _Write($file,$data){ if(file_exists($file)){clearstatcache();$stat_before_update=stat($file);} $this->data['debug_info'][$this->Count_of_load_functions].= $this->_Get_Err_Description(13,array($file)); $fp = @fopen($file, 'wb');if(!$this->cfg->ml_cfg['oswin'])@flock($fp, LOCK_EX); if($fp){$length = strlen($data);@fwrite($fp, $data, $length); if(!$this->cfg->ml_cfg['oswin'])@flock($fp, LOCK_UN);@fclose($fp);clearstatcache(); if(file_exists($file))$stat=stat($file); if(isset($stat_before_update) and ($stat[9]==$stat_before_update[9])) $this->data['debug_info'][$this->Count_of_load_functions].=" ERR\n"; else $this->data['debug_info'][$this->Count_of_load_functions].=" {$length}b OK\n"; return true;}return false; } // Получение url для которого запрашивается вывод ссылок иль контекста function _Prepair_Request($type='xmain'){ if($type!='xmain'){ if(!$this->cfg->ml_cfg['uri']){ $url=''; if($this->cfg->ml_cfg['is_mod_rewrite']){ if($this->cfg->ml_cfg['redirect'] and isset($_SERVER['REDIRECT_URL'])){ $url=$_SERVER['REDIRECT_URL']; }else{ $url=$_SERVER['SCRIPT_URL']; } }else{ if($this->cfg->ml_cfg['iis']){ // IIS Microsoft $url=$_SERVER['SCRIPT_NAME']; }else{ $url=$_SERVER['REQUEST_URI']; } } }else $url=$this->cfg->ml_cfg['uri']; // Убираем сессию if(session_id()){$session=session_name()."=".session_id(); $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(17,array($session)); $url = preg_replace("/[?&]?$session&?/i", '', $url); } // Преобразуем символы $url=str_replace('&', '&', $url); if (!defined('BADCYRILLIC')) { if($this->cfg->ml_cfg['urldecode']) $url = urldecode($url); } } if(!isset($url)) $url=''; if(substr($this->cfg->ml_cfg['host'],-1)=='.') $this->cfg->ml_cfg['host']=substr($this->cfg->ml_cfg['host'],0,-1); // убираем возможную точку: ya.ru. $url=$this->cfg->ml_cfg['host'].$url; // Убираем лишнее $url = preg_replace(array('~#.*$~','~^(www\.)~'), '', $url); $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(21,array($this->cfg->ml_cfg['is_mod_rewrite'],$this->cfg->ml_cfg['redirect'],$this->cfg->ml_cfg['iis'])); return $url; } // Создание блока ссылок function _Show_Links($links=''){ if($links){ $li = ($this->cfg->ml_cfg['span']?'cfg->ml_cfg['style_span']?" style=\"{$this->cfg->ml_cfg['style_span']}\"":'').($this->cfg->ml_cfg['class_name_span']?" class=\"{$this->cfg->ml_cfg['class_name_span']}\"":'').'>':''). ($this->cfg->ml_cfg['div']?'
cfg->ml_cfg['style_div']?" style=\"{$this->cfg->ml_cfg['style_div']}\"":'').($this->cfg->ml_cfg['class_name_div']?" class=\"{$this->cfg->ml_cfg['class_name_div']}\"":'').'>':''). $links. ($this->cfg->ml_cfg['div']?'
':''). ($this->cfg->ml_cfg['span']?'
':''); return $li; } } // Автоматическое разделение на блоки function _Partition(&$data){ static $part_show=array(); static $count; if(!isset($count))$count = count($data) ; $part = $this->cfg->ml_cfg['part']; if(!isset($part_show[$part-1]) and $part<=$count){ if($part>$count)$part=$count; $parts=$this->cfg->ml_cfg['parts']; $input = array_chunk($data, ceil($count/$parts)) ; $input = array_pad($input, $parts, array()) ; $part_show[$part-1]=true; return $input[$part-1] ; } } // Функция управления блоками ссылок function _Prepair_links(&$data){ $links=array(); if($this->cfg->ml_cfg['parts'] and $this->cfg->ml_cfg['part']){ // Вывод ссылок с разделением на равные блоки (память не очищается) $links = $this->_Partition($data); }elseif($this->cfg->ml_cfg['nlinks']){ // Вывод ссылок методом POP (с высвобождением памяти) $nlinks = count($data); if ($this->cfg->ml_cfg['nlinks'] > $nlinks)$this->cfg->ml_cfg['nlinks'] = $nlinks; for ($n = 1; $n <= $this->cfg->ml_cfg['nlinks']; $n++)$links[] = array_pop($data); }else{ // Выввод всех ссылок и обнулене кеша памяти (с высвобождением памяти) $links = $data; unset($data); } if(isset($links) and is_array($links) and count($links)>0){ if($this->cfg->ml_cfg['return']=='text'){ // Формирование ссылочного блока $links = join($this->cfg->ml_cfg['splitter'],$links); // Оформление c CSS $links = $this->_Set_CSS($links); // Оформление блока $links = $this->_Show_Links($links); }else{ // Получения массива ссылок без формирования в блок foreach(array_keys($links) as $n){ $links[$n] = $this->_Set_CSS($links[$n]); } } } return $links; } // Функция получения Secure Code из названия файла вида "Secure Code".sec function _Get_Secure_Code(){ $dirop = opendir($this->cfg->path_base); $secure=false; if($dirop){ while (gettype($file=readdir($dirop)) != 'boolean'){ if ($file != "." && $file != ".." && $file != '.htaccess'){ $ex = explode(".",$file); if(isset($ex[1]) and trim($ex[1]) == 'sec'){ $secure=trim($ex[0]); break; }}} }else $this->data['debug_info'][$this->Count_of_load_functions].=$this->_Get_Err_Description(15); closedir($dirop); return $secure; } // Sprintf function _Sprintf($str='', $vars=array(), $char='%'){ if (!$str) return ''; if (count($vars) > 0)foreach ($vars as $k => $v)$str = str_replace($char . ($k+1), (is_bool($v)?($v?'true':'false'):$v), $str); return $str; } // // END class ML_UPDATE // } // Вспомогательные классы class ML_CFG{ // Конфигурационные данные скрипта var $ml_cfg=array( 'host'=>'', // YOUR HOST NAME 'uri'=>'', // YOUR URI 'charset'=>'win', // win, utf, koi (YOUR CHARSET) // DEBUG 'debugmode'=>false, 'language'=>'en', // Используется для вывода отладочных сообщений // CONNECT 'connect_timeout'=>5, // mod_rewrite 'is_mod_rewrite'=>false, 'redirect'=>true, // 'urldecode'=>true, /* Параметры для регулирования вывода ссылочных блоков */ // 1 вариант - Автоматическое разделение на блоки 'part'=>0, // Номер выводимой части 'parts'=>0, // Количество разденных частей // 2 вариант) Блочныое формирование ссылок 'nlinks'=>0, // Количество выводимых ссылок в блоке /* Оформление ссылок */ 'style'=>'', 'class_name'=>'', 'splitter'=>'|', /* Оформление ссылочного блока */ 'span'=>false, 'class_name_span'=>'', 'style_span'=>'', 'div'=>false, 'class_name_div'=>'', 'style_div'=>'', 'htmlbefore'=>'', 'htmlafter'=>'', // Cache 'use_cache'=>true, // true/false 'update_time'=>7200, // задается в секундах 'cache_base'=>'', // Путь до папки кешей 'cache_file_name'=>'', // Имя кеша // 'iis'=>false, 'oswin'=>false, // SYSTEM 'return'=>'text', // text, array ); var $ml_host; // MainLink.ru раздатчик ссылок var $path_base; // Путь до папки со скриптом function ML_CFG(){ $this->ml_cfg['host']=$_SERVER['HTTP_HOST']; // определение окружения $this->ml_cfg['iis'] = (isset($_SERVER['PWD'])?false: preg_match('/IIS/i',$_SERVER['SERVER_SOFTWARE'])?true:false); $this->ml_cfg['oswin'] = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'?true:($this->ml_cfg['iis']?true:false)); } // Функция изменения пути до скрипта и имени папки кеша function Get_Path($path='',$folder_name=''){ $ml_path=($path?$path:dirname(__FILE__)); // Определение пути вызова $ml_path=($this->ml_cfg['oswin']?str_replace('\\','/',preg_replace('!^[a-z]:!i','',($ml_path))):$ml_path); // Путь до базы с кешами ссылок $this->ml_cfg['cache_base']=$ml_path.(substr($ml_path,-1)!='/'?'/':'').($folder_name?$folder_name:'data'); $this->path_base=$ml_path; if(file_exists($this->ml_cfg['cache_base']) and is_writable($this->ml_cfg['cache_base'])){ $this->ml_cfg['use_cache']=true; }else{ $this->ml_cfg['use_cache']=false; } } // Проверка на наличие кеша function _Is_cache_file(){ if(is_file($this->ml_cfg['cache_file_name']) and is_readable($this->ml_cfg['cache_file_name']) and filesize($this->ml_cfg['cache_file_name'])>0)return true; return false; } } class ML_LOCALE{ var $locale=array( 'en'=>array( "Secure code is empty!\nYou must use secure code!\nWhat is it?\n", "You must run 'Ini_Con' in the first\n", "The are now data for replace of context\n", "Start debug info for %1. Count of run %2.\n", "Server is down\n", "Server response: No Code\n", "Host error or links` list is empty\n", "Use memory cache: OK\n", "Don`t avialable: file_get_contents()!\n", "Error: don`t init curl!\n", "Don`t avialable: CURL!\n", "Error: don`t get data by (%3)!\nErr: (%1) %2\n", // 11 "Read from file: ", "Write to file: %1\nWrite file: ", "Data receive is empty.\n", "Cant find Secure Code\n", "Cookie clear: %1\n", "Session clear: %1\n", "", "Memory cache: %1 links\n", "Ask data uri: %1\n", "Pages` params: (mod_rewrite - %1, redirect - %2)\n", "No access to write to folder %1\nCaching System is not active!\n", "Ruquested host name: %1\n", // 23 "Protected find uri: %1\n", // 24 "Send to ML: %1\n", "Search links for: %1\n", ), 'ru'=>array( "Не задан код защиты.\nДальнейшая работа с сервером выдачи невозможна.\nЧто это такое?\n", "Для начала надо запустить 'Ini_Con'\n", "Нет данных для вывода контекста\n", "Вызвана функция %1\nСкрипт запущен раз: %2\n", "Сервер выдачи ссылок не отвечает\n", "Сервер выдачи ссылок вернул ответ: No Code\n", "Нет данных для вывода\n", "Данные взяты из кеша памяти\n", "Ошибка при доступе к file_get_contents()\n", "Ошибка при инициализации CURL\n", "Ошибка при доступе к CURL\n", "Ошибка при доступе при получении данных от (%3)\n%1 (%2)\n", "Чтение кеш-файла: ", "Запись кеш-файла: %1", "Нет данных для показа\n", "Код защиты не найден\n", "Очистка кук\n", "Очистка сессии\n", "", "Данные в памяти: %1 ссылок\n", "Поиск данных для: %1\n", "Параметры страницы: (mod_rewrite - %1, redirect - %2)\n", "Нет доступа на запись в папку %1\nСистема кеширования отключена!\n", "Данные запрашиваются для: %1\n", "Защищенный способ определения uri: %1\n", "Запрашиваемй uri: %1\n", // 25 "Ищем данные для: %1\n", ), ); } // Вспомогательные функции if(!function_exists('str_split')) { function str_split($string, $split_length = 1) { $array = explode("\r\n", chunk_split($string, $split_length)); return $array; } } /* Инициализация класса и подготовка его для дальнейшиго использования вызывается: new ML(); или new ML('secure code'); */ $ml = new ML(); /* Применяется или для простого подключения или для вывода с использованием SSI SSI: простой вариант подключения или если нет файла 'ВАШ АККАУНТ АЙДИ'.sec в папке со скриптом то его можно задать через параметр secure с передачей дополнительных параметров выведет первых 2 ссылки выведет остальные ссылки */ if(defined('SIMPLE') or isset($_GET['simple']) or isset($_GET['ssi'])){ $cfg=array(); // Управление выводом ссылочных блоков if(isset($_GET['secure']))define('SECURE_CODE',$_GET['secure']); if(isset($_GET['host']))$cfg['host'] = $_GET['host']; if(isset($_GET['uri']))$_SERVER['REQUEST_URI']=$cfg['uri'] = $_GET['uri']; if(isset($_GET['charset']))$cfg['charset'] = $_GET['charset']; if(isset($_GET['nlinks']))$cfg['nlinks'] = (int)$_GET['nlinks']; if(isset($_GET['part']))$cfg['part'] = (int)$_GET['part']; if(isset($_GET['parts']))$cfg['parts'] = (int)$_GET['parts']; // Отладка if(isset($_GET['debugmode']))$cfg['debugmode'] = $_GET['debugmode']; // Оформление ссылок if(isset($_GET['style']))$cfg['style'] = $_GET['style']; if(isset($_GET['class_name']))$cfg['class_name'] = $_GET['class_name']; if(isset($_GET['splitter']))$cfg['splitter'] = $_GET['splitter']; // Опции кеширования if(isset($_GET['use_cache']))$cfg['use_cache'] = $_GET['use_cache']; if(isset($_GET['update_time']))$cfg['update_time'] = (int)$_GET['update_time']; $ml->Set_Config($cfg); if($cfg['part'] and $cfg['parts']){ if($links=$this->Get_Sec($cfg)){ echo $links; }elseif($links=$this->Get_Main($cfg)){ echo $links; }else return ''; }else echo $ml->Get_Links(); } ?>