Posts Tagged “скрипт”

Многие дорвейщики и сателлитчики, которые генерируют “сайты” в промышленных масштабах, сталкиваются с проблемой придумывания названий доменов для своих проектов. Разумеется, можно генерировать бредо-домены, типа 1fsf23rqwbze9g.ru, но поисковые системы не стоят на месте и рано или поздно этот баг они обязательно пофиксят. Я предлагаю простой, но в тоже время полезный скрип, который генерирует человеко понятные имена доменов.
Вот, собственно, и сам код:

<?php
function domengen($pattern){
 $out = '';
 $gl="aeiouy"; // список гласных букв
 $sg="bcdfghjklmnpqrstvwxz"; // список согласных букв
 $gl="aeiou"; // альтернативный список гласных букв
 $sg="bdfghklmnprstv"; // альтернативный список согласных букв
 $counter_gl = strlen($gl)-1;
 $counter_sg = strlen($sg)-1;
 for($k=0;$k<strlen($pattern);$k++){
  if($k>0){
   $letter=$prev_letter=$out{(strlen($out)-1)};
  }else{
   $letter=$prev_letter='';
  }
  if($pattern{$k}=="g"){
   while($letter==$prev_letter) $letter = $gl{rand(0,$counter_gl)};
   $out .= $letter;
  }
  if($pattern{$k}=="s"){
   while($letter==$prev_letter) $letter = $sg{rand(0,$counter_sg)};
   $out .= $letter;
  }
 }
 return $out;
}
echo domengen("sgsgsgsgs").".ru<br />";
echo domengen("sgssgssgg").".ru<br />";
echo domengen("sgsgssg").".ru<br />";
echo domengen("sggsssgss").".ru<br />";
?>

Скрипт работает очень просто: в качестве параметров к функции domengen нужно прописать шаблон, состоящий из набора гласных и согласных букв, где s – согласная и g – гласная.
На выходе получим строку собранную по указанному шаблону, причем двух, подряд идущих, одинаковых букв не будет. Вы можете прописывать любые шаблоны и получать на выходе более уникальные комбинации доменных имен. И еще, в качестве набора гласных и согласных букв я решил использовать не все буквы алфавита, а те что приписаны в альтернативном списке. В результате, получил более читабельные комбинации.

Comments No Comments »

Многие интернет-разработчики рано или поздно сталкиваются с проблемой выбора системы управления сайтом (CMS) для своих творений. На данный момент их существует очень много, как платных, так и распространяемых на бесплатных условиях. Большинство из них могут подходить для решения разнообразных задач: от простых сайтов-визиток до городских порталов. Но как следствие, они весьма громоздки и требуют значительных серверных мощностей. Возникает закономерный вопрос: “зачем для 10-ти страничного сайта-визитки ставить многомегабайтную CMS, которая к тому же еще требует MySQL?”. Действительно, это не рациональное решение. Именно поэтому я задался целью сделать максимально компактную систему управления сайтом, на основе которой можно было бы делать сайты-визитки за считанные минуты и при этом не требовались бы какие-то особы навыки и специальная подготовка.
Итак, что же из этого вышло. Представленная ниже CMS состоит из таких частей:
1. файл .htaccess
2. файл index.php – сама CMS
3. файл с контентом text.php
4. файл-шаблон theme.php
Теперь рассмотрим детальнее все составляющие.
Первое. Для работы CMS необходимо, чтобы ваш хостер “разрешал” создание/редактирование файлов .htaccess, а также необходимо наличие установленного модуля mod_rewrite. На сколько я знаю, это условие выполняется практически на всех хостингах, но godaddy.com – точно этого не предоставляет… В созданный (в корне сайта) файл .htaccess поместите следующий код:

AddDefaultCharset windows-1251
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Часть вторая – непосредственно сама CMS.
Создаем файл, тоже в корне сайт, с именем index.php и помещаем в него следующее:

<?php
error_reporting(0);
$anons=100;
$to='admin@site.ru';
$subject='Заказ на сайте';
$theme='theme1/theme.php';
$text=file_get_contents('text.php');
if(preg_match_all('@<item>(.*?)</item>@is',$text,$matches)){
 for ($i=0; $i<count($matches[1]); $i++){
  if(preg_match('@<page>(.*?)</page>@is', $matches[1][$i], $mat)) $pages[]=trim($mat[1]);
  if(preg_match('@<date>(.*?)</date>@is', $matches[1][$i], $mat)) $allnews[]=$i;
 }
}
$line=$_SERVER["REQUEST_URI"];
if($line[strlen($line)-1]!='/') $line .= "/";
$line=explode('/', $line);
for($i=0; $i<count($line); $i++) $line[$i]=trim($line[$i+1]);
$page=array_search($line[0],$pages);
if(($page!==FALSE)&&(count($line)<=3)){
 if(preg_match('@<title>(.*?)</title>@is', $matches[1][$page], $mat)) $title=trim($mat[1]);
 if(preg_match('@<content>(.*?)</content>@is', $matches[1][$page], $mat)) $content=trim($mat[1]);
 if(preg_match('@<page>(.*?)</page>@is', $matches[1][$page], $mat)) $thispage=trim($mat[1]);
 $k=0;
 for ($i=count($allnews); $i>=0; $i--){
  if(preg_match('@<page>(.*?)</page>@is', $matches[1][$allnews[$i]], $mat)) $newsurl[$k]=trim($mat[1]);
  if(preg_match('@<date>(.*?)</date>@is', $matches[1][$allnews[$i]], $mat)) $newsdate[$k]=trim($mat[1]);
  if(preg_match('@<title>(.*?)</title>@is', $matches[1][$allnews[$i]], $mat)) $newstitle[$k]=trim($mat[1]);
  if(preg_match('@<content>(.*?)</content>@is', $matches[1][$allnews[$i]], $mat)){
   $newscontent[$k]=trim($mat[1]);
   if(strlen($newscontent[$k])>$anons){
    $newtext="";
    for($j=0; $j<$anons; $j++) $newtext.=$newscontent[$k][$j];
    $newscontent[$k]=$newtext."...";
   }
  }
  if($thispage=="archive.php"){
   $content.= '<a href="'.$newsurl[$k].'">'.$newstitle[$k].'</a><br />';
  }
  $k++;
 }
 if($thispage=="sitemap.php"){
  for($i=0; $i<count($pages); $i++){
   if(preg_match('@<title>(.*?)</title>@is', $matches[1][$i], $mat)){
    $content.= '<a href="/'.$pages[$i].'">'.trim($mat[1]).'</a><br />';
   }
  }
 }
 if((isset($_POST['submit']))&&($_POST['sendmail']=="1")) {
  $message = '<html><head><title>'.$subject.'</title></head><body>
	Контактное лицо: <b>'.$_POST['fio'].'</b><br>
	E-mail: <b>'.$_POST['email'].'</b><br>
	Сообщение: <b>'.$_POST['message'].'</b>
	</body></html>';
  $headers = 'From: '.$_POST['email']."\r\n".'Content-Type: text/html; charset="windows-1251"';
  mail($to, $subject, $message, $headers);
  $content="Ваш запрос успешно отправлен";
 }
 include($theme);
 exit;
}else{
 header('Location:/');
 exit;
}
?>

Как видите, в начале есть четыре переменные, которые отвечают за следующее:
$anons – длина, в символах, анонса новостей. Это сделано для того, чтобы в сайдбаре “не вываливать портянку”, а отображать лишь начало новости.
$to=’admin@site.ru’ – тут указываем е-майл, на который будут приходить письма от пользователей. Например, для страниц типа “форма обратной связи” или “оформление заказа”.
$subject=’Заказ на сайте’ – указываем заголовок таких писем.
$theme=’theme1/theme.php’ – указываем путь к файлу шаблона, относительно корня сайта. Эта опция позволяет очень просто изменить внешний вид сайта, подключив другой шаблон.

Помимо этого, в CMS предусмотрено:
1. Генерирование страницы “Архив новостей”, где отображаются ссылки на все новости с анкорами в виде заголовков. По умолчанию эта страница доступна по адресу archive.php. См, строку if($thispage==”archive.php”). Эта страница, должна быть прописана в файле с контентом, иначе отображаться не будет.
2. Генерирование страницы “Карта сайта”, тут отображаются ссылки на все страницы сайта. Доступна по адресу sitemap.php. См, строку if($thispage==”sitemap.php”). Аналогично предыдущей странице, она должна быть прописана в файле text.php

Третья часть – файл с контентом.
Помещаем в корень файл text.php. Его структура должна выглядеть так:

<?if (!$k) header('Location:/')?>

<item>
 <page></page>
 <title>Главная страница</title>
 <content>
  <p>Текст главной страницы.</p>
 </content>
</item>
<item>
 <page>product.php</page>
 <title>Наша продукция</title>
 <content>
  <p>Текст страницы с описанием продукции.</p>
 </content>
</item>
<item>
 <page>order.php</page>
 <title>Оформить заказ</title>
 <content>
  <table width="100%" border="0" cellspacing="7" cellpadding="5">
  <form method="POST" enctype="multipart/form-data" action="order.php">
   <input type="hidden" name="sendmail" value="1">
   <tr>
    <td valign="top">Контактное лицо</td>
    <td valign="top">
     <input name="fio" type="text" size="40" value="" />
    </td>
   </tr>	
   <tr>
    <td valign="top">E-mail</td>
    <td valign="top">
     <input name="email" type="text" size="40" value="" />
    </td>
   </tr>	
   <tr>
    <td valign="top">Сообщение</td>
    <td valign="top">
     <textarea name="message" cols="30" rows="7"></textarea>
    </td>
   </tr>	
   <tr>
    <td colspan="2" align="center">
     <input name="submit" type="submit" value="Отправить"/>
    </td>
   </tr>
  </form>
  </table>
 </content>
</item>
<item>
 <page>contact.php</page>
 <title>Как нас найти</title>
 <content>
  <p>Текст страницы с контактами.</p>
 </content>
</item>
<item>
 <page>sitemap.php</page>
 <title>Карта сайта</title>
 <content>
  Текст страницы карты сайта.<br />
 </content>
</item>
<item>
 <page>archive.php</page>
 <title>Архив новостей</title>
 <content>
  Текст страницы архива новостей:<br />
 </content>
</item>


<item>
 <page>news1.php</page>
 <title>Заголовок новости 1</title>
 <date>2009.11.18</date>
 <content>
  текст новости номер 1 текст новости номер 1 текст новости номер 1 текст новости номер 1 текст новости номер 1
 </content>
</item>
<item>
 <page>news2.php</page>
 <title>Заголовок новости 2</title>
 <date>2009.12.19</date>
 <content>
  текст новости номер 2 текст новости номер 2 текст новости номер 2 текст новости номер 2 текст новости номер 2
 </content>
</item>
<item>
 <page>news3.php</page>
 <title>Заголовок новости 3</title>
 <date>2009.12.20</date>
 <content>
  текст новости номер 3 текст новости номер 3 текст новости номер 3 текст новости номер 3 текст новости номер 3
 </content>
</item>
<item>
 <page>news4.php</page>
 <title>Заголовок новости 4</title>
 <date>2009.12.21</date>
 <content>
  текст новости номер 4 текст новости номер 4 текст новости номер 4 текст новости номер 4 текст новости номер 4
 </content>
</item>
<item>
 <page>news5.php</page>
 <title>Заголовок новости 5</title>
 <date>2009.12.22</date>
 <content>
  текст новости номер 5 текст новости номер 5 текст новости номер 5 текст новости номер 5 текст новости номер 5
 </content>
</item>

Первая строка в этом файле служит для того, чтобы прочитать файл мог только скрипт, а всех остальных будет посылать на главную страницу.
Теперь по порядку рассмотрим теги:
1. тег item – внутри него содержится информация о каждой отдельной странице.
2. тег page – здесь задаем внешний вид URLа страницы.
3. тег title – заголовок страницы.
4. тег date – дата публикации, используется только в новостях.
5. тег content – содержание страницы.

Для добавления новых страниц/новостей откройте этот файл с помощью любого текстового редактора(например, блокнот) и скопируйте все от item до /item и вставте в конец файла. Затем, замените page – он должен быть уникальным для каждой страницы. Отредактируйте остальные теги. Всё, на сайте появилась новая страница. Если там присутсвует тег date, то эта страница будет расценена, как новость и будет также выводиться на странице “Архив новостей” и в блоке новостей появиться в самом верху. Старые новости сдвинутся вниз.

Часть четвертая – шаблон сайта.
Создаем папку (в нашем случае “theme1″) и в нее копируем готовый html-шаблон сайта, а также всё что к ниму относится: файл стилей, картинки и прочее. Затем переименовываем index.html в theme.php и открываем его на редактирование блокнотом. В самом начале вставляем строку:

<?if (!$k) header('Location:/')?>

Это нужно для того, чтобы этот файл могла обрабытывать только CMS.
Находим тег title и переписываем его таким образом:

<title>
<?php echo $title ?>
</title>

Также можно вставить эту строку в место вывода заголовка на самой странице, например в теге H1.

Ищем где в шаблоне находится часть связанная с выводом новостей и делаем следующие вставки:

<?php echo $newsdate[1] ?>

это сторока выведет дату самой последней новости

<?php echo $newscontent[1] ?>

выводим текст анонса новости

<a href="<?php echo $newsurl[1] ?>">подробнее</a>

вставили ссылку на страницу с полной новостью

Хочу обратить ваше внимание на то, что тут в квадратных скобках указана единица – это значит, что будет браться информация о последней новости. Если же изменить ее на “2″, то будет взята информация о предпоследней новости. “3″ – пред-предпоследняя новость и т.д.

После этого находим место вывода основного блока текста и ставляем строку:

<?php echo $content ?>

Ну и само-собой, необходимо в блоке с навигацией прописать статические ссылки на внутренние страницы: “О компании”, “Контакты” и пр.

Напоследок выкладываю архив со всеми файлами этой CMS

P.S.: надеюсь этот материал будет вам полезен и вы сможете разобраться в самой маленькой в мире CMS. Если возникнут вопросы – велком в комменты.
P.P.S.: на настройку шаблона, прикрепленного в архиве, а также на его поиски у меня ушло минут 15-20. Так что сделать сайт-визитку за полчаса вполне реально.

Comments 8 Comments »

Быстро в топНи для кого не секрет, что быстрая индексация ссылок, купленных для продвижения страницы по определенному запросу, позволит сэкономить не только деньги, но и время на вывод в топ. Бывают случаи, когда ссылка может быть проиндексирована через месяц после размещения или даже дольше. Как же поступить в такой ситуации. Достаточно создать “карту” с линками на страницы сайтов, на которых были куплены эти ссылки и загнать на “карту” быстробота.
Тут возникает другая проблема: роботы не охотно индексируют страницы, состоящие исключительно из ссылок на сторонние ресурсы, и есть ограничение на количество ссылок с подобных страниц. Поэтому ссылки нужно разбавлять текстом и сделать так, чтобы они выглядели максимально естественными.
Скрипт, представленный ниже, служит специально для решения подобных задач.

<?php
$skip=7;
$step=15;
$minlen=4;
$in=file_get_contents('file.dat');
$url=file_get_contents('file.url');
$url=explode("\n", $url);
$zam=count($url);$k=$z=-1;$i=0;
$line = preg_replace_callback('@([a-яA-Я]+)@is', create_function('$matches','
 global $k,$i,$step,$skip,$minlen,$url,$z,$zam;
 $k++;
 if($k<$skip){
  $i=$step;
  return $matches[0];
 }
 if(strlen($matches[1])>=$minlen) $i++;
 if($i>=$step){
  $i=0;
  if($zam>($z+1)){
   $z++;
   $tempurl=trim($url[$z]);
   return \'<a href="\'.$tempurl.\'">\'.$matches[1].\'</a>\';
  }else{
   return $matches[1];
  }
 }else{
  return $matches[0];
 }'), $in);
file_put_contents('file.out', $line);
if(($z+1)!=$zam) print_r('<b>Надо бы добавить слов: не поместилось - '.($zam-$z-1).' шт.</b><br><br>');
print_r($line);
?>

Поместите этот код в файл с расширением php и создайте в этой же директории еще два файла:
1. file.dat – в него необходимо вставить тематический текст
2. file.url – в него вставьте ссылки но, соблюдая правила: одна ссылка в одной строке и в конце файла не должно быть пустых строк
Теперь запускаем скрипт и на экране появится ваш исходный текст с ссылками, указанными во втором файле. В качестве анкоров будут взяты случайные слова.
Теперь еще момент: в самом начале скрипта есть три переменные. Несмотря на то, что их названия говорят сами за себя, я все же немного поясню. Итак,
$skip=7; – указываем, что нам нужно пропустить 7 слов от начала
$step=15; – означает, что каждое 15-е слова будет заменено на ссылку с анкором в виде этого слова
$minlen=4; – задаем минимальную длину (в символах) обрабатываемых слов
Да, и еще помимо вывода на экран, скрипт создает файл с именем “file.out”, в котором будет находится обработанный текст.

P.S.: идею создания подобного скрипта мне подкинул Nicotin

P.P.S: визуально обработанный текст будет выглядеть так (кликабельно) -
Текст с ссылками

Comments 3 Comments »

Представленный ниже скрипт поможет вам генерировать уникальные комбинации из цифр и букв, которые можно использовать в качестве логинов/паролей.
В зависимости от параметров, на выходе можно получать различные варианты комбинаций. Вот основные правила:
1. [A-Z-x], будет сгенерирована последовательность состоящая из заглавных букв в диапазоне от “A” до “Z” и длиной “х”.
2. [a-z-x], работает аналогично, с той лишь разницей, что диапазон будет от “a” до “z”.
3. [a-Z-x], последовательность будет содержать символы в диапазоне от “a” до “z” и от “A” до “Z”.
4. [0-9-x], сгенерирует последовательность из чисел.
Вот сам скрипт:

<?php
$line = "[A-Z-1][a-z-12][0-9-2][a-z-2]";
$line = preg_replace_callback('@\[(.*?)\]@is', create_function('$matches','
 $q = explode("-", $matches[1]);
 for($i=0; $i<$q[2]; $i++){
  if(($q[0]=="a")&&($q[1]=="Z")){
   $s=rand(65,122);
   while(($s>=91)&&($s<=96)) $s=rand(65,122);
   $str.=chr($s);
  }else{
   $str.=chr(rand(ord($q[0]),ord($q[1])));
  }
 }
 return $str;
'), $line);
print_r($line);
?>

П.С.: эти последовательности можно “разбавлять” статическими символами, например:
$line = “QWE[A-Z-1]asd[a-z-12]123[0-9-2][a-z-2]“;

Comments No Comments »

скрипт синонимайзер: замена словСегодня поговорим о перестановке слов.
Применяется для синонимизации/размножения текстов/анкоров. Возможно еще где-то, но для меня этого хватает с головой :)
Итак, простенький скрипт позволит создать, всего по одному шаблону, кучу текстов, которые можно использовать для размещения на биржах статей, заказных статьях, в виде контента для дорвеев/сателлитов и прочего.
Данный скрипт поддерживает два типа работы с текстом:
1. выбор одного слова из списка замен – подойдет синонимизации
Пример синтаксиса:
{Text1_1|Text1_2|Text1_3} – выведет на экран один из вариантов
2. перестановка кусков текста в произвольном порядке – позволит менять местами абзацы, некоторые части в пределах одного предложения и т.п.
Пример синтаксиса:
[+,+Text1_1|Text1_2|Text1_3] – выведет на экран все слова в произвольном порядке, где +,+ – разделитель (можно поставить любой другой знак препинания)

<?php
 $line = "сюда вставляем шаблон текста";
 $line = preg_replace_callback('@{(.*?)}@is', create_function('$matches','$q = explode("|", $matches[1]); shuffle($q); return $q[0];'), $line);
 $line = preg_replace_callback('@\[\+(.*?)\+(.*?)\]@is', create_function('$matches','$separ = $matches[1]; $q = explode("|", $matches[2]); shuffle($q); for($i=1; $i<count($q); $i++) { $q[0].=$separ.$q[$i]; } return $q[0];'), $line);
 print_r($line);
?>

Допустим, если в переменную $line прописать вот этот шаблон:

[+ +{слово1_1|слово1_2|слово1_3} {слово2_1|слово2_2|слово2_3} {слово3_1|слово3_2|слово3_3}.|{слово4_1|слово4_2|слово4_3} {слово5_1|слово5_2|слово5_3} {слово6_1|слово6_2|слово6_3}.|{слово7_1|слово7_2|слово7_3} {слово8_1|слово8_2|слово8_3} {слово9_1|слово9_2|слово9_3}.]

То на выходе получим три предложения, которые будут каждый раз располагаться в рандомном порядке, состоящие из 3-х слов, причем эти слова будут выбираться из списка допустимых замен.
Каждый раз при запуске результат будет разный.

Надеюсь понятно объяснил, но если что – пишите: обязательно помогу.

Comments No Comments »