<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Prootime &#187; PHP</title>
	<atom:link href="http://prootime.ru/category/pph/feed" rel="self" type="application/rss+xml" />
	<link>http://prootime.ru</link>
	<description>Блог человека увлекающегося Javascript, PHP, Css, Jquery ...</description>
	<lastBuildDate>Sat, 31 Mar 2012 00:44:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Потоки ввода/вывода в PHP</title>
		<link>http://prootime.ru/php-input-output</link>
		<comments>http://prootime.ru/php-input-output#comments</comments>
		<pubDate>Thu, 15 Mar 2012 23:34:03 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=1070</guid>
		<description><![CDATA[Недавно у меня возникла необходимость стандартного ввода/вывода (I/O) в PHP. Оказалось что все реализовываеться довольно таки просто, учитывая то что PHP все таки скриптовый язык. В PHP определенны три константы STDIN &#8211; Уже открытый поток ввода (stdin) STDOUT &#8211; Уже открытый поток вывода (stdout) STDERR &#8211; Уже открытый поток ошибок (stderr) То есть чтобы построчно [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно у меня возникла необходимость стандартного ввода/вывода (I/O) в PHP. Оказалось что все реализовываеться довольно таки просто, учитывая то что PHP все таки скриптовый язык.</p>
<p><span id="more-1070"></span></p>
<p>В PHP <a target="_blank" href="http://php.net/manual/ru/features.commandline.io-streams.php">определенны</a> три константы</p>
<ul>
<li><em>STDIN</em> &#8211; Уже открытый поток ввода (stdin)</li>
<li><em>STDOUT</em> &#8211; Уже открытый поток вывода (stdout)</li>
<li><em>STDERR</em> &#8211; Уже открытый поток ошибок (stderr)</li>
</ul>
<p>
То есть чтобы построчно считать и вывести поток ввода достаточно написать:
</p>
<pre class="prettyprint linenums">
while (FALSE !== ($line = fgets(STDIN)))
{
	echo $line;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/php-input-output/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Drag&amp;Drop</title>
		<link>http://prootime.ru/html5-dragdrop</link>
		<comments>http://prootime.ru/html5-dragdrop#comments</comments>
		<pubDate>Sat, 01 Oct 2011 21:12:51 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=993</guid>
		<description><![CDATA[Перетаскивание файлов из рабочего стола в браузер одна из наиболее интересных возможностей HTML5. Я опишу как: сделать возможным перетаксивание файлов на элемент web страницы. анализировать перенесенные файлы с помошью JavaScript. загружать и парсить файлы со стороны клиента. асинхронно загружать файлы на сервер используя XMLHttpRequest2 показать прогресс бар пока идет загрузка файлов В этой статье расмотрим [...]]]></description>
			<content:encoded><![CDATA[<p>Перетаскивание файлов из рабочего стола в браузер одна из наиболее интересных возможностей <em>HTML5</em>.<span id="more-993"></span> Я опишу как:</p>
<ol>
<li>сделать возможным перетаксивание файлов на элемент web страницы.</li>
<li>анализировать перенесенные файлы с помошью <em>JavaScript</em>.</li>
<li>загружать и парсить файлы со стороны клиента.</li>
<li>асинхронно загружать файлы на сервер используя <em>XMLHttpRequest2</em></li>
<li>показать прогресс бар пока идет загрузка файлов</li>
</ol>
<p>В этой статье расмотрим первые три пункта. В итоге получим примерно такую форму:</p>
<div class="image"><img src="http://prootime.ru/wp-content/uploads/2011/10/drag1.png" alt="html форма drag&amp;drop " title="drag1" width="538" height="201" class="aligncenter size-full wp-image-1019" /></div>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag/html5drag.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
<h2>Поддержка браузеров</h2>
<p>Прежде чем начать, нужно отметить что поддержка перетаскивания файлов браузерами будет неравномерной. Код работает в современных браузерах, но вполне возможно API будет меняться.</p>
<ul>
<li>Последние версии <em>Firefox</em> и <em>Chrome</em> поддерживают все функции и превосходно работают с перетаскиванием.</li>
<li>Опера может парсить файлы в <em>JavaScript</em>, но не поддерживает перетаскивание файлов и загрузку с помощю <em>XMLHttpRequuest2</em></li>
<li>IE и десктоповые версии Safari не поддерживают ничего из нужного API.</li>
</ul>
<h2>HTML и CSS</h2>
<p>Далее идет код стандартной формы с инпутом типа файл. Единственное <em>HTML5</em> нововведение в форме это атрибут <em>&#8220;multiple&#8221;</em> который позволяет пользователю выбирать любое количество файлов.</p>
<p>Со стороны сервера загрузка файлов будет проводиться средствани <em>PHP</em>, но независимо от того какую технологию вы используете на сервере <em>JavaScript</em> код останется тем же. Скрытое поле <em>MAX_FILE_SIZE</em> определяет <em>300,000 байт</em>, размер будем проверять и на стороне клиента и на стороне сервера, чтобы предотвротить загрузку огромного размера файлов.</p>
<pre class="prettyprint">
&lt;form id="upload" action="upload.php" method="POST" enctype="multipart/form-data"&gt;
	&lt;fieldset&gt;
		&lt;legend&gt;HTML Загрузка Файлов&lt;/legend&gt;
		&lt;input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" /&gt;
		&lt;div&gt;
			&lt;label for="fileselect"&gt;Выберите файлы для загрузки:&lt;/label&gt;
			&lt;input type="file" id="fileselect" name="fileselect[]" multiple="multiple" /&gt;
			&lt;div id="filedrag" &gt;Или перетащите их сюда&lt;/div&gt;
		&lt;/div&gt;
		&lt;div id="submitbutton"&gt;
			&lt;button type="submit"&gt;Загрузить файлы&lt;/button&gt;
		&lt;/div&gt;
	&lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<p>Элемент <em>#filedrag</em> будет использоваться как облясть в которую необходимо пренести файлы. Элемент в CSS стилях скрыт, но он будет отображаться средствами <em>JavaScript</em> если перетаскивание поддерживается браузером:</p>
<pre class="prettyprint">
*{
     margin: 0px;
}
body{
     background: none repeat scroll 0% 0% #EFEFEF;
}
.wrapper{
     background: none repeat scroll 0% 0% #FFFFFF;
     margin: 150px auto;
     border: 2px solid #3DA8BA;
     padding: 10px;
     width: 500px;
}
fieldset{
	border:2px solid #efefef;
}
#filedrag{
	border-radius: 7px 7px 7px 7px;
	border: 2px dashed #3DA8BA;
	color: #555555;
	cursor: default;
	display: none;
	margin: 1em 0pt;
	padding: 1em 0pt;
	text-align: center;
	background:#f9f9f9;
}
#filedrag.hover {
	border-style: solid;
	box-shadow: 0pt 3px 4px #dbdbdb inset;
}
#messages{
	margin-top:10px;
	padding:5px;
	font-size:14px;
}
#messages p{
	border-bottom:1px solid #efefef;
	margin-bottom:5px;
}
</pre>
<p>Для элемента также определенн класс <em>.hover</em> который меняет стили когдо пользователь перетаксивает файлы на элемент. Браузеры не поддерживают стили <em>:hover</em> в этой ситуации, но мы можем добовлять класс спомощю Javascript когда происходит нужное событие.</p>
<h2>File API</h2>
<p><a href="http://www.w3.org/TR/file-upload/" target="_blank">W3C File API</a> предостовляет несколько объектов которые мы будем использовать:</p>
<ul>
<li><strong>FileList</strong>: предостовляет массив выбранных файлов.</li>
<li><strong>File</strong>: предстовляет единственный файл.</li>
<li><strong>FileReader</strong>: интерфейс который позволяет нам считать информацию о файле со стороны клиента и использовать в <em>JavaScript</em>.</li>
</ul>
<h2>JavaScript события</h2>
<p>Пришло время писать <em>JavaScript</em> код. Мы не будем использовать <em>JavaScript</em> фреймфроков, поэтому напишем пару фуннкций для сохронения нашего времени. Это функция которая достает нужный элемент по ид и функция выводящая сообщения</p>
<pre class="prettyprint">
/* getElementById */
function $id(id) {
	return document.getElementById(id);
}

/* вывод сообщений */
function Output(msg) {
	var m       = $id("messages");
	m.innerHTML = msg + m.innerHTML;
}
</pre>
<p>Далее проверим поддержку <em>File API</em> и вызовем функцию инициализации <em>Init()</em>:</p>
<pre class="prettyprint">
/* проверка поддержки API */
if (window.File &#038;&#038; window.FileList &#038;&#038; window.FileReader){
	Init();
}
/* инициализация */
function Init(){

	var fileselect   = $id("fileselect"),
		filedrag     = $id("filedrag"),
		submitbutton = $id("submitbutton");

	/* выбор файла */
	fileselect.addEventListener("change", FileSelectHandler, false);

	/* проверка поддержки XHR2 */
	var xhr = new XMLHttpRequest();
	if (xhr.upload){

		/* сброс файла */
		filedrag.addEventListener("dragover", FileDragHover, false);
		filedrag.addEventListener("dragleave", FileDragHover, false);
		filedrag.addEventListener("drop", FileSelectHandler, false);
		filedrag.style.display = "block";

		/* удаление кнопки сабмитта */
		submitbutton.style.display = "none";
	}

}
</pre>
<p>Функция <em>Init():</em></p>
<ol>
<li>Устонавливает обработчик события к изменению инпута типа файл.</li>
<li>Отоброжает элемент <em>#filedrag</em>.</li>
<li>Устанавливает обработчики событий <em>&#8220;dragover&#8221; и &#8220;dragleave&#8221;</em> для динамического изменения стилей элемента #filedrag.</li>
<li>Устанавливает обработчик события &#8220;drop&#8221; для элемента <em>#filedrag</em>.</li>
<li>Скрывает кнопку сабмитта формы &#8211; он пока не требуется, так как мы будем просто анализировать файлы.</li>
</ol>
<p>Также вы можете скрыть инпут типа файл, если перетаскивание поддерживается. Но я не буду этого делать чтобы пользователь мог воспользоваться удобным ему вариантом.</p>
<p>Проверка поддержки метода XMLHttpRequest.upload предотврощает проблемы с Оперой. Браузер поддерживает объекты <em>File, FileList и FileReader</em>, но не поддерживает перетаскивание файлов или <em>XMLHttpRequest2</em>. Поэтому мы отоброжаем информацию о файле, но оставляем скрытым элемент <em>#filedrag</em>.</p>
<h2>Изменение стилей при переносе</h2>
<p>Мало кто испытал перетаскивание файлов в браузер. На самом деле, многие опытные интернет пользователи считают это невозможным. Поэтому написали внутри элемента &#8220;перетащите сюда файлы&#8221;. А следующая функция будет добвлять класс к элементу, когда файл уже будет находится непосредственно над элементом, тем самым будут меняться стили.</p>
<pre class="prettyprint">
// Файл над нужной областью
function FileDragHover(e){
	e.stopPropagation();
	e.preventDefault();
	e.target.className = (e.type == "dragover" ? "hover" : "");
}
</pre>
<h2>Анализирование перетащенных или выбранных файлов</h2>
<p>Будем использовать функцию <em>FileSelectHandler()</em> не зависимо от того обин или несколько файлов были выбранны или перетащенны на элемент <em>#filedrag</em>:</p>
<pre class="prettyprint">
// выбор файла
function FileSelectHandler(e){

	FileDragHover(e);

	// проходимся по объекту FileList
	var files = e.target.files || e.dataTransfer.files;

	// парсим все объекты типа File
	for (var i = 0, f; f = files[i]; i++){
		ParseFile(f);
	}

}
</pre>
<p>Функция:</p>
<ol>
<li>Вызываем функцию <em>FileDragHover()</em> чтобы убрать стиля при <em>hover</em> и предотвратить выполнение событий браузера. Это очень важно, так как браузер может попытаться отобразить файл</li>
<li>Проходимся по объекту <em>FileList</em>.</li>
<li>Наконец функция проходит по всем объектам типа <em>File</em> в объекте <em>FileList</em> и передает их как аргумент в функцию <em>ParseFile()</em></li>
</ol>
<pre class="prettyprint">
function ParseFile(file) {
	Output(
		"&lt;p&gt;File information: &lt;strong&gt;" + file.name +
		"&lt;/strong&gt; type: &lt;strong&gt;" + file.type +
		"&lt;/strong&gt; size: &lt;strong&gt;" + file.size +
		"&lt;/strong&gt; bytes&lt;/p&gt;"
	);
}
</pre>
<p>Функция выводит информация используя три основные свойства представленные объектом <em>File</em> только для чтения.</p>
<ul>
<li><b>.name</b>: имя файла (не включая путь к файлу)</li>
<li><b>.type</b>: MIME тип, например: image/jpeg, text/plain, и т.д.</li>
<li><b>.size</b>: размер файла в байтах</li>
</ul>
<div class="demo">
<a href="http://prootime.ru/demos/html5drag/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/html5drag/html5drag.rar" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/html5-dragdrop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Борьба со спамом</title>
		<link>http://prootime.ru/fight_spam</link>
		<comments>http://prootime.ru/fight_spam#comments</comments>
		<pubDate>Sun, 01 May 2011 14:41:54 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=942</guid>
		<description><![CDATA[Я не единственный наверное кого заколебал спам, существует много способов борьбы с ним. Чаще всего ставят капчу, это обычно картинка с цифрами которые нужно ввести в поле для подтверждения того что вы не бот, иногда ставят просто галочку которую нужно выбрать, существует еще куча извращенных способов суть которых одна, добавление лишнего поля. Но как же [...]]]></description>
			<content:encoded><![CDATA[<p>Я не единственный наверное кого заколебал спам, существует много способов борьбы с ним. Чаще всего ставят капчу, это обычно картинка с цифрами которые нужно ввести в поле для подтверждения того что вы не бот, иногда ставят просто галочку которую нужно выбрать, существует еще куча извращенных способов суть которых одна, добавление лишнего поля<span id="more-942"></span>. Но как же быть если я не хочу добавлять лишнего поля в форму, хочу оставить все как есть и так избавиться от спама? Предлагаю поставить проверку на включенность <b>Javascript</b>&#8216;a. Сделать это очень даже легко на <b>PHP</b>, если конечно ваш хостинг включил поддержку функции <a href="http://heel.org.ua/php-functions/get-browser.html" target="_blank">get_browser()</a>:</p>
<pre class="prettyprint">
function workjscript(){
     $brows = get_browser();
     if($brows[javascript]){
         return true;  //то есть выводим форму
     }
     retunr false; //javascript не включен форму не выводим
}
</pre>
<p>Но а если <b>get_browser()</b> не поддерживается вашм хостингом также как и у меня, можно сделать попроще, просто выводить одно из обязательных полей через <b>Javascritpt</b>. В итоге без <b>Javascript</b>&#8216;a пользователь, спам бот или кто еще пофигу будет получать форму без одного обязательного поля и не сможет отправить форму. Ну на примере <b>wordpress</b> для комментариев можно передать в качестве поля имени автора следующее:</p>
<pre class="prettyprint">
'author' => '&lt;div class="first_inputs"&gt;
	&lt;span id="authorplace">&lt;/span&gt;
	&lt;script type="text/javascript"&gt;
		$(document).ready(function(){
			$("#authorplace").html("\
				&lt;input class=\"cm_name\" placeholder=\"Имя\" id=\"author\" name=\"author\" type=\"text\" value=\"'.esc_attr( $commenter['comment_author'] ) . '\"' . $aria_req . ' /&gt;\
			");
		});
	&lt;/script&gt;',
</pre>
<p class="hight1">Хороший ресурс для <a href="http://webpinger.ru/" title="тестирование сайта">тестирования сайта</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/fight_spam/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ЕГЭ информатика B8</title>
		<link>http://prootime.ru/ege-informatika-b8</link>
		<comments>http://prootime.ru/ege-informatika-b8#comments</comments>
		<pubDate>Tue, 22 Mar 2011 18:12:42 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=834</guid>
		<description><![CDATA[Мобильное приложение для решения задания B8 ЕГЭ по информатике. Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ. Готовясь к информатике заметил что почти во всех заданиях B8 [...]]]></description>
			<content:encoded><![CDATA[<p>Мобильное приложение для решения задания B8 ЕГЭ по информатике.</p>
<p><span id="more-834"></span></p>
<p>Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ.</p>
<p> Готовясь к информатике заметил что почти во всех заданиях B8 встречается одна и та же по типу задача, в которой обычно требуется найти последовательность букв с какой то позиции по какую то. Пример задания:</p>
<blockquote><p>Строки (цепочки символов латинских букв) создаются по следующему правилу: первая строка состоит из одного символа &#8211; латинской буквы “A”. Каждая из последующих цепочек создается такими действиями: в очередную строку сначала дважды записывается предыдущая строка, затем справа приписывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i &#8211; м шаге пишется “i” &#8211; я буква алфавита).<br />
Вот первые 4 строки созданные по этому правилу:<br />
1) A<br />
2) AAB<br />
3) AABAABC<br />
3) AABAABCAABAABCD<br />
<i>Латинский алфавит (для справки):</i><br />
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
Запишите шесть символов подряд, стоящие в восьмой строке с 100-го по 105-место (считая слева направо).</p></blockquote>
<p>Встречаются разные варианты этой задачи в некоторых требуется найти количество определенных букв в какой то строке, встречаются еще и с русским алфавитом.</p>
<p>Итак цель написать web приложение которое смогло бы решить все варианты этой задачи и была бы удобна для использования с телефона. Не знаю о чем подумали вы, но я подумал о jQuery Mobile. Почитав немного <a href="http://jquerymobile.com/demos/1.0a3/" target="_blank">документации</a>  написал разметку. Приложение будет состоять из одной страницы в которой будет выводиться форма состоящая из 4х полей это: поле для выбора алфавита, количества строк, начальной позиции и конечной позиции. Стилей писать не придется так как jQuery Mobile так устроен, остается написать разметку</p>
<p>Получилась она вот такой:</p>
<pre class="prettyprint">
   &lt;div data-role="page" data-theme="c"&gt;
       &lt;div data-role="header"&gt;
           &lt;h1&gt;Информатика B8&lt;/h1&gt;
       &lt;/div&gt;
       &lt;div data-role="content"&gt;
           &lt;form action="" method="get"&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="select-choice-1" class="select"&gt;Выберите алфавит:&lt;/label&gt;
                   &lt;select name="lang" id="select-choice-1"&gt;
					   &lt;option value="lt">Латинский&lt;/option&gt;
					   &lt;option value="ru">Русский&lt;/option&gt;
                   &lt;/select&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="line">Количество строк:&lt;/label&gt;
                   &lt;input type="number" name="line" id="line"&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="beg_pos"&gt;Начальная позиция:&lt;/label&gt;
                   &lt;input type="number" name="beg_pos" id="beg_pos"&gt;
               &lt;/div&gt;
               &lt;div data-role="fieldcontain"&gt;
                   &lt;label for="end_pos">Конечная позиция:&lt;/label&gt;
                   &lt;input type="number" name="end_pos" id="end_pos"&gt;
               &lt;/div&gt;
               &lt;button type="submit" data-theme="b" name="calc" value="calc"&gt;Посчитать&lt;/button&gt;
           &lt;/form&gt;
       &lt;/div&gt;
       &lt;div data-role="footer"&gt;
           &lt;h4&gt;&lt;a href="http:\\prootime.ru"&gt;prootime.ru&lt;/a&gt;&lt;/h4&gt;
       &lt;/div&gt;
   &lt;/div&gt;
</pre>
<p>В header&#8217;е нужно подключить вот эти скрипты:</p>
<pre class="prettyprint">
stylesheet - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css
script - http://code.jquery.com/jquery-1.4.3.min.js
script - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js
</pre>
<p>На вид примерно что то вроде этого:</p>
<p align="center"><img src="http://prootime.ru/wp-content/uploads/2011/03/infp_ege8.png" alt="" title="infp_ege8" width="300" height="466" class="alignnone size-full wp-image-841" /></p>
<p>Осталось написать PHP код. Он будет очень даже простой, просто поставим на сабмит формы PHP код и будем выполнять алгоритм который был дан в задании:</p>
<pre class="prettyprint">
if(!empty($_REQUEST['calc'])){

   //язык
   $language = $_REQUEST['lang'];

   if($language == 'lt'){

       $arr = range('A','Z');

   }
   else{

       $arr = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');

   }

   //номер строки
   $str_num = $_REQUEST['line'];

   //начальная и конечная позицим
   $beg_pos = $_REQUEST['beg_pos'];
   $end_pos = $_REQUEST['end_pos'];

   if($beg_pos > $end_pos){

       echo 'Ошибка! Значения начала отреза больше конеца.';

   }
   else{

       //конечная строка
       $end_str = '';

       for($i = 0; $i <= $str_num-1; $i++){

           $end_str = $end_str.$end_str.$arr[$i];

       }

       echo mb_substr($end_str, $beg_pos-1, $end_pos - $beg_pos + 1, 'utf8');
       echo '<br/>Всего букв - '.strlen($end_str);

       for($i = 0; $i <= $str_num-1; $i++){

           echo '<br/>'.$arr[$i].' - '.mb_substr_count($end_str,$arr[$i], 'utf8');

       }

   }

}</pre>
<p>Единственное на что бы хотел обратить внимание это на функции начинающиеся с <b>mb_</b> это нестандартные функции и требуют модуль <b>mbstring</b> если он не подключен то они конечно не сработают. А вообще выполняют то же самое что эти же функции без <b>mb_</b>. Почему я их использовал, потому что этим функциям можно передать третьим параметром кодировку в которой функция должна работать. А так как нам нужно работать еще и с кирилицей это то что нам нужно.</p>
<div class="demo">
<a href="http://prootime.ru/demos/inf8/" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://paste.netsago.org/ru/view/0/dzantiev/" id="demo">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/ege-informatika-b8/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Создание календаря средствами PHP и CSS</title>
		<link>http://prootime.ru/calendar-php</link>
		<comments>http://prootime.ru/calendar-php#comments</comments>
		<pubDate>Fri, 27 Aug 2010 11:25:52 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=510</guid>
		<description><![CDATA[Сейчас мы попробуем сделать простенький календарь для сайта или еще для чего нибудь, не знаю ). Календарь будет не совсем простым можно будет переключатся между месяцами, а текущий день будет выделен среди других дней также другим цветом(красным) будут выделены выходные, правда только воскресения субботы я чето не стал выделять, ну это не важно. Так как [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас мы попробуем сделать простенький календарь для сайта или еще для чего нибудь, не знаю ). Календарь будет не совсем простым можно будет переключатся между месяцами, а текущий день будет выделен среди других дней также другим цветом(красным)<span id="more-510"></span> будут выделены выходные, правда только воскресения субботы я чето не стал выделять, ну это не важно.<br />
Так как календарь будет переключатся между месяцами мы должны это как то передавать например методом GET т.е. через url адрес. Также напишем для календаря простенькие CSS чтоб можно было смотреть)) так это календарь удобней всего оформить его в виде таблицы. Внешне календарь будет выглядеть примерно так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/witht-css.jpg" alt="cakendar witht-css" title="witht-css" width="600" class="alignnone size-full wp-image-521" /></center><br />
На PHP мы создадим две переменные $calendar_head и $calendar_body соответственно в $calendar_head мы будем записывать html код верхней части календаря т.е. название месяца, дни недели и две ссылки по краям для выбора месяца. А в $calendar_body будем сохранять остальной код то есть таблицу дней недели. Ниже на скрине показано:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/witht-css-metki.jpg" alt="" title="witht-css-metki" width="600" height="232" class="alignnone size-full wp-image-526" /></center><br />
Теперь рассмотрим сам php код:</p>
<pre class="prettyprint">
// проверяем передали ли нам месяц и год
if(isset($_GET["ym"])){

	$year  = (int)substr($_GET["ym"], 0, 4);
	$month = (int)substr($_GET["ym"], 4, 2);

}
else{ // иначе выводить текущие месяц и год

	$month = date("m", mktime(0,0,0,date('m'),1,date('Y')));
	$year  = date("Y", mktime(0,0,0,date('m'),1,date('Y')));

}

$skip          = date("w", mktime(0,0,0,$month,1,$year)) - 1; // узнаем номер дня недели
if($skip < 0){
	$skip = 6;
}
$daysInMonth   = date("t", mktime(0,0,0,$month,1,$year));	// узнаем число дней в месяце
$calendar_head = '';	// обнуляем calendar head
$calendar_body = '';	// обнуляем calendar boday
$day = 1;	// для цикла далее будем увеличивать значение

for($i = 0; $i < 6; $i++){ // Внешний цикл для недель 6 с неполыми

	$calendar_body .= '&lt;tr&gt;';	// открываем тэг строки
	for($j = 0; $j < 7; $j++){	// Внутренний цикл для дней недели

		if(($skip > 0)or($day > $daysInMonth)){ // выводим пустые ячейки до 1 го дня ип после полного количства дней

			$calendar_body .= '&lt;td class="none"&gt;&nbsp;&lt;/td&gt;';
			$skip--;

		}
		else{

			if($j == 0)	// если воскресенье то омечаем выходной
				$calendar_body .= '&lt;td class="holiday"&gt;'.$day.'&lt;/td&gt;';
			else{	// в противном случае просто выводим день в ячейке
				if ((date(j)==$day)&#038;&#038;(date(m)==$month)&#038;&#038;(date(Y)==$year)){//проверяем на текущий день
					$calendar_body .= '&lt;td class="today"&gt;'.$day.'&lt;/td&gt;';
				}
				else{
					$calendar_body .= '&lt;td class="day"&gt;'.$day.'&lt;/td&gt;';
				   }
				 }
			$day++; // увеличиваем $day
		}

	}
	$calendar_body .= '&lt;/tr&gt;'; // закрываем тэг строки
}

// заголовок календаря
$calendar_head = '
  &lt;tr&gt;
	&lt;th colspan="2"&gt;&lt;a href="?ym='.date("Ym", mktime(0,0,0,$month-1,1,$year)).'"&gt;&laquo; Пред&lt;/a&gt;&lt;/th&gt;
  	&lt;th colspan="3"&gt;'.date("F, Y", mktime(0,0,0,$month,1,$year)).'&lt;/th&gt;
  	&lt;th colspan="2"&gt;&lt;a href="?ym='.date("Ym", mktime(0,0,0,$month+1,1,$year)).'"&gt;След &raquo;&lt;/a&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;Понедельник&lt;/th&gt;
    &lt;th&gt;Вторник&lt;/th&gt;
    &lt;th&gt;Среда&lt;/th&gt;
    &lt;th&gt;Четверг&lt;/th&gt;
    &lt;th&gt;Пятница&lt;/th&gt;
    &lt;th&gt;Суббота&lt;/th&gt;
    &lt;th&gt;Воскресенье&lt;/th&gt;
  &lt;/tr&gt;';
</pre>
<p>Я думаю здесь уже нечего объяснять комментариев кажется достаточно, единственно я бы хотел пояснить почему 6 строк ведь недель в месяце всего четыре так вот, так как мы месяц начинаем выводить не с понедельника, то есть месяц не всегда начинается с понедельника, у нас появляются неполные недели и посчитав максимальное количество неполных и полных недель вы получите шесть недель вот поэтому и шесть). Но так как 6 недель встречаются не очень часто, то последняя строка в таблице чаще всего будет пустой.<br />
Далее осталось написать HTML код и вывести в нужных местах $calendar_head и $calendar_body, ну и прописать CSS стили. Рассмотрим содержание тега &lt;body&gt;:</p>
<pre class="prettyprint">
&lt;!-- таблица для вывода календаря --&gt;
&lt;table id="calendar" width="710" border="1" cellspacing="0" cellpadding="5"&gt;
	&lt;thead&gt;
		&lt;?php echo $calendar_head; ?&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
		&lt;?php echo $calendar_body; ?&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- таблица для вывода календаря --&gt;
</pre>
<p>Как видим календарь состоит полностью из таблицы заголовка и тела. Теперь наш календарь выглядит примерно аот так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/without-css.jpg" alt="calendar without css" title="without-css" width="600" class="alignnone size-full wp-image-529" /></center><br />
То есть осталось прописать CSS стили, ну примерно вот такие:</p>
<pre class="prettyprint">
body{
	margin:0 auto;
	width:800px;
	padding:10px;
}
#calendar{
	border:0px;
}
#calendar tbody tr{
	height:40px;
}
#calendar td{
	width:80px;
	border:0px;
	border:solid 1px #99FF99;
	font-size:22px;
	text-align:center;
}
#calendar th{
	background-color:#4DDBFF;
	border:solid 1px #00CCFF;
	color:#ffffff;
}
#calendar td.none{
	border:0px;
}
#calendar td.holiday{
	background-color:#FF6633;
	border-color:#FF531A;
	color:#94E4FF;
}
.day{
	background-color:#CCFFCC;
	color:#00B32D;
}
#calendar td.today{
	background-color:#FFFF99;
	border-color:#FF531A;
}
</pre>
<p>Ну вот и все теперь календарь выглядит примерно так:<br />
<center><img src="http://prootime.ru/wp-content/uploads/2010/06/witht-css.jpg" alt="cakendar witht-css" title="witht-css" width="600" class="alignnone size-full wp-image-521" /></center><br />
Весь исходный код можете посмотреть <a href="http://gist.github.com/443457" target="blank">здесь</a></p>
<div class="demo">
<a href="http://prootime.ru/demos/calendar" id="demo" target="blank">ДЕМО ВЕРСИЯ<br /><small>посмотреть в действии</small></a><a href="http://prootime.ru/demos/calendar/calendar.rar" id="demo" target="blank">СКАЧАТЬ<br /><small>скачать на компьютер</small></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/calendar-php/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Функции сортировки массивов в PHP</title>
		<link>http://prootime.ru/php-sorting-php-arrays</link>
		<comments>http://prootime.ru/php-sorting-php-arrays#comments</comments>
		<pubDate>Mon, 23 Aug 2010 15:54:37 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=678</guid>
		<description><![CDATA[В этом уроке рассмотрим способы быстрой сортировки массивов в PHP. Рассмотрим сортировку индексированных, ассоциативных и многомерных массивов используя некоторые полезные PHP функции. Массивы очень полезны если вам нужно хранить и обрабатывать большие объемы данных. Очень часто нужно бывает сортировать массивы по определенным критериям. К счастью PHP предоставляет большое количество функций сортировки, массивы можно сортировать используя [...]]]></description>
			<content:encoded><![CDATA[<p>В этом уроке рассмотрим способы быстрой сортировки массивов в PHP. Рассмотрим сортировку индексированных, ассоциативных и многомерных массивов используя некоторые полезные PHP функции.<span id="more-678"></span><br />
Массивы очень полезны если вам нужно хранить и обрабатывать большие объемы данных. Очень часто нужно бывает сортировать массивы по определенным критериям. К счастью PHP предоставляет большое количество функций сортировки, массивы можно сортировать используя различный критерии. Например, вы можете сортировать в порядке возрастания или убывания, по ключу или по значению.<br />
Я не собираюсь рассказывать о способах сортировки всех возможных массивов, расскажу только о тех которые вы вероятно посчитаете полезными для себя, и функциях которые вы часто будете использовать.<br />
И так начнем!
</p>
<p><br/></p>
<h2>Сортировка индексированных массивов: <em>sort()</em> и <em>rsort()</em></h2>
<p><em>sort()</em> сортирует индексированный массив в порядке возрастания. Это означает что A стоит после Z. Но есть одна вещь о которой нужно помнить при использовании этой функции, функция назначает новые ключи для элементов array, все ранее установленные значения ключей будут утеряны то есть переназначены.<br />
Возвращает <em>true</em> в случае удачной сортировки и <em>false</em> в случае возникновения ошибки. Пимер:</p>
<pre class="prettyprint">
$myArray = array( 1, 2, 'a', 'b', 'A', 'B' );
sort( $myArray );

// Выведет "A B a b 1 2"
foreach ( $myArray as $val ) echo "$val ";
</pre>
<p>Как видно при сортировке заглавные буквы идут перед прописными.<br />
<em>rsort()</em> работает точно также как и <em>sort()</em> за исключением того что он сортирует в порядке убывания:</p>
<pre class="prettyprint">
$myArray = array( 1, 2, 'a', 'b', 'A', 'B' );
rsort( $myArray );

// Выведет "2 1 b a B A"
foreach ( $myArray as $val ) echo "$val ";
</pre>
<p><br/></p>
<h2>Сортировка ассоциативных массивов: <em>asort()</em> и <em>arsort()</em></h2>
<p><em>sort()</em> и <em>rsort()</em> прекрасно подходят для индексированных массивов, где вы обычно не беспокоитесь о отношениях между ключами и значениями. Однако они могут привести к проблемам при работе с ассоциативными массивами. Рассмотрим следующий пример:</p>
<pre class="prttyprint">
$movie = array( "title"    => "Rear Window",
                "director" => "Alfred Hitchcock",
                "year"     => 1954,
                "minutes"  => 112 );

sort( $movie );

// Выведет "Array ( [0] => Alfred Hitchcock [1] => Rear Window [2] => 112 [3] => 1954 )"
print_r($movie);
</pre>
<p>Как вы заметили, функция <em>sort()</em> переиндексировала массив на с числовыми индексами, уничтожив изначальные индексы &#8220;title&#8221;, &#8220;director&#8221;, &#8220;year&#8221; и &#8220;minutes&#8221;<br />
Если вам нужно отсортировать значения в ассоциативном массиве, сохраняя ключи используйте <em>asort()</em> и <em>arsort()</em> вместо предыдущих двух функций. Эти функции сохраняют не только ключи, но и отношения между ключами и их значениями.<br />
Для сортировки массива в порядке возрастания используйте <em>asort()</em>:</p>
<pre class="prettyprint">
$movie = array( "title"    => "Rear Window",
                "director" => "Alfred Hitchcock",
                "year"     => 1954,
                "minutes"  => 112 );

asort( $movie );

// Получим "Array ( [director] => Alfred Hitchcock [title] => Rear Window [minutes] => 112 [year] => 1954 )"
print_r( $movie );
</pre>
<p><em>arsort()</em> сортирует массив в порядке убывания &#8211; опять же с сохранением ключей:</p>
<pre class="prettyprint">
$movie = array( "title"    => "Rear Window",
                "director" => "Alfred Hitchcock",
                "year"     => 1954,
                "minutes"  => 112 );

arsort( $movie );

// Получим "Array ( [year] => 1954 [minutes] => 112 [title] => Rear Window [director] => Alfred Hitchcock )"
print_r( $movie );
</pre>
<p><br/></p>
<h2>Сортировка ассоциативных массивов по ключу: <em>ksort()</em> и <em>krsort()</em></h2>
<p>Также как и сортировка ассоциативных массивов по значению, вы можете сортировать их по ключу. <em>ksort()</em> сортирует массив по возрастанию ключей конечно, а <em>krsort()</em> сортирует массив по убыванию. Также как и <em>asort()</em> и <em>arsort()</em>, эти функции сохраняют отношение ключ значение. Пару примеров:</p>
<pre class="prettyprint">
$movie = array( "title"    => "Rear Window",
                "director" => "Alfred Hitchcock",
                "year"     => 1954,
                "minutes"  => 112 );

// Получим "Array ( [director] => Alfred Hitchcock [minutes] => 112 [title] => Rear Window [year] => 1954 )"
ksort( $movie );
print_r( $movie );

// Получим "Array ( [year] => 1954 [title] => Rear Window [minutes] => 112 [director] => Alfred Hitchcock )"
krsort( $movie );
print_r( $movie );
</pre>
<p><br/></p>
<h2>Сортировка многомерных или нескольких массивов сразу с помощью функции <em>array_multisort()</em></h2>
<p>Функция <em>array_multisort()</em> может быть использована для сортировки сразу нескольких массивов или одного многомерного массива в соответствии с одной или несколькими размерностями. Эта функция сохраняет соответствие между ключами и соответствующими им значениями</p>
<h3>Сортировка нескольких массивов</h3>
<p>Сортируя сразу несколько массивов, просто указываете эти массивы через запятую. Вообще структура аргументов этой функции немного необычна, но удобна. Первым аргументом должен быть массив. Последующие аргументы могут быть как массивами, так и значениями, определяющими порядок сортировки, приведенными в нижеследующем списке:</p>
<ul>
<li>SORT_ASC &#8211; сортировать в возрастающем порядке</li>
<li>SORT_DESC &#8211; сортировать в убывающем порядке</li>
<li>SORT_REGULAR &#8211; сравнивать элементы обычным образом</li>
<li>SORT_NUMERIC &#8211; сравнивать элементы, как если бы они были числами</li>
<li>SORT_STRING &#8211; сравнивать элементы, как если бы они были строками</li>
</ul>
<p>Пример сортировки нескольких массивов:</p>
<pre class="prettyprint">
$ar1 = array ("10", 100, 100, "a");
$ar2 = array (1, 3, "2", 1);
array_multisort ($ar1, $ar2);
//Первы массив будет содержать 10, "a", 100, 100
//а второй 1, 1, "2", 3
</pre>
<p><br/></p>
<h2>Сортировка многомерного массива</h2>
<p>Пример:</p>
<pre class="prettyprint">
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
array_multisort ($ar[0], SORT_ASC, SORT_STRING,
                 $ar[1], SORT_NUMERIC, SORT_DESC);
</pre>
<p>В вышеприведенном примере, после сортировки, первый массив будет содержать 10, 100, 100, &#8220;a&#8221; (его элементы были отсортированы в возрастающем порядке так, как если бы они были строками), а второй массив будет содержать 1, 3, &#8220;2&#8243;, 1 (элементы отсортированы как числа, в порядке убывания).</p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/php-sorting-php-arrays/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Когда использовать $_SESSION и когда $_COOKIE</title>
		<link>http://prootime.ru/php-sessions-cookies</link>
		<comments>http://prootime.ru/php-sessions-cookies#comments</comments>
		<pubDate>Fri, 13 Aug 2010 18:29:04 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=665</guid>
		<description><![CDATA[Важнейшей особенностью веб-программирования является возможность беспрепятственно передавать данные от одной страницы другой. Чаще всего используется при работе с регистрацией, формами входа а также предания сообщений об ошибках и т.д. Хранение данных которые передаются от одной страницы в другую в PHP осуществляются благодаря двум глобальным переменным $_SESSION и $_COOKIE. Цель данной статьи дать краткий обзор различий [...]]]></description>
			<content:encoded><![CDATA[<p>Важнейшей особенностью веб-программирования является возможность беспрепятственно передавать данные от одной страницы другой. Чаще всего используется при работе с регистрацией, формами входа а также предания сообщений об ошибках и т.д.<span id="more-665"></span><br />
Хранение данных которые передаются от одной страницы в другую в PHP осуществляются благодаря двум глобальным переменным $_SESSION и $_COOKIE. Цель данной статьи дать краткий обзор различий между $_COOKIE и $_SESSION когда что лучше использовать, плюсы и минусы.<br />
Разница между куки и сессиями то как они хранят данные. Куки хранятся локально на компьютере пользователя тогда как сессии хранятся на сервере у вас.</p>
<h2>Сессии</h2>
<p>Сессии хранят временные данные о пользователях, и они особенно полезны, если вы не хотите, чтобы были доступны за пределами сервера. Это альтернатива использованию cookie, если пользователь отключил cookie на своем компьютере, поскольку PHP может автоматически переписать URL так, чтобы передать идентификатор сессии.</p>
<h3>Плюсы</h3>
<p> 1. Может легко хранить большое количество данных<br />
 2. Сохранять трафик, передовая только ссылки на сессии<br />
 3. Данные хранятся на сервере. Это дает сессии безопасными, потому что данные не могут быть просмотрены или отредактированы клиентом</p>
<h3>Минусы</h3>
<p> 1. Сессии заканчиваются при закрытии браузера, но вы можете настроить в php.ini на какое время хранить сессии. Можно настроить на вечное хранение.</p>
<blockquote><p><a href="http://www.actualproperties.com/russian/index.php?lang=ru">Недвижимость на тенерифе</a></p></blockquote>
<h2>Куки</h2>
<p>Куки отправляются на сервер при каждой загрузке страницы. PHP считывает и сохраняет данные в супер глобальную переменную $_COOKIE. После этого вы можете вызывать их где угодно в любом месте.</p>
<h3>Плюсы</h3>
<p> 1. Хранятся столько сколько потребуется даже после закрытия браузера<br />
 2. Удобно для функции &#8220;запомнить меня&#8221;<br />
 3. Удобно для хранения временных настроек. Например если пользователь просматривает нумерованный список элементов отсортированных определенным образом, настройки сортировки могут быть сохранены в куки.</p>
<h3>Минусы</h3>
<p> 1. Данные хранятся на машине пользователя. Это означает, что пользователь может изменить их, посмотреть<br />
 2. Можно хранить только ограниченное количество данных.</p>
<h2>Cookie в действии</h2>
<h3>Создание cookie</h3>
<p>Cookie создаются вызовом функции setcookie(), сервер добавляет соответствующую строку в заголовок. Если вы попытаетесь послать cookie после того, как начнете посылать HTML, PHP отметит наличие серьезных ошибок, а cookie не будет размещен. Функция setcookie() принимает три основных параметра имя cookie, значение и дату окончания срока действия. Например:</p>
<pre class="brush: php;">
setcookie("Ordering",$_POST['ChangeOrdering'], time()+31536000);
</pre>
<h3>Использование Cookie</h3>
<pre class="brush: php;">
 echo (isset($_COOKIE['ordering'])) ? $_COOKIE['ordering'] : 'cookie value not set';
</pre>
<h3>Удаление cookie</h3>
<pre class="brush: php;">
setcookie('favorite_color');
</pre>
<p>Установка cookie без значения все равно что его удаление. Это не удалит файл с машины пользователя. Чтобы удалить файл вам нужно поставить значение cookie в прошлом времени и браузер удалит файл.</p>
<h2>Сессии в действии</h2>
<h3>Создание сессии</h3>
<pre class="brush: php;">
session_start();
</pre>
<p>Эта функция должна вызываться где то в начале вашего кода до любого вывода. Когда вы вызываете эту функцию, PHP проверяет поставлены ли у пользователя куки сессии. Если да то он загружает их в супер глобальную переменную $_SESSION. А если нет то PHP создаст на сервере новый файл сессий и посылает ид сессии обратно клиенту.</p>
<h3>Установка значения</h3>
<pre class="brush: php;">
$_SESSION['first_name'] = 'Brian';
</pre>
<h3>Считывание значения</h3>
<pre class="brush: php;">
echo $_SESSION['first_name'];
</pre>
<h3>Удаление значения</h3>
<pre class="brush: php;">
unset($_SESSION['first_name']);
</pre>
<h3>Завершение сессии</h3>
<pre class="brush: php;">
session_destroy();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/php-sessions-cookies/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>PHP вывод текстового файла</title>
		<link>http://prootime.ru/php-text-files</link>
		<comments>http://prootime.ru/php-text-files#comments</comments>
		<pubDate>Tue, 27 Jul 2010 14:02:58 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=633</guid>
		<description><![CDATA[В этом коротком уроке научимся считывать и выводить текстовые файлы. Существует несколько способов, позволяющих открыть файл и отобразить его содержимое, и каждый способ имеет свою область применения. Не обязательно знать все способы достаточно хорошо выучить один способ и придерживаться его. Что мы сейчас и попробуем Сразу начнем с кода, вот он вообщем: $file='textfile.txt'; $fobj=fopen($file,"r"); $text=fread($fobj, [...]]]></description>
			<content:encoded><![CDATA[<p>В этом коротком уроке научимся считывать и выводить текстовые файлы. Существует несколько способов, позволяющих открыть файл и отобразить его содержимое, и каждый способ имеет свою область применения. Не обязательно знать все способы достаточно хорошо выучить один способ и придерживаться его. Что мы сейчас и попробуем<span id="more-633"></span><br />
Сразу начнем с кода, вот он вообщем:</p>
<pre class="brush: html;">
$file='textfile.txt';
$fobj=fopen($file,"r");
$text=fread($fobj, filesize($file));
echo("&lt;h2&gt;&lt;font color='blue'&gt;Вывод текстового файла&lt;/font&gt;&lt;h2&gt;");
echo("&lt;br&gt;");
echo("&lt;font size=3&gt;");
echo($text);
echo("&lt;/font&gt;");
fclose($fobj);
</pre>
<p>Теперь по порядку прокомментируем каждую строчку кода. В первой строке мы сохраняем в переменную адрес нашего текстового файла, здесь токо название потому что файл находится в той же директории что и PHP файл с кодом:</p>
<pre class="brush: html;">
$file='textfile.txt';
</pre>
<p>На следующей строчке мы открываем файл функцией fopen(), функция имеет два основных параметра &#8211; имя открываемого  файла и способ его открытия. С первым параметром все ясно, а вот вторым параметром мы указываем букву которая определяет будете ли вы читать(r), писать(w) или добавлять данные в файл(a) указыанный в первом параметре. Так как мы не собираемся добавлять в наш файл ничего, просто откроем его для чтения:</p>
<pre class="brush: php;">
$fobj=fopen($file,"r");
</pre>
<p>Далее мы считываем файл функцией fread(), он тоже требует два параметра первый дескриптор это у нас переменная $fobj, втрорым параметром передаем количество читаемых байтов. Выглядит это все так:</p>
<pre class="brush: php;">
$text=fread($fobj, filesize($file));
</pre>
<p>Следующие несколько строчек мы просто пишем HTML код для вывода текста, хотя можно было прост вывести ну ладно:</p>
<pre class="brush: php;">
echo("&lt;h2&gt;&lt;font color='blue'&gt;Вывод текстового файла&lt;/font&gt;&lt;h2&gt;");
echo("&lt;br&gt;");
echo("&lt;font size=3&gt;");
echo($text);
echo("&lt;/font&gt;");
</pre>
<p>Ну и последним шагом будет закрытие файла:</p>
<pre class="brush: php;">
fclose($fobj);
</pre>
<p>Ну вот все пока.</p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/php-text-files/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Выделение заглавных букв</title>
		<link>http://prootime.ru/php-the-first-letter-capitalized</link>
		<comments>http://prootime.ru/php-the-first-letter-capitalized#comments</comments>
		<pubDate>Thu, 24 Jun 2010 15:26:50 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=561</guid>
		<description><![CDATA[Выделение первых букв используют очень многие дизайнеры, они могут иметь другой шрифт, другой цвет, или даже быть картинкой вместо буквы. В этом уроке мы попытаемся выделить первые буквы параграфов использую HTML разметку, CSS стили, а затем попробуем автоматизировать процесс с помощью PHP функции. HTML Для того чтобы выделить первую букву параграфа, мы должны обернуть его [...]]]></description>
			<content:encoded><![CDATA[<p>Выделение первых букв используют очень многие дизайнеры, они могут иметь другой шрифт, другой цвет, или даже быть картинкой вместо буквы. В этом уроке мы попытаемся выделить первые буквы параграфов использую HTML разметку, CSS стили, а затем попробуем автоматизировать процесс с помощью PHP функции.<span id="more-561"></span></p>
<blockquote><p>HTML</p></blockquote>
<p>Для того чтобы выделить первую букву параграфа, мы должны обернуть его в специальный HTML элемент к которому мы затем сможем применять некоторые CSS стили. Для этого я собираюсь использовать простой <strong>span</strong> элемент с классом <strong>initialcap</strong>. Результат будет выглядеть примерно так:</p>
<pre class="brush: html;">
<span class="initialcap">П</span>ервая буква текст текст текст, ...
</pre>
<p>Только не повторяйте букву после <strong>span</strong>&#8216;a</p>
<blockquote><p>
CSS</p></blockquote>
<p>Пришло время для написания CSS стилей, но для начала условимся что наш параграф имеет размер шрифта 14 пикселей, и высоту строки в 18 пикселей.<br />
1.Сдвинем нашу первую букву влево, что бы  весь текст параграфа обтекал его</p>
<pre class="brush: css;">
span.initialcap{
    float: left;
}
</pre>
<p>2. Применим к нему размер шрифта 40 пикселей и высоту строки в 35 пикселей, чтобы буква отличалась от остального текста.</p>
<pre class="brush: css;">
span.initialcap{
    float: left;

    font-size: 40px;
    line-height: 35px;
}
</pre>
<blockquote><p><a href="http://realcode.ru/">Каталог исходников.</a></p></blockquote>
<p>3. Ну и применим к нашей букве шрифт <strong>Serif</strong>, синий цвет и добавим маленькое пространство справа.</p>
<pre class="brush: css;">
span.initialcap{
    float: left;

    font-size: 40px;
    line-height: 35px; 

    font-family: Georgia, "Times New Roman", Times, serif;
    color: #2583ad; /* синий */
    padding-right: 5px;
}
</pre>
<blockquote><p>Автоматизация</p></blockquote>
<p>Ну а теперь последний этап урока  автоматизация всего того что мы делали с помощью конечно же PHP. Вы же не будете каждый раз вручную прописывать <strong>span</strong> с классом. Эта функция поможет этого не делать:</p>
<pre class="brush: php;">
function wpguy_initial_cap($content){

    $searchfor = '/&gt;(&lt;a [^&gt;]+&gt;)?([^&lt;s])/';

    $replacewith = '&gt;$1&lt;span class="initialcap"&gt;$2&lt;/span&gt;';

    $content = preg_replace($searchfor, $replacewith, $content, 1);

    return $content;
}
</pre>
<p>Поясним как работает функция. Во первых ей нужно передать контент в котором нужно выделить первую букву, функция находит ее благодаря регулярным выражениям и оборачивает ее в наш <strong>span</strong> с классом <strong>initialcap</strong>, ну и возвращает обратно уже отформатированный контент.<br />
Для того чтобы воспользоваться этой функцией на своем сайте нужно просто при выводе контента проводить через эту функцию, не забыв перед этим прописать стили.</p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/php-the-first-letter-capitalized/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Кнопка случайного поста</title>
		<link>http://prootime.ru/wordpress-button</link>
		<comments>http://prootime.ru/wordpress-button#comments</comments>
		<pubDate>Mon, 21 Jun 2010 15:44:12 +0000</pubDate>
		<dc:creator>dzantiev</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://prootime.ru/?p=545</guid>
		<description><![CDATA[Многие хотят поставить ссылку (кнопку) на случайный пост в сйдбаре, но не знают с чего начать. Сейчас я попытаюсь показать вам как это реализовать на WordPress. Как наверное многие уже знают, WordPress хранит посты в базе данных MySQL. Чтобы получить URL случайного поста из базы данных, нам нужно составить запрос к MySQL базе. На самом [...]]]></description>
			<content:encoded><![CDATA[<p>Многие хотят поставить ссылку (кнопку) на случайный пост в сйдбаре, но не знают с чего начать. Сейчас я попытаюсь показать вам как это реализовать на WordPress.<br />
Как наверное многие уже знают, WordPress хранит посты в базе данных <strong>MySQL</strong>. Чтобы получить URL случайного поста из базы данных, нам нужно составить запрос к <strong>MySQL</strong> базе. На самом деле это не так сложно как может казаться, спасибо <a href="http://codex.wordpress.org/Function_Reference/wpdb_Class">WPDB</a>, <span id="more-545"></span>за класс базы данных который идет с WordPress, благодаря этому классу нам не надо беспокоится о имени базы, пароле, соединении с базой и т.д. Нам всего лишь нужно отправить запрос и получить результат.</p>
<h2>MySQL запрос</h2>
<p>Наш запрос к базе должен просмотреть таблицу постов и выбрать случайным образом один из опубликованных. Запрос будет выглядеть примерно так:</p>
<pre class="prettyprint">
SELECT guid FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY RAND() LIMIT 1
</pre>
<p>Теперь пояcним:<br />
1. <strong>SELECT guid</strong> &#8211; выбираем значение столбца <b>guide</b>, которая содержит URL к текущему посту.<br />
2. <strong>FROM wp_posts</strong> &#8211; здесь указываем таблицу постов(в данном случае префикс wp_).<br />
3. <strong>WHERE post_type=&#8217;post&#8217;</strong> &#8211; так как вложения также сохраняются в таблице постов, мы должны указать что нам нужны только посты<br />
4. <strong>AND post_status=&#8217;publish&#8217;</strong> &#8211; выбираем только из опубликованных постов.<br />
5. <strong>ORDER BY rand()</strong> &#8211; упорядочиваем их в случайном порядке.<br />
6. <strong>LIMIT 1</strong> &#8211; и выводим первый пост</p>
<h2>PHP код</h2>
<p>Теперь напишем PHP код. Как я уже говорил будем использовать WPDB класс, который встроен в WordPress. Это наш код:</p>
<pre class="prettyprint">
$randomPost = $wpdb->get_var("SELECT guid FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY rand() LIMIT 1");
echo '&lt;a href="'.$randomPost.'"&gt;Random Post&lt;/a&gt;';
</pre>
<p>В первой строке кода, мы запускаем запрос используя <strong>WPDB</strong> функцию <strong>get_var()</strong>, и сохраняем результат в переменной $randomPost. Затем на следующей строке выводим ссылку, то есть мы создаем простую ссылку и вместо url записываем наш результат(случайный пост)<br />
Отмечу в PHP коде я использовал <strong>$wpdb->posts</strong> вместо <strong>wp_posts</strong>. Так как <b>wp_</b> это префикс который при установке мы можем и опустить или поменять, то есть не у всех такой префикс, <strong>$wpdb->posts</strong> выбирает нужную таблицу не зависит от префикса. Вот и все.</p>
]]></content:encoded>
			<wfw:commentRss>http://prootime.ru/wordpress-button/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

