<?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>Mihalytch personal blog &#187; PHP</title>
	<atom:link href="http://mihalytch.org.ua/programming/php/feed" rel="self" type="application/rss+xml" />
	<link>http://mihalytch.org.ua</link>
	<description>Все о высоких технологиях</description>
	<lastBuildDate>Thu, 20 May 2010 07:56:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Получаем список всех вложеных файлов и папок на php</title>
		<link>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html</link>
		<comments>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html#comments</comments>
		<pubDate>Tue, 18 Nov 2008 10:12:17 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[chmod]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html</guid>
		<description><![CDATA[Начнем как всегда с постановки задачи. Нам необходимо получить список всех вложенных директорий и файлов, находящихся в конкретной папке, и выполнить некоторые действия над ними. Для этого напишем функцию, которая будет получать список всех файлов и папок, отделять эти две категории, обрабатывать отдельно и в случае нахождения вложенных папок будет вызывать себя рекурсивно. В нижеприведенном [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем как всегда с постановки задачи. Нам необходимо получить список всех вложенных директорий и файлов, находящихся в конкретной папке, и выполнить некоторые действия над ними. Для этого напишем функцию, которая будет получать список всех файлов и папок, отделять эти две категории, обрабатывать отдельно и в случае нахождения вложенных папок будет вызывать себя рекурсивно.<span id="more-67"></span></p>
<p>В нижеприведенном примере мы будем выполнять действия над вложенными объектами текущей папки, присваивать всем файлам права на чтение/запись/выполнение - 666, а папкам - 777 и выводить их список на экран.</p>
<pre class="brush: php;">
function rdir ($path2dir) {
    $d = dir ($path2dir);  

    while (false !== ($entry = $d-&gt;read())) {  

        if ($entry!='.' &amp;&amp; $entry!='..' &amp;&amp; $entry!='' ) {
            $all_path = $path2dir.$entry;
            $new_path = go ($all_path, is_file($all_path));  

            if (!is_file($all_path)) {
                if (!rdir ($new_path)) {
                    return false;
                }
            }
        }
    }  

    return true;
}

function go ($path2file, $is_file = true) {  

    if ($is_file) {  

        # выполняем операцию над файлом
        # выведем относительный путь к обрабатываемому файлу
        echo $path2file,&quot;\n&quot;;  

        # установим необходимые права на файл
        if (!chmod($path2file,0666)) {
            return false;
        }  

    } else {  

        # выполняем операцию над папкой
        $path2file = $path2file.'/';  

        # выведем относительный путь к обрабатываемой директории
        echo &quot;\n\n&quot;,$path2file,&quot;\n&quot;;  

        # установим необходимые права на папку
        if (!chmod($path2dir,0777)) {
            return false;
        }
    }  

    return $path2file;
}

# начинаем с текущей папки
$folder = './';  

# непосредственно вызываем функцию
if (rdir ($folder)) {
    echo 'DONE';
}
</pre>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=67&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Время выполнения php скрипта</title>
		<link>http://mihalytch.org.ua/programming/php/the-time-of-php-script.html</link>
		<comments>http://mihalytch.org.ua/programming/php/the-time-of-php-script.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 10:08:06 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/the-time-of-php-script.html</guid>
		<description><![CDATA[У каждого, кто хоть немного задумывался об оптимизации быстродействия своего кода, возникала потребность в измерении времени исполнения всего скрипта либо его участков. Конечно, данный способ не идеален в плане точности измерения, но для грубых измерений вполне сойдет. function get_time () {         # Считываем текущее время     $mtime = microtime();         # Разделяем [...]]]></description>
			<content:encoded><![CDATA[<p>У каждого, кто хоть немного задумывался об оптимизации быстродействия своего кода, возникала потребность в измерении времени исполнения всего скрипта либо его участков. Конечно, данный способ не идеален в плане точности измерения, но для грубых измерений вполне сойдет.<span id="more-66"></span></p>
<pre class="brush: php;">
function get_time () {
        # Считываем текущее время
    $mtime = microtime();
        # Разделяем секунды и миллисекунды
    $mtime = explode(&quot; &quot;,$mtime);
        # Составляем одно число из секунд и миллисекунд
    $mtime = $mtime[1] + $mtime[0];
        # Возвращаем текущее время в переменную
    return $mtime;
}  

function end_time ($start_time) {
        # Записываем текущее время в переменную
    $end_time = get_time ();
        # Вычисляем разницу
    $total_time = ($end_time - $start_time);
        # Выводим не экран
    echo 'Страница сгенерирована за ',$total_time,' секунд !';
}  

    # Записываем в переменную время на начало измерения
$start_time = get_time ();  

    # некоторый участок кода
for ($i=0; $i&amp;lt;1000000; $i++) {
    #
}  

    # Выводим результат
end_time ($start_time);
</pre>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=66&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/the-time-of-php-script.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Время и дата в php</title>
		<link>http://mihalytch.org.ua/programming/php/date-and-time-in-php.html</link>
		<comments>http://mihalytch.org.ua/programming/php/date-and-time-in-php.html#comments</comments>
		<pubDate>Fri, 29 Aug 2008 14:36:48 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DATE]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mihalytch]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/date-and-time-in-php.html</guid>
		<description><![CDATA[Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в PHP. Для начала разберемся с установкой временной зоны. Для этого всего лишь необходимо воспользоваться функцией bool date_default_timezone_set ( string $timezone_identifier); Список временных зон (параметров для вышеописанной функции) доступен на официальном сайте PHP. Итак, для того чтобы установить нужную нам временную зону, [...]]]></description>
			<content:encoded><![CDATA[<p>Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в PHP.<span id="more-55"></span></p>
<p>Для начала разберемся с <strong>установкой временной зоны</strong>. Для этого всего лишь необходимо воспользоваться функцией</p>
<pre>bool <a target="_blank" href="/go.php?url=ua2.php.net/manual/en/function.date-default-timezone-set.php" title="date_default_timezone_set">date_default_timezone_set</a> ( string <tt>$timezone_identifier</tt>);</pre>
<p>Список временных зон (параметров для вышеописанной функции) доступен на <a target="_blank" href="http://www.php.net/manual/en/timezones.others.php" title="Список временных зон">официальном сайте PHP</a>. Итак, для того чтобы установить нужную нам временную зону, необходимо вызвать функцию date_default_timezone_set в начале исполняемого скрипта.</p>
<p>Для того чтобы определить текущую временную зону в PHP есть стандартный инструмент:</p>
<pre>string <a target="_blank" href="http://mihalytch.org.ua/go.php?url=ua2.php.net/manual/en/function.date-default-timezone-get.php" title="date_default_timezone_get">date_default_timezone_get</a>  ( void  );</pre>
<p>О <a target="_blank" href="http://mihalytch.org.ua/programming/php/comparison-of-dates.html" title="Сравнение дат в PHP">сравнении двух дат</a> я уже упоминал ранее. Далее рассмотрим<strong> вычитание и сложение даты и времени</strong> или <strong>как определить какая дата и время были N дней X часов назад!? </strong>:)</p>
<p>Года полтора назад встречал "интересное" решение. Некий разработчик загнал в массив соответствия "номер месяца"=&gt;"количество дней", затем парсил текущую дату и "вручную" отнимал или прибавлял количество дней, часов, минут, секунд.  Описывать подробно этот алгоритм не буду, так как не привык изобретать велосипед. Предлагаю "формулу" гораздо проще:</p>
<pre class="brush: php;">
# $sec - разница в секундах с текущим временем;
# $min - разница в минутах с текущим временем;
# $hour - разница в часах с текущим временем;
# $days - разница в днях с текущим временем;
$need_date = date (&quot;Y-m-d H:i:s&quot;, time()+( $sec + 60*($min + 60*($hour + 24*$day))));
</pre>
<p>Где "<em>Y-m-d H:i:s</em>" всего лишь шаблон времени, которое мы получим в текстовом формате.</p>
<p>Для тех, кто хочет узнать не будущее, а прошлое время - необходимо заменить вот этот плюс <em>... time()<font color="#ff0000">+</font>( $sec ...</em> на минус.</p>
<p>На этой оптимистической ноте заканчиваю описание. Остальные возможности PHP предлагаю рассмотреть самостоятельно на официальном сайте php.net в качестве домашнего задания.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=55&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/date-and-time-in-php.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Постраничный вывод</title>
		<link>http://mihalytch.org.ua/programming/php/paginal-conclusion.html</link>
		<comments>http://mihalytch.org.ua/programming/php/paginal-conclusion.html#comments</comments>
		<pubDate>Thu, 24 Jul 2008 12:41:05 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/paginal-conclusion.html</guid>
		<description><![CDATA[Начнем по обыкновению с постановки задачи. Необходимо организовать постраничный вывод любого рода контента. Поле деятельности - движок, написаный на PHP, и данные, которые хранятся в базе MySQL. Разобьем нашу задачу на два подпункта. Нам необходимо организовать выбор из базы необходимой нам части информации (иными словами - страницы), а также сгенерировать меню навигации по страницам. Я считаю [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем по обыкновению с постановки задачи. Необходимо организовать постраничный вывод любого рода контента. Поле деятельности - движок, написаный на PHP, и данные, которые хранятся в базе MySQL.<span id="more-44"></span></p>
<p>Разобьем нашу задачу на два подпункта. Нам необходимо организовать выбор из базы необходимой нам части информации (иными словами - страницы), а также сгенерировать меню навигации по страницам.</p>
<p>Я считаю наиболее удобной следующего вида схему навигации по страницам:</p>
<p>&lt;&lt; ... n-1 n n+1 ... &gt;&gt;,</p>
<p>где "&lt;&lt;" переход на первую страницу ("&lt;&lt; ... " не отображаются когда текущая страница первая), " n " - номер текущей страницы, "n-1"и "n+1" - ссылки на предыдущую и следующую страницы соответственно, "..." просто три точки. =)</p>
<p>Теперь приступим непосредственно к делу. Для начала определим константу, которой присвоим максимально допустимое значение единиц контента на страницу.</p>
<pre class="brush: php;">DEFINE('ITEM_PER_PAGE', 4);</pre>
<p>Следующим шагом необходимо узнать количество всех доступных элементов. Например:</p>
<pre class="brush: php;">
$items_cnt_arr = $this-&gt;db-&gt;GetRow(&quot;SELECT COUNT(`id`) as `all` FROM `content` &quot;);
# в этой переменно уже храниться общее кол-во элементов.
$items_cnt = $items_cnt_arr['all'];
#делим кол-во всех элементов на кол-во элементов на странице и округляем до большего
$max_pages = ceil($items_cnt/ITEM_PER_PAGE);
</pre>
<p>Теперь определить какой передаваемый параметр будет отвечать за запрашиваемую страницу и проверить допустимо ли значение, которое он принимает.</p>
<pre class="brush: php;">
if ( empty($_GET['page']) || !is_numeric($_GET['page'])) {
    # если передаваемое значение пусто или не число
    $curr_page = 0;
} elseif ($_GET['page']&gt;=$max_pages){
    # если не превышает максимально допустимого числа страниц
    $curr_page = ($max_pages-1);
} else {
    # если входит в область допустимых значений
    $curr_page = $_GET['page'];
}
</pre>
<p>Для того чтобы выбрать необходимые элементы для вывода на страницу теперь достаточно выполнить следующего рода запрос:</p>
<pre class="brush: sql;">
SELECT *
FROM `content`
LIMIT &quot;.($curr_page*ITEM_PER_PAGE).&quot;, &quot;.ITEM_PER_PAGE;
</pre>
<p>(выделенная жирным часть обязательно должна присутствовать :)</p>
<p>Теперь организуем генерацию меню навигации.</p>
<pre class="brush: php;">
$_nav_text = '';
# ссылка на первую страницу
if ($curr_page&gt;0) {
    # если текущая страница не первая
    $_nav_text .= '&lt;a href=&quot;/phone/0&quot; mce_href=&quot;/phone/0&quot;&gt;«&lt;/a&gt;  ...';
} 

for ($k=0;$k&amp;lt;3;$k++) {
    # номер страницы, содержащейся в ссылке
    $_link_id = $curr_page+($k-1);

    if (($_link_id &lt; $max_pages) &amp;&amp; ($_link_id&gt;=0)) {
        if ($_link_id != $curr_page) {
            # выводим ссылки на предыдущие и следующие страницы
            $_nav_text .= ' &lt;a href=&quot;index.php?page='.$_link_id.'&quot; mce_href=&quot;index.php? page='.$_link_id.'&quot;&gt;'.($_link_id+1).'&lt;/a&gt; ';
        } else {
            # выводим номер текущей страницы
            $_nav_text .= ' &lt;b&gt;'.($_link_id+1).'&lt;/b&gt;';
        }
    }
}

// ссылка на последнюю страницу
if ($curr_page &lt; ($max_pages-1)) {
    # если текущая страница не последняя
    $_nav_text .= '  ...  &lt;a href=&quot;index.php?page='.($max_pages-1).'&quot; mce_href=&quot;index.php?page='.($max_pages-1).'&quot;&gt;»&lt;/a&gt;; ';
}
</pre>
<p>Теперь в переменной $_nav_text содержится код ссылок меню навигации.<br />
<strong>UPD.1.</strong> В данной статье принято считать страницы с нуля. Чтобы получить человеко понятную нумерацию, нужно изменить <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">$curr_page = $_GET['page']; на $curr_page = $_GET['page']-1; .</span></p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=44&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/paginal-conclusion.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Аналог foreach в javascript</title>
		<link>http://mihalytch.org.ua/programming/php/analogue-foreach-in-javascript.html</link>
		<comments>http://mihalytch.org.ua/programming/php/analogue-foreach-in-javascript.html#comments</comments>
		<pubDate>Wed, 23 Jul 2008 21:39:40 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/analogue-foreach-in-javascript.html</guid>
		<description><![CDATA[В PHP конструкция foreach - это очень удобный инструмент для обхода элементов массива. В бою на самом деле используеться этот оператор следующим образом: foreach ($some_array as $key=&#38;gt;$val) {   echo $key,' = ',$val,''; } Опять таки по велению случая, мне было необходимо использовать ее аналог в JavaScript. Соответствующий вариант использования аналогичной конструкции в JavaScript`е представлен [...]]]></description>
			<content:encoded><![CDATA[<p>В PHP конструкция foreach - это очень удобный инструмент для обхода элементов массива.<span id="more-43"></span><br />
<s>В бою</s> на самом деле используеться этот оператор следующим образом:</p>
<pre class="brush: php;">
foreach ($some_array as $key=&amp;gt;$val) {
    echo $key,' = ',$val,'';
}
</pre>
<p>Опять таки по велению случая, мне было необходимо использовать ее аналог в JavaScript. Соответствующий вариант использования аналогичной конструкции в JavaScript`е представлен ниже:</p>
<pre class="brush: php;">
for (var key in some_array) {
    var val = some_array [key];
    alert (key+' = '+val);
}
</pre>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=43&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/analogue-foreach-in-javascript.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>captcha на php</title>
		<link>http://mihalytch.org.ua/programming/php/captcha-in-php.html</link>
		<comments>http://mihalytch.org.ua/programming/php/captcha-in-php.html#comments</comments>
		<pubDate>Fri, 04 Jul 2008 15:34:52 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/captcha-in-php.html</guid>
		<description><![CDATA[Создаем "каптчу" или боремся со спам-ботами) Перед нами стоит задача - написать простой скрипт, генерирующий картинку с циферками, а также нам необходимо будет проверить, соответствуют ли введенные пользователем данные изображенным на"captcha". Первым делом пишем скрипт: if (empty($_SESSION)) { session_start(); } # generate 5 digit random number $rand = rand(10000, 99999); $_SESSION['captcha'] = md5($rand); if ($rand) [...]]]></description>
			<content:encoded><![CDATA[<p>Создаем "каптчу" или боремся со спам-ботами)<span id="more-38"></span></p>
<p>Перед нами стоит задача - написать простой скрипт, генерирующий картинку с циферками, а также нам необходимо будет проверить, соответствуют ли введенные пользователем данные изображенным на"captcha".</p>
<p>Первым делом пишем скрипт:</p>
<pre class="brush: php;">
if (empty($_SESSION)) {
    session_start();
}
    # generate 5 digit random number
$rand = rand(10000, 99999);
$_SESSION['captcha'] = md5($rand); 

if ($rand) {
    header(&quot;Expires: Sun, 1 Jan 2000 12:00:00 GMT&quot;);
    header(&quot;Last-Modified: &quot; . gmdate(&quot;D, d M Y H:i:s&quot;) . &quot;GMT&quot;);
    header(&quot;Cache-Control: no-store, no-cache, must-revalidate&quot;);
    header(&quot;Cache-Control: post-check=0, pre-check=0&quot;, false);
    header(&quot;Pragma: no-cache&quot;);
    header('Content-type: image/jpeg'); 

    $image = imagecreate(55, 15);
    $bgColor = imagecolorallocate($image, 255, 255, 255);
    $textColor = imagecolorallocate($image, 0, 0, 0);
    imagestring($image, 5, 5, 0, $rand, $textColor);
    imagejpeg($image);
    imagedestroy($image);
}
</pre>
<p>называем его, например - security_img.php, сохраняем.</p>
<p>Далее в коде формы пишем:</p>
<pre class="brush: xml;">
&amp;lt;img src=&quot;security_img.php&quot; alt=&quot;Security code&quot;&amp;gt;
&amp;lt;input id=&quot;security_code&quot; name=&quot;security_code&quot; type=&quot;text&quot; value=&quot;&quot; /&amp;gt;
</pre>
<p>А проверять введенные данные на соответствие будем следующим образом:</p>
<pre class="brush: php;">
if($_SESSION['captcha'] == md5($_POST['security_code']) ) {
    echo &quot;Вы человек!&quot;;
}  else {
    echo &quot;ТЫ РОБОТ-СПАМЕР =)!&quot;;
}
</pre>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=38&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/captcha-in-php.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Отправка почты средствами PHP</title>
		<link>http://mihalytch.org.ua/programming/php/sending-e_mails.html</link>
		<comments>http://mihalytch.org.ua/programming/php/sending-e_mails.html#comments</comments>
		<pubDate>Fri, 04 Jul 2008 14:07:43 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[mail]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/sending-e_mails.html</guid>
		<description><![CDATA[Для отправки почты существует множество уже написанных функций и библиотек... Самый простой способ - это отправка почты с помощью функции: bool mail (string $to, string $subject, string $message [, string $additional_headers[, string $additional_parameters ]]) По мнению автора более надежный способ отправки почты средствами PHP - это отправка письма через SMTP с помощью сокетов. Ниже приведен [...]]]></description>
			<content:encoded><![CDATA[<p>Для отправки почты существует множество уже написанных функций и библиотек...</p>
<p>Самый простой способ - это отправка почты с помощью функции:</p>
<pre class="brush: php;">bool mail (string $to, string $subject, string $message
                   [, string $additional_headers[, string $additional_parameters ]])</pre>
<p><span id="more-37"></span></p>
<p>По мнению автора более надежный способ отправки почты средствами PHP - это отправка письма через SMTP с помощью сокетов.</p>
<p>Ниже приведен код класса для отправки писем через SMTP:</p>
<pre class="brush: php;">
class SendMail {
	private $smtp_username = &quot;&quot;; // имя пользователя
	private $smtp_port     = &quot;&quot;; // порт для отправки почты
	private $smtp_host     = &quot;&quot;; // почтовый smtp-сервер
	private $smtp_password = &quot;&quot;; // пароль
	private $smtp_debug    = &quot;&quot;; // true - включен вывод ошибок
	                                      // false - выключен вывод ошибок
	private $smtp_charset  = &quot;&quot;; // кодировка тела письма
	private $smtp_from     = &quot;&quot;; // имя отправителя
	public function send ($mail_to, $subject, $message, $headers='') { 

	public function send ($mail_to, $subject, $message, $headers='') { 

        $mail_body = &quot;Date: &quot;.date(&quot;D, d M Y H:i:s&quot;) . &quot; UT\r\n&quot;;
        $mail_body .= 'Subject: =?'.$this-&amp;gt;smtp_charset.'?B?'.base64_encode($subject).&quot;=?=\r\n&quot;; 

        if ($headers) {
            $mail_body .= $headers.&quot;\r\n\r\n&quot;;
        } else {
            $mail_body .= &quot;Reply-To: &quot;.$this-&amp;gt;smtp_username.&quot;\r\n&quot;;
            $mail_body .= &quot;MIME-Version: 1.0\r\n&quot;;
            $mail_body .= &quot;Content-Type: text/plain; charset=\&quot;&quot;.$this-&amp;gt;smtp_charset.&quot;\&quot;\r\n&quot;;
            $mail_body .= &quot;Content-Transfer-Encoding: 8bit\r\n&quot;;
            $mail_body .= &quot;From: \&quot;&quot;.$this-&amp;gt;smtp_from.&quot;\&quot; &amp;lt;&quot;.$this-&amp;gt;smtp_username.&quot;&amp;gt;\r\n&quot;;
            $mail_body .= &quot;To: $mail_to &amp;lt;$mail_to&amp;gt;\r\n&quot;;
            $mail_body .= &quot;X-Priority: 3\r\n\r\n&quot;;
        } 

        $mail_body .=  $message.&quot;\r\n&quot;; 

        if( !$socket = fsockopen($this-&amp;gt;smtp_host, $this-&amp;gt;smtp_port, $errno, $errstr, 30) ) {
            if ($this-&amp;gt;smtp_debug) echo $errno.&quot;&amp;lt;br&amp;gt;&quot;.$errstr;
            return false;
        } 

        if (!$this-&amp;gt;server_parse($socket, &quot;220&quot;, __LINE__)) return false; 

        fputs($socket, &quot;EHLO &quot; . $this-&amp;gt;smtp_host . &quot;\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;250&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'I can not send HELO!';
            fclose($socket);
            return false;
        } 

        fputs($socket, &quot;AUTH LOGIN\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;334&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'I can not find an answer to request authorization.';
            fclose($socket);
            return false;
        } 

        fputs($socket, base64_encode($this-&amp;gt;smtp_username) . &quot;\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;334&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'Login authentication server has not been adopted!';
            fclose($socket);
            return false;
        } 

        fputs($socket, base64_encode($this-&amp;gt;smtp_password) . &quot;\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;235&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'Password was not adopted as a server right! Error authorise!';
            fclose($socket);
            return false;
        } 

        fputs($socket, &quot;MAIL FROM: &amp;lt;&quot;.$this-&amp;gt;smtp_username.&quot;&amp;gt;\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;250&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'I can not send a command MAIL FROM: ';
            fclose($socket);
            return false;
        }
        fputs($socket, &quot;RCPT TO: &amp;lt;&quot; . $mail_to . &quot;&amp;gt;\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;250&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'I can not send a command RCPT TO: ';
            fclose($socket);
            return false;
        } 

        fputs($socket, &quot;DATA\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;354&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'I can not send a command DATA';
            fclose($socket);
            return false;
        } 

        fputs($socket, $mail_body.&quot;\r\n.\r\n&quot;); 

        if (!$this-&amp;gt;server_parse($socket, &quot;250&quot;, __LINE__)) {
            if ($this-&amp;gt;smtp_debug) echo 'No body was able to send letters. Letter was not sent!';
            fclose($socket);
            return false;
        } 

        fputs($socket, &quot;QUIT\r\n&quot;);
        fclose($socket); 

        return true;
	} 

	private function server_parse($socket, $response, $line = __LINE__) {
        global $config;
    	while (substr($server_response, 3, 1) != ' ') {
	        if (!($server_response = fgets($socket, 256))) {
	               if ($this-&amp;gt;smtp_debug) echo &quot;Problems sending mail! $response$line&quot;;
                   return false;
                }
    	} 

	    if (!(substr($server_response, 0, 3) == $response)) {
           if ($this-&amp;gt;smtp_debug) echo &quot;Problems sending mail!$response$line&quot;;
           return false;
        } 

    	return true;
	} 

}
</pre>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=37&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/sending-e_mails.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Статические свойства и методы класса</title>
		<link>http://mihalytch.org.ua/programming/php/static-objects-and-methods.html</link>
		<comments>http://mihalytch.org.ua/programming/php/static-objects-and-methods.html#comments</comments>
		<pubDate>Fri, 20 Jun 2008 20:24:01 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[ООП]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/staticheskie-svojstva-i-metody-klassa.html</guid>
		<description><![CDATA[Статические свойства и методы класса существуют для того чтобы ими можно было воспользоваться, не объявляя объект класса. Ключевое слово static делает члены и методы класса доступными в любой момент без объявления объекта класса. Обращение к статическому свойству выглядит следующим образом имя_класса::имя_свойства и к статическому методу соответственно: имя_класса::имя_метода([параметры...]) Зачастую классы со статическими компонентами используют в качестве библиотек [...]]]></description>
			<content:encoded><![CDATA[<p>Статические свойства и методы класса существуют для того чтобы ими можно было воспользоваться, не объявляя объект класса. Ключевое слово static делает члены и методы класса доступными в любой момент без объявления объекта класса.<span id="more-33"></span></p>
<p>Обращение к статическому свойству выглядит следующим образом</p>
<pre>имя_класса::имя_свойства</pre>
<p>и к статическому методу соответственно:</p>
<pre>имя_класса::имя_метода([параметры...])</pre>
<p>Зачастую классы со статическими компонентами используют в качестве библиотек констант и вспомогательных функций. Также, статические члены класса могут использоваться в качестве "счетчиков объектов", так как статические переменные принадлежат всем объектам одновременно, другими словами, все изменения, производимые над статическим членом в одном объекте, распространяются на другие объекты.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=33&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/static-objects-and-methods.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перекодировка cp1251 в UTF8</title>
		<link>http://mihalytch.org.ua/programming/php/convert-cp1251-utf8.html</link>
		<comments>http://mihalytch.org.ua/programming/php/convert-cp1251-utf8.html#comments</comments>
		<pubDate>Mon, 12 May 2008 10:31:46 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/convert-cp1251-utf8.html</guid>
		<description><![CDATA[Сегодня столкнулся с проблемой перекодировки русского текста из cp1251 (windows-1251) в UTF8. Решение нашел быстро. Как всегда нельзя переоценить роль Google;) Ранее пользовался iconv("CP1251", "UTF-8", $text_for_convert), но, как известно iconv даёт большую нагрузку на сервер и работает медленнее чем представленная ниже функция. function cp1251_to_utf8 ($txt) { $in_arr = array (   chr(208), chr(192), chr(193), chr(194),   chr(195), [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня столкнулся с проблемой перекодировки русского текста из cp1251 (windows-1251) в UTF8. Решение нашел быстро. Как всегда нельзя переоценить роль Google;)<span id="more-30"></span></p>
<p>Ранее пользовался <em>iconv("CP1251", "UTF-8", $text_for_convert),</em> но, как известно <em>iconv</em> даёт большую нагрузку на сервер и работает медленнее чем представленная ниже функция.</p>
<pre class="brush: php;">
function cp1251_to_utf8 ($txt)  {
    $in_arr = array (
        chr(208), chr(192), chr(193), chr(194),
        chr(195), chr(196), chr(197), chr(168),
        chr(198), chr(199), chr(200), chr(201),
        chr(202), chr(203), chr(204), chr(205),
        chr(206), chr(207), chr(209), chr(210),
        chr(211), chr(212), chr(213), chr(214),
        chr(215), chr(216), chr(217), chr(218),
        chr(219), chr(220), chr(221), chr(222),
        chr(223), chr(224), chr(225), chr(226),
        chr(227), chr(228), chr(229), chr(184),
        chr(230), chr(231), chr(232), chr(233),
        chr(234), chr(235), chr(236), chr(237),
        chr(238), chr(239), chr(240), chr(241),
        chr(242), chr(243), chr(244), chr(245),
        chr(246), chr(247), chr(248), chr(249),
        chr(250), chr(251), chr(252), chr(253),
        chr(254), chr(255)
    );   

    $out_arr = array (
        chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
        chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
        chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
        chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
        chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
        chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
        chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
        chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
        chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
        chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
        chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
        chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
        chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
        chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
        chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
        chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
        chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
        chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
        chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
        chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
        chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
        chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
    );   

    $txt = str_replace($in_arr,$out_arr,$txt);
    return $txt;
}
</pre>
<p>Отказаться от iconv вынудило еще то, что в определенный момент при перекодировании  из windows-1251 в UTF-8 без видимых причин, данная функция стала возвращать пустую строку.</p>
<p>З.Ы. Если поменять местами $in_arr и $out_arr, то функция заработает "в обратном направлении", т.е. будет преобразовывать UTF-8 в CP-1251.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=30&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/convert-cp1251-utf8.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Работа с DNS в PHP</title>
		<link>http://mihalytch.org.ua/programming/php/dns-in-php.html</link>
		<comments>http://mihalytch.org.ua/programming/php/dns-in-php.html#comments</comments>
		<pubDate>Sun, 04 May 2008 16:19:55 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/dns-in-php.html</guid>
		<description><![CDATA[В данной статье будут рассмотрены инструменты в PHP предназначенные для работы с DNS. Зачастую возникает задача получения имени хоста по его IP-адресу. Теперь непосредственно перейдем к рассмотрению задачи получения  IP-адреса по имени хоста. Для ее решения используют две функции: string gethostbyname ( string $hostname ); array gethostbynamel ( string $hostname ); Обе функции в качестве аргумента принимают строку, которая содержит имя хоста (компьютера). Разница между ними заключается лишь в том, что gethostbyname() возвращает строку с соответствующим  IP-адресом компьютера, а gethostbynamel() - массив. gethostbynamel() полезна в том случае, когда необходимо получить полный список IP-адресов, которые соответствуют данному доменному имени. Чтобы получить доменное имя по известному  IP-адресу, необходимо [...]]]></description>
			<content:encoded><![CDATA[<p>В данной статье будут рассмотрены инструменты в PHP предназначенные для работы с DNS.</p>
<p>Зачастую возникает задача получения имени хоста по его IP-адресу.<span id="more-28"></span></p>
<p>Теперь непосредственно перейдем к рассмотрению задачи получения  IP-адреса по имени хоста. Для ее решения используют две функции:</p>
<ol>
<li>
<pre>string <strong>gethostbyname</strong> ( string $hostname );</pre>
</li>
<li>
<pre>array <strong>gethostbynamel</strong> ( string $hostname );</pre>
</li>
</ol>
<p>Обе функции в качестве аргумента принимают строку, которая содержит имя хоста (компьютера).</p>
<p>Разница между ними заключается лишь в том, что gethostbyname() возвращает строку с соответствующим  IP-адресом компьютера, а gethostbynamel() - массив.</p>
<p>gethostbynamel() полезна в том случае, когда необходимо получить полный список IP-адресов, которые соответствуют данному доменному имени.</p>
<p>Чтобы получить доменное имя по известному  IP-адресу, необходимо воспользоваться функцией:</p>
<pre>string <strong>gethostbyaddr</strong> ( string $ip_address )</pre>
<p>Входящий параметр - строка с IP-адресом искомого сервера, возвращаемое значение - строка с доменным именем.</p>
<p>Для того чтобы  получить список почтовых ретрансляторов необходимого домена, используют:</p>
<pre>bool <strong>getmxrr</strong> ( string $hostname , array &amp;$mxhosts [, array &amp;$weight ] )</pre>
<p>Аргументы:</p>
<p><em>$hostname</em> - имя хоста;<br />
<em>&amp;$mxhosts</em> - массив, который будет заполнен списком почтовых ретрансляторов;<br />
<em>&amp;$weight</em> - необязательный параметр. Если он указан, то он будет заполнен значениями предпочтения, которые возвращает почтовый ретранслятор.</p>
<p>Ниже представлены еще несколько полезных функций:</p>
<pre>int <strong>getprotobyname</strong> ( string $name )</pre>
<p>по имени TCP/IP протокола определяет его номер.</p>
<pre>string <strong>getprotobynumber</strong> ( int $number )</pre>
<p>по номеру TCP/IP протокола возвращает его имя.</p>
<pre>int <strong>getservbyname</strong> ( string $service , string $protocol )</pre>
<p>принимает в качестве аргументов:  $service - имя службы и $protocol - и один из транспортных протоколов (TCP или UDP). Возвращает номер порта, через который работает данная служба.</p>
<pre>string <strong>getservbyport</strong> ( int $port , string $protocol )</pre>
<p>входные параметры:  $port - номер порта и $protocol - протокол. Возвращает имя службы.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=28&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/dns-in-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
