<?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>Петька Сокольников &#187; PHP</title>
	<atom:link href="http://blog.xyz.net.ua/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xyz.net.ua</link>
	<description>блог программиста</description>
	<lastBuildDate>Sat, 17 Apr 2010 08:34:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Проверка URL на валидность (preg_match) в PHP</title>
		<link>http://blog.xyz.net.ua/2010/04/15/url_validation_preg_mtch/</link>
		<comments>http://blog.xyz.net.ua/2010/04/15/url_validation_preg_mtch/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 06:46:12 +0000</pubDate>
		<dc:creator>Петька Сокольников</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PCRE]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.xyz.net.ua/?p=97</guid>
		<description><![CDATA[Нужен был рег для проверки корректности введенного URL. Для примера был взят один отсюда, но немного дописан. Добавлена возможность принимать урлы с указанием порта, а также разрешено использование в адресе (не домене) символов &#171;()*&#187; (причем это позволено RFC 1738) и кириллицы (да, появилась нужда принимать и обрабатывать такие адреса без предварительного rawurlencode()). $file_now = "http://www.domain.net.ua:8080/48649c6575cab899e6841aea6563e72a/down/3878/Abcde(FGH*).avi#dfbdf-dfb"; [...]]]></description>
			<content:encoded><![CDATA[<p>Нужен был рег для проверки корректности введенного URL. Для примера был взят один <a href="http://htmlweb.ru/php/example/preg.php" target="_blank">отсюда</a>, но немного дописан.<br />
Добавлена возможность принимать урлы с указанием порта, а также разрешено использование в  адресе (не домене) символов &laquo;()*&raquo; (<em>причем это позволено RFC 1738</em>) и кириллицы (да, появилась нужда принимать и обрабатывать такие адреса без предварительного<em> rawurlencode()</em>). </p>
<p><span id="more-97"></span></p>
<blockquote><p><code></p>
<p>$file_now = "http://www.domain.net.ua:8080/48649c6575cab899e6841aea6563e72a/down/3878/Abcde(FGH*).avi#dfbdf-dfb";</p>
<p>if (preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".<br />
   "(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".<br />
   "org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".<br />
   "!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(:[0-9]{1,5})?(?:/[а-яa-z0-9.,_@%\(\)\*&#038;".<br />
   "?+=\~/-]*)?(?:#[^ '\"&#038;<>]*)?$~i", $file_now))<br />
   		 print "Correct!";<br />
else print "Incorrect...";<br />
</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.xyz.net.ua/2010/04/15/url_validation_preg_mtch/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Excel-файл из PHP</title>
		<link>http://blog.xyz.net.ua/2009/05/08/php_to_excel/</link>
		<comments>http://blog.xyz.net.ua/2009/05/08/php_to_excel/#comments</comments>
		<pubDate>Fri, 08 May 2009 06:27:26 +0000</pubDate>
		<dc:creator>Петька Сокольников</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.xyz.net.ua/?p=36</guid>
		<description><![CDATA[Появилась задача создания простых таблиц excel налету. В принципе, если поискть в сети, то можно найти ряд готовых инструментов для создания *.xls файлов. Делюсь с вами коротким обзором. Spreadsheet_Excel_Writer &#8211; целый пакет для решения подобных задач. Но необходимо наличие PEAR на сервере, а в подавляющем большинстве виртуальных хостингов PEAR не подключен. Конечно, можно собрать все [...]]]></description>
			<content:encoded><![CDATA[<p>Появилась задача создания простых таблиц excel налету.<br />
В принципе, если поискть в сети, то можно найти ряд готовых инструментов для создания *.xls файлов.<br />
Делюсь с вами коротким обзором.</p>
<p><span id="more-36"></span><br />
<a href="http://pear.php.net/package/Spreadsheet_Excel_Writer"  target="_blank">Spreadsheet_Excel_Writer</a> &#8211; целый пакет для решения подобных задач. Но необходимо наличие PEAR на сервере, а в подавляющем большинстве виртуальных хостингов PEAR не подключен. Конечно, можно собрать все файлы пакета в одном месте, поиграться с путями, но в моем случае овчинка не стоит выделки.</p>
<p>Можно генерить xls-файлы используя COM-объекты (пример: <a href="http://www.spravkaweb.ru/php/sovet/excelcom" target="_blank">http://www.spravkaweb.ru/php/sovet/excelcom</a>), но COM &#8212; это это прерогатива windows-серверов, поэтому и этот вариант отпадает.</p>
<p><a href="http://sourceforge.net/projects/psxlsgen/" target="_blank">PHP Simple Excel File Generator</a> &#8211; рабочее название <strong>psxlsgen</strong>. Класс для генерирования excel-файлов. Честно говорю, что не успел попробовать его в работе. Может когда-нибудь придется и его поковырять.</p>
<p>Ну и конечно можно поискать другие классы для решения нашей задачи на <a href="http://www.phpclasses.org/" target="_blank">http://www.phpclasses.org/</a> по ключам <a  target="_blank" href="http://www.google.com/custom?domains=www.phpclasses.org&#038;q=excel+php&#038;sa=Search&#038;sitesearch=www.phpclasses.org&#038;client=pub-2951707118576741&#038;forid=1&#038;channel=5742870948&#038;ie=ISO-8859-1&#038;oe=ISO-8859-1&#038;cof=GALT%3A%23663399%3BGL%3A1%3BDIV%3A%23222222%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3A%23e4e4e8%3BLBGC%3A%23e4e4e8%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BLH%3A50%3BLW%3A256%3BL%3Ahttp%3A%2F%2Ffiles.phpclasses.org%2Fgraphics%2Fgooglesearch.gif%3BS%3Ahttp%3A%2F%2Fwww.phpclasses.org%2Fsearch.html%3BFORID%3A1%3B&#038;hl=en">excel php</a></p>
<p>Но для решения моей задачи не пригодилось ничего из описанного мной выше. Ведь excel запросто понимает html-код. Поэтому мне для создания простого списка элементов в excel достаточно было сгенерировать html-страницу c отправкой соответствующих заголовков.</p>
<p><strong>Пример:</strong></p>
<blockquote><p>&lt;?PHP<br />
header(&laquo;Content-Type: application/vnd.ms-excel&raquo;);<br />
header(&laquo;Content-Disposition: attachment; filename=file.xls&raquo;);<br />
header(&laquo;Content-Transfer-Encoding: binary&raquo;);</P><P>print &raquo;<br />
&lt;table border=\&raquo;1\&raquo;&gt;<br />
&nbsp;&lt;tr&gt;<br />
&nbsp; &lt;td width=\&raquo;200\&raquo;&gt;&lt;b&gt;Заголовок 1&lt;/b&gt;&lt;/td&gt;<br />
&nbsp; &lt;td&gt;&lt;b&gt;Заголовок 1&lt;/b&gt;&lt;/td&gt;<br />
&nbsp;&lt;/tr&gt;<br />
&nbsp;&lt;tr&gt;<br />
&nbsp; &lt;td&gt;Элемент 1&lt;/td&gt;<br />
&nbsp; &lt;td&gt;Описание 1&lt;/td&gt;<br />
&nbsp;&lt;/tr&gt;<br />
&nbsp;&lt;tr&gt;<br />
&nbsp; &lt;td&gt;Элемент 2&lt;/td&gt;<br />
&nbsp; &lt;td&gt;Описание 2&lt;/td&gt;<br />
&nbsp;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&laquo;;<br />
?&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.xyz.net.ua/2009/05/08/php_to_excel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Основы работы с сессиями</title>
		<link>http://blog.xyz.net.ua/2009/05/06/php_sessions/</link>
		<comments>http://blog.xyz.net.ua/2009/05/06/php_sessions/#comments</comments>
		<pubDate>Wed, 06 May 2009 14:08:04 +0000</pubDate>
		<dc:creator>Петька Сокольников</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.xyz.net.ua/?p=16</guid>
		<description><![CDATA[Эта статья была написанна мной несколько лет назад. Была опубликованна на разных сайтах: http://www.php.com.ua/ru/articles/basic/session_start.htm http://btl-studio.com/o/17/ http://kiev.abcname.net/index.php?o=17 Ну и чтобы добро не пропадало, сделаю кросспост тут. Что такое сессии и для чего они нужны? Давайте представим такую ситуацию: у вас есть некоторое количество страниц, вход на которые вы хотите ограничить паролем. У нас есть форма, в [...]]]></description>
			<content:encoded><![CDATA[<p>Эта статья была написанна мной несколько лет назад.  Была опубликованна на разных сайтах:<br />
<a href="http://www.php.com.ua/ru/articles/basic/session_start.htm" target=_blank>http://www.php.com.ua/ru/articles/basic/session_start.htm</a><br />
<a href="http://btl-studio.com/o/17/" target=_blank>http://btl-studio.com/o/17/</a><br />
<a href="http://kiev.abcname.net/index.php?o=17" target=_blank>http://kiev.abcname.net/index.php?o=17</a><br />
Ну и чтобы добро не пропадало, сделаю кросспост тут.</p>
<p><span id="more-16"></span><br />
<strong>Что такое сессии и для чего они нужны?</strong></p>
<p>Давайте представим такую ситуацию: у вас есть некоторое количество страниц, вход на которые вы хотите ограничить паролем. У нас есть форма, в которой мы вводим логин и пароль, на следующей странице мы проверяем эти данные на «правильность», если логин и пароль верны, то отображаем содержимое страницы.</p>
<p>Всё бы ничего, но «запароленых» страниц у нас несколько, и логин с паролем надо проверять на каждой. Тут возникает необходимость передачи этих данных между страницами. Конечно, можно было бы передавать логин и пароль методом GET (http://www.domain.org/page.php?login=xyz&#038;pass=1123), но по нескольким причинам так делать не стоит (всем виден пароль). А представим себе случай, когда необходимо передать от скрипта скрипту (от страницы к странице) большое количество информации&#8230; И тут возникает мысль: «хорошо было бы иметь возможность передавать нужные нам данные от одного скрипта к другому при просмотре сайта без прямой передачи этих данных от сервера к браузеру и обратно». Таким образом, мы сами подобрались к принципу работы сессий.</p>
<p><strong><br />
Как устроенны сессии ?</strong></p>
<p>Сессии &#8211; это механизм, созданный для временного хранения и передачи информации между скриптами в пределах одного сайта.</p>
<blockquote><p>Сессии предусматривают возможность создания собственных способов обработки информации, поэтому, в принципе, можно использовать сессии и при работе с несколькими сайтами или даже с несколькими серверами. Эти способы нами здесь рассматриваться не будут, так как эти приемы выходят за рамки стандартного программирования на РНР и требуют от программиста глубоких знаний не только РНР, но и знания сетевых протоколов, архитектуры построения серверов и так далее.</p></blockquote>
<p><strong>Сессии с точки зрения программиста</strong><br />
Чтобы запустить механизм сессии в скрипте (создать сессию) необходимо воспользоваться функцией <strong>session_start()</strong>. Эта функция должна стоять в Вашем скрипте до того, как скрипт начнет вывод информации (зачем &#8211; объясним ниже). После создании сессии мы получаем доступ к суперглобальному массиву <strong>$_SESSION</strong>, который обладает полезными свойствами. Так, помещенная в него информация будет доступна нам в любом скрипте в любой функции данного сайта в течении сеанса работы с сайтом. Сеанс прекращается когда пользователь закроет браузер или по прошествии определенного времени, в течении которого пользователь не совершал переходов по сайту. Это время определяется опцией <strong>session.gc_maxlifetime</strong> в файле <strong>php.ini</strong> и определяет время, по прошествии которого файл сессии будет рассматриваться как устаревший.</p>
<p>Существует также массив <strong>$HTTP_SESSION_VARS</strong>, которым можно пользоваться при работе с сессиями. Но этот массив не является суперглобальным, плюс имя его содержит больше букв, а значит нужно потратить больше времени на его написание. В общем, пользоваться этим массивом я не рекомендую.</p>
<p><strong>Более пристальный взгляд на механизм работы сессий</strong><br />
Передача данных от скрипта к скрипту согласно механизму работы сессий состоит из создания файла, записи данных в файл, открытии файла чтении данных и тд. Итак, изначально этот механизм опирается на файлы. Как уже упоминалось, при необходимости, данные сессии можно хранить в базе данных или просто в памяти. Для этого необходимо воспользоваться функцией <strong>session_set_save_handler()</strong> и/или опцией <strong>session.save_handler</strong> в файле <strong>php.ini</strong></p>
<p><strong>Идентификатор сессии.</strong><br />
При старте сессии создается специальный файл, в котором хранятся данные, переданные с помощью сессии. Для идентификации конкретной сессии конкретного пользователя используется так называемый идентификатор сессии. Идентификатор представляет из себя 128 битное число типа 523afa15f4a8e05e95241481c0cbc71e, которое при старте сессий выбирается случайным образом. В итоге, мы имеем файл, в имени которого присутствует уникальный идентификатор равный идентификатору сессии.</p>
<p><strong>Передача идентификатора сессии</strong><br />
Существует два способа передачи идентификатора сессии между сервером и браузером:</p>
<ul>
<li>Куки</li>
<li>Как параметр в URL</li>
</ul>
<p><strong>Использование cookies</strong> – если у пользователи куки включены PHP процессор сам помещает туда переменную со значением идентификатора, и в нужный момент читает ее от туда, причем включены у клиента куки или нет – php определяет самостоятельно.</p>
<blockquote><p><strong>Что такое cookie?</strong><br />
    Cookie это небольшая порция информации, которую сервер передает клиенту. Клиент (броузер) будет хранить эту информацию и передавать ее серверу с каждым запросом как часть HTTP заголовка. Некоторые cookie хранятся только в течение одной сессии, они удаляются после закрытия броузера. Другие, установленные на некоторый период времени, данные записываются в файл.</p></blockquote>
<p><strong>Использование параметров</strong> – этот метод используется PHP если куки отключены. Суть метода в том, что PHP процессор анализирует весь код, предназначенный для отображения в браузере, и производит автозамену всех ссылок таким образом, чтобы идентификатор сессии мог передаться на следующую страницу посредством метода GET или POST.</p>
<p><strong><br />
Примеры автозамены:</strong></p>
<p><strong>Код до обработки php-процессором:</strong><br />
<code>&lt;a href=page.php&gt;link&lt;/a&gt;<br />
</code></p>
<p><strong>Код после обработки php-процессором:</strong><br />
<code>&lt;a href=page.php?PHPSESSID=523afa15f4a8e05e95241481c0cbc71e&gt;link&lt;/a&gt;</code></p>
<p><strong>Код до обработки формы php-процессором:</strong><br />
<code>&lt;form action=page.php&gt;<br />
&lt;/form&gt;</code></p>
<p><strong>Код после обработки формы php-процессором:</strong><br />
<code>&lt;form action=page.php&gt;<br />
&lt;input type="hidden" name="PHPSESSID" value="523afa15f4a8e05e95241481c0cbc71e"&gt;<br />
&lt;/form&gt;<br />
</code></p>
<p><strong>Выводы</strong></p>
<p>Итак, подведем итог сказанному выше. У нас есть данные, которые необходимо использовать на нескольких страницах; для каждого клиента под хранение этих данных выделяется пространство памяти с уникальным идентификатором; PHP передает этот идентификатор от скрипта к скрипту, тем самым, открывая доступ к выделенному для текущего клиента участку памяти. Все эти действия выполняются PHP-процессором автоматически, а от программиста требуется всего лишь дать команду на запуск сессий.<br />
На примере всего этого мы видим, что сессии – это очень удобный и гибкий механизм для идентификации клиентских запросов.</p>
<p><strong>Часто используемые параметры и функции для сессий</strong></p>
<p><strong>session_start(); </strong>- запускает механизм сессий для текущего скрипта.</p>
<blockquote><p>    <strong>Предупреждение:</strong><br />
    Если Вы хотите, чтобы ваш сценарий работал независимо от register_globals, Вам нужно использовать массив <strong>$_SESSION</strong> так как данные которые находятся в этом массиве автоматически регистрируются. Если ваш сценарий использует <strong>session_register()</strong>, он не будет работать в средах где директива PHP <strong>register_globals</strong> выключена.</p></blockquote>
<p><strong><br />
Рекомендуется использовать такую конструкцию для регистрации переменных в сесии</strong><br />
<code>$_SESSION[‘name’]=”Василий”;</code></p>
<p><strong>session_destroy();</strong> &#8211; уничтожаются данные, хранящиеся в сессии, сам файл сессии и его идентификатор.</p>
<p><strong>session_name();</strong> &#8211; эта функция возвращает название переменной, которая используется для хранения идентификатора сессии.</p>
<p><strong>session_id();</strong> &#8211; сам идентификатор сессии.</p>
<p><strong>session.name</strong> – параметр в php.ini устанавливающий имя переменной для хранения идентификатора сессии, по умолчанию значение – PHPSESSID.</p>
<p><strong>session.auto_start</strong> – параметр включающий/выключающий автоматический старт сессий. Если значение этого параметра – <strong>1</strong>, то сессии стартуют автоматически и использовать <strong>session_start()</strong> не надо, если значение параметра – <strong>0</strong>, то сессии не будут стартовать автоматически. По умолчанию значение <strong>0</strong>.</p>
<p><strong>session.use_cookies</strong> – параметр указывающий PHP процессору использовать ли куки для хранения идентификатора или нет. По умолчанию PHP-процессору разрешено использовать cookies для хранения идентификатора сессии, и значение этого параметра равно <strong>1</strong>.</p>
<p>Остальные параметры и функции для работы с сессиями используются сравнительно редко, и поэтому я не стану приводить их описание в этой статье. Но если у вас всё-таки есть желание, то вы всегда можете ознакомиться с ними тут: <a href="http://ua.php.net/manual/ru/ref.session.php" target=_blank>http://ua.php.net/manual/ru/ref.session.php</a></p>
<p><strong>Пример использования сессий</strong></p>
<p>Сейчас я на простейшем примере продемонстрирую как хранятся и передаются данные при помощи механизма сессий.</p>
<p><strong>index.php</strong><br />
<code>&lt;form action=page1.php method=”GET”&gt;<br />
Введите ваше имя &lt;input type=text name=login&gt;<br />
&lt;input type=submit&gt;<br />
&lt;/form&gt;</code></p>
<p><strong>page1.php</strong><br />
<code>&lt;?php // внимание!!! До &lt;?php не должно быть пробелов или пустых строк<br />
session_start();<br />
// включаем поддержку сессий и генерируем случайный<br />
// идентификатор сессии</P><P>$_SESSION[‘login’]=”root”;<br />
// регистрируем переменную $login как переменную сессии.</P><P>print "На предыдущей странице вы ввели имя &lt;b&gt;$_GET[‘login’]&lt;/b&gt;. Ваше имя уже хранится в файле сессии.&lt;br /&gt;<br />
Перейдите по ссылке на следующую страницу&lt;p&gt;</P><P>&lt;a href=”page2.php”&gt;Ссылка на следующую страницу&lt;/a&gt;";<br />
// делаем ссылку для перехода на следующую страницу<br />
// в эту ссылку при помощи механизма автозамены<br />
// будет подставлен идентификатор сессии<br />
?&gt;<br />
</code></p>
<p><strong>page2.php</strong><br />
<code>&lt;?php // внимание!!! До &lt;?php не должно быть пробелов или пустых строк<br />
session_start();<br />
// снова включаем поддержку сессий</P><P>print "Ваше имя, переданное при помощи механизма сессий: &lt;b&gt;$_SESSION[‘login’]&lt;/b&gt;";<br />
// выводим содержимое переменной $login<br />
// которая хранится в файле сессий<br />
?&gt;<br />
</code></p>
<p>На этом я заканчиваю свою статью, и желаю вам успехов в дальнейшем изучении PHP!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xyz.net.ua/2009/05/06/php_sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
